From d9911a8ff572d87c80461b94cd416d1226cd10c7 Mon Sep 17 00:00:00 2001 From: sofia Date: Sun, 3 Aug 2025 19:27:54 +0300 Subject: [PATCH] Fix TokenRange for assoc function self --- reid-lsp/src/analysis.rs | 12 +++++++++++- reid/src/ast/parse.rs | 10 +++++----- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/reid-lsp/src/analysis.rs b/reid-lsp/src/analysis.rs index 0aaf582..94c5f65 100644 --- a/reid-lsp/src/analysis.rs +++ b/reid-lsp/src/analysis.rs @@ -343,6 +343,17 @@ pub fn analyze_context(context: &mir::Context, module: &mir::Module, error: Opti for (_, function) in &module.associated_functions { for param in &function.parameters { scope.state.init_types(¶m.meta, Some(param.ty.clone())); + + if param.meta.source_module_id == module.module_id { + dbg!(param); + let idx = scope + .token_idx(¶m.meta, |t| matches!(t, Token::Identifier(_))) + .unwrap_or(function.signature().range.end); + dbg!(idx, scope.tokens.get(idx)); + let symbol = scope.state.new_symbol(idx, SemanticKind::Variable); + scope.state.set_symbol(idx, symbol); + scope.variables.insert(param.name.clone(), symbol); + } } match &function.kind { @@ -366,7 +377,6 @@ pub fn analyze_context(context: &mir::Context, module: &mir::Module, error: Opti for param in &function.parameters { scope.state.init_types(¶m.meta, Some(param.ty.clone())); - dbg!(param); if param.meta.source_module_id == module.module_id { let idx = scope .token_idx(¶m.meta, |t| matches!(t, Token::Identifier(_))) diff --git a/reid/src/ast/parse.rs b/reid/src/ast/parse.rs index 324282d..f04e36b 100644 --- a/reid/src/ast/parse.rs +++ b/reid/src/ast/parse.rs @@ -1168,11 +1168,11 @@ impl Parse for AssociatedFunctionBlock { match stream.peek() { Some(Token::FnKeyword) | Some(Token::PubKeyword) => { let mut fun: FunctionDefinition = stream.parse()?; - fun.0.self_kind = match fun.0.self_kind { - SelfKind::Owned(_) => SelfKind::Owned(ty.clone()), - SelfKind::Borrow(_) => SelfKind::Borrow(ty.clone()), - SelfKind::MutBorrow(_) => SelfKind::MutBorrow(ty.clone()), - SelfKind::None => SelfKind::None, + match &mut fun.0.self_kind { + SelfKind::Owned(inner_ty) => inner_ty.0 = ty.0.clone(), + SelfKind::Borrow(inner_ty) => inner_ty.0 = ty.0.clone(), + SelfKind::MutBorrow(inner_ty) => inner_ty.0 = ty.0.clone(), + SelfKind::None => {} }; functions.push(fun); }