Improve LSP hover typing
This commit is contained in:
parent
4fada0036c
commit
f89b26bf74
@ -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;
|
||||
}
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user