Improve LSP hover typing

This commit is contained in:
Sofia 2025-08-01 22:41:46 +03:00
parent 4fada0036c
commit f89b26bf74
2 changed files with 32 additions and 10 deletions

View File

@ -1,10 +0,0 @@
struct Foo {
a: i32,
b: i32,
}
fn main() -> i32 {
// ISSUE: The debugger says b is 1
let foos = [Foo { a: 1, b: 2}];
return 0;
}

View File

@ -272,6 +272,38 @@ pub fn find_type_in_context(module: &mir::Module, token_idx: usize) -> Option<Ty
}
}
for binop in &module.binop_defs {
if let Some(meta) = binop.block_meta() {
if !meta.contains(token_idx) {
continue;
}
}
return match &binop.fn_kind {
mir::FunctionDefinitionKind::Local(block, _) => find_type_in_block(&block, module.module_id, token_idx),
mir::FunctionDefinitionKind::Extern(_) => None,
mir::FunctionDefinitionKind::Intrinsic(_) => None,
};
}
for (_, function) in &module.associated_functions {
if !(function.signature() + function.block_meta()).contains(token_idx) {
continue;
}
for param in &function.parameters {
if param.meta.contains(token_idx) {
return Some(param.ty.clone());
}
}
return match &function.kind {
mir::FunctionDefinitionKind::Local(block, _) => find_type_in_block(&block, module.module_id, token_idx),
mir::FunctionDefinitionKind::Extern(_) => None,
mir::FunctionDefinitionKind::Intrinsic(_) => None,
};
}
for function in &module.functions {
if !(function.signature() + function.block_meta()).contains(token_idx) {
continue;