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