From 1b90b0d4ce9c513f95aeed32504bf704db15351b Mon Sep 17 00:00:00 2001 From: GearsDatapacks Date: Sun, 26 Jan 2025 21:55:44 +0000 Subject: [PATCH] Fix renaming for Zed --- compiler-core/src/language_server/engine.rs | 31 +++++++++++++-------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/compiler-core/src/language_server/engine.rs b/compiler-core/src/language_server/engine.rs index 9ac478d6a60..ab35763e803 100644 --- a/compiler-core/src/language_server/engine.rs +++ b/compiler-core/src/language_server/engine.rs @@ -501,44 +501,53 @@ where params: lsp::TextDocumentPositionParams, ) -> Response> { self.respond(|this| { - let (_, found) = match this.node_at_position(¶ms) { + let (lines, found) = match this.node_at_position(¶ms) { Some(value) => value, None => return Ok(None), }; - let success_response = Some(PrepareRenameResponse::DefaultBehavior { - default_behavior: true, - }); + let success_response = |location| { + Some(PrepareRenameResponse::Range(src_span_to_lsp_range( + location, &lines, + ))) + }; Ok(match found { Located::Expression(TypedExpr::Var { constructor: ValueConstructor { - variant: ValueConstructorVariant::LocalVariable { origin, .. }, + variant: ValueConstructorVariant::LocalVariable { origin, location }, .. }, .. }) - | Located::Pattern(Pattern::Variable { origin, .. }) => match origin { + | Located::Pattern(Pattern::Variable { + origin, location, .. + }) => match origin { VariableOrigin::Variable(_) | VariableOrigin::AssignmentPattern - | VariableOrigin::LabelShorthand(_) => success_response, + | VariableOrigin::LabelShorthand(_) => success_response(*location), VariableOrigin::Generated => None, }, Located::Pattern(Pattern::VarUsage { constructor, .. }) => constructor .as_ref() .and_then(|constructor| match &constructor.variant { - ValueConstructorVariant::LocalVariable { origin, .. } => match origin { + ValueConstructorVariant::LocalVariable { origin, location } => match origin + { VariableOrigin::Variable(_) | VariableOrigin::AssignmentPattern - | VariableOrigin::LabelShorthand(_) => success_response, + | VariableOrigin::LabelShorthand(_) => success_response(*location), VariableOrigin::Generated => None, }, _ => None, }), - Located::Pattern(Pattern::Assign { .. }) => success_response, + Located::Pattern(Pattern::Assign { location, .. }) => success_response(*location), Located::Arg(arg) => match &arg.names { - ArgNames::Named { .. } | ArgNames::NamedLabelled { .. } => success_response, + ArgNames::Named { location, .. } + | ArgNames::NamedLabelled { + name_location: location, + .. + } => success_response(*location), ArgNames::Discard { .. } | ArgNames::LabelledDiscard { .. } => None, }, _ => None,