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 { |     for function in &module.functions { | ||||||
|         if !(function.signature() + function.block_meta()).contains(token_idx) { |         if !(function.signature() + function.block_meta()).contains(token_idx) { | ||||||
|             continue; |             continue; | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user