Improve invoked ty hover
This commit is contained in:
		
							parent
							
								
									ceee2f286a
								
							
						
					
					
						commit
						89b6fc1a71
					
				| @ -6,7 +6,7 @@ use reid::{ | |||||||
|         lexer::{FullToken, Token}, |         lexer::{FullToken, Token}, | ||||||
|         token_stream::TokenRange, |         token_stream::TokenRange, | ||||||
|     }, |     }, | ||||||
|     codegen::intrinsics::get_intrinsic_assoc_functions, |     codegen::intrinsics::{self, get_intrinsic_assoc_functions}, | ||||||
|     compile_module, |     compile_module, | ||||||
|     error_raporting::{ErrorModules, ReidError}, |     error_raporting::{ErrorModules, ReidError}, | ||||||
|     mir::{ |     mir::{ | ||||||
| @ -1215,10 +1215,21 @@ pub fn analyze_expr( | |||||||
|                 scope.state.new_symbol(type_idx, SemanticKind::Type) |                 scope.state.new_symbol(type_idx, SemanticKind::Type) | ||||||
|             }; |             }; | ||||||
|             scope.state.set_symbol(type_idx, type_symbol); |             scope.state.set_symbol(type_idx, type_symbol); | ||||||
|  |             scope.state.set_hover( | ||||||
|  |                 type_idx, | ||||||
|  |                 Hover { | ||||||
|  |                     documentation: None, | ||||||
|  |                     kind: Some(HoverKind::Type(invoked_ty.clone())), | ||||||
|  |                 }, | ||||||
|  |             ); | ||||||
| 
 | 
 | ||||||
|             let fn_idx = scope |             let fn_idx = scope | ||||||
|                 .token_idx(&meta, |t| matches!(t, Token::Identifier(_))) |                 .token_idx(&meta, |t| matches!(t, Token::Identifier(_))) | ||||||
|                 .unwrap_or(meta.range.end); |                 .unwrap_or(meta.range.end); | ||||||
|  | 
 | ||||||
|  |             let intrinsics = get_intrinsic_assoc_functions(&invoked_ty); | ||||||
|  |             let intrinsic_fn = intrinsics.iter().find(|i| i.name == *name); | ||||||
|  | 
 | ||||||
|             let fn_symbol = if let Some((module_id, symbol_id, hover)) = |             let fn_symbol = if let Some((module_id, symbol_id, hover)) = | ||||||
|                 scope.associated_functions.get(&(invoked_ty.clone(), name.clone())) |                 scope.associated_functions.get(&(invoked_ty.clone(), name.clone())) | ||||||
|             { |             { | ||||||
| @ -1227,6 +1238,20 @@ pub fn analyze_expr( | |||||||
|                     .new_symbol(fn_idx, SemanticKind::Reference(*module_id, *symbol_id)); |                     .new_symbol(fn_idx, SemanticKind::Reference(*module_id, *symbol_id)); | ||||||
|                 scope.state.set_hover(fn_idx, hover.clone()); |                 scope.state.set_hover(fn_idx, hover.clone()); | ||||||
|                 symbol |                 symbol | ||||||
|  |             } else if let Some(intrinsic) = intrinsic_fn { | ||||||
|  |                 let symbol = scope.state.new_symbol(fn_idx, SemanticKind::Function); | ||||||
|  |                 scope.state.set_hover( | ||||||
|  |                     fn_idx, | ||||||
|  |                     Hover { | ||||||
|  |                         documentation: intrinsic.documentation.clone(), | ||||||
|  |                         kind: Some(HoverKind::Function( | ||||||
|  |                             intrinsic.name.clone(), | ||||||
|  |                             intrinsic.parameters.clone(), | ||||||
|  |                             intrinsic.return_type.clone(), | ||||||
|  |                         )), | ||||||
|  |                     }, | ||||||
|  |                 ); | ||||||
|  |                 symbol | ||||||
|             } else { |             } else { | ||||||
|                 scope.state.new_symbol(fn_idx, SemanticKind::Function) |                 scope.state.new_symbol(fn_idx, SemanticKind::Function) | ||||||
|             }; |             }; | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user