Fix reference-linking for local functions
This commit is contained in:
		
							parent
							
								
									136e9f9d1f
								
							
						
					
					
						commit
						8d27a6e7bd
					
				| @ -602,6 +602,7 @@ pub fn analyze_context( | |||||||
| 
 | 
 | ||||||
|     for (ty, function) in &module.associated_functions { |     for (ty, function) in &module.associated_functions { | ||||||
|         if let Some(source_id) = function.source { |         if let Some(source_id) = function.source { | ||||||
|  |             if source_id != module.module_id { | ||||||
|                 if let Some(state) = map.get(&source_id) { |                 if let Some(state) = map.get(&source_id) { | ||||||
|                     if let Some(symbol) = state.associated_functions.get(&(ty.clone(), function.name.clone())) { |                     if let Some(symbol) = state.associated_functions.get(&(ty.clone(), function.name.clone())) { | ||||||
|                         scope |                         scope | ||||||
| @ -611,6 +612,7 @@ pub fn analyze_context( | |||||||
|                 } |                 } | ||||||
|                 continue; |                 continue; | ||||||
|             } |             } | ||||||
|  |         } | ||||||
| 
 | 
 | ||||||
|         let idx = scope |         let idx = scope | ||||||
|             .token_idx(&function.signature(), |t| matches!(t, Token::Identifier(_))) |             .token_idx(&function.signature(), |t| matches!(t, Token::Identifier(_))) | ||||||
| @ -621,6 +623,9 @@ pub fn analyze_context( | |||||||
|             .state |             .state | ||||||
|             .associated_functions |             .associated_functions | ||||||
|             .insert((ty.clone(), function.name.clone()), symbol); |             .insert((ty.clone(), function.name.clone()), symbol); | ||||||
|  |         scope | ||||||
|  |             .associated_functions | ||||||
|  |             .insert((ty.clone(), function.name.clone()), (module.module_id, symbol)); | ||||||
| 
 | 
 | ||||||
|         for param in &function.parameters { |         for param in &function.parameters { | ||||||
|             scope.state.init_types(¶m.meta, Some(param.ty.clone())); |             scope.state.init_types(¶m.meta, Some(param.ty.clone())); | ||||||
| @ -647,7 +652,6 @@ pub fn analyze_context( | |||||||
|     for function in &module.functions { |     for function in &module.functions { | ||||||
|         if let Some(source_id) = function.source { |         if let Some(source_id) = function.source { | ||||||
|             if source_id != module.module_id { |             if source_id != module.module_id { | ||||||
|                 dbg!(source_id, &function.name); |  | ||||||
|                 if let Some(state) = map.get(&source_id) { |                 if let Some(state) = map.get(&source_id) { | ||||||
|                     if let Some(symbol) = state.functions.get(&function.name) { |                     if let Some(symbol) = state.functions.get(&function.name) { | ||||||
|                         scope.functions.insert(function.name.clone(), (source_id, *symbol)); |                         scope.functions.insert(function.name.clone(), (source_id, *symbol)); | ||||||
| @ -667,6 +671,9 @@ pub fn analyze_context( | |||||||
|         let function_symbol = scope.state.new_symbol(idx, SemanticKind::Function, module.module_id); |         let function_symbol = scope.state.new_symbol(idx, SemanticKind::Function, module.module_id); | ||||||
|         scope.state.set_symbol(idx, function_symbol); |         scope.state.set_symbol(idx, function_symbol); | ||||||
|         scope.state.functions.insert(function.name.clone(), function_symbol); |         scope.state.functions.insert(function.name.clone(), function_symbol); | ||||||
|  |         scope | ||||||
|  |             .functions | ||||||
|  |             .insert(function.name.clone(), (module.module_id, function_symbol)); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     for function in &module.functions { |     for function in &module.functions { | ||||||
|  | |||||||
| @ -307,7 +307,6 @@ impl LanguageServer for Backend { | |||||||
|             }); |             }); | ||||||
|             if let Some(token) = token { |             if let Some(token) = token { | ||||||
|                 let reference_tokens = analysis.find_references(token.0, &self.state_map()); |                 let reference_tokens = analysis.find_references(token.0, &self.state_map()); | ||||||
|                 dbg!(&reference_tokens); |  | ||||||
|                 let mut locations = Vec::new(); |                 let mut locations = Vec::new(); | ||||||
|                 if let Some(reference_tokens) = reference_tokens { |                 if let Some(reference_tokens) = reference_tokens { | ||||||
|                     for (module_id, symbol_idx) in reference_tokens { |                     for (module_id, symbol_idx) in reference_tokens { | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user