diff --git a/examples/a.reid b/examples/a.reid deleted file mode 100644 index 4d6538c..0000000 --- a/examples/a.reid +++ /dev/null @@ -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; -} \ No newline at end of file diff --git a/reid-lsp/src/main.rs b/reid-lsp/src/main.rs index 20fb852..ebd45e2 100644 --- a/reid-lsp/src/main.rs +++ b/reid-lsp/src/main.rs @@ -272,6 +272,38 @@ pub fn find_type_in_context(module: &mir::Module, token_idx: usize) -> Option 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;