diff --git a/libs/wingc/src/lsp/rename_prepare.rs b/libs/wingc/src/lsp/rename_prepare.rs index 8c2ec5cd370..c60f4bc1784 100644 --- a/libs/wingc/src/lsp/rename_prepare.rs +++ b/libs/wingc/src/lsp/rename_prepare.rs @@ -256,19 +256,6 @@ class User { "# ); - // TODO: not supported yet- therefore disabled - test_rename_prepare!( - cant_rename_struct_key, - r#" - struct user { - name: str; - //^ - } - - let a: user = {name: "a"}; - "# - ); - test_rename_prepare!( cant_rename_struct_keyword, r#" @@ -335,6 +322,53 @@ class User { "# ); + test_rename_prepare!( + cant_rename_super, + r#" + class A {} + class B extends A { + new() { + super(); + //^ + } + } + "# + ); + + test_rename_prepare!( + cant_rename_new, + r#" + class A {} + class B extends A { + new() { + //^ + super(); + } + } + "# + ); + + test_rename_prepare!( + cant_rename_inflight_new, + r#" + inflight class A { + inflight new() { + //^ + } + } + "# + ); + + test_rename_prepare!( + cant_rename_json_key, + r#" + let a = {name: "a"}; + + log(a.name); + //^ + "# + ); + test_rename_prepare!( cant_rename_json_val, r#" diff --git a/libs/wingc/src/lsp/rename_request.rs b/libs/wingc/src/lsp/rename_request.rs index ba7d796e89a..e15fa2d8df9 100644 --- a/libs/wingc/src/lsp/rename_request.rs +++ b/libs/wingc/src/lsp/rename_request.rs @@ -46,7 +46,7 @@ pub fn on_rename_request(params: RenameParams) -> WorkspaceEdit { mod tests { use crate::lsp::rename_request::*; use crate::lsp::sync::test_utils::*; - use lsp_types::{Range, Url}; + use lsp_types::Range; /// Creates a snapshot test for a given wing program's rename_request at a given position /// In the wing program, place a comment "//^" into the text where the "^" is pointing to the desired character position @@ -76,31 +76,6 @@ mod tests { new_name: String::from($new_word) }); - insta::with_settings!( - { - prepend_module_to_snapshot => false, - omit_expression => true, - snapshot_path => "./snapshots/rename_request", - }, { - - let mut changes = HashMap::new(); - // There is only one file, therefore we change only the first one - let new_key = Url::parse("file:///main.w").expect("invalid url"); - if let Some(c) = &$name.changes { - let text_edits = c.values().next().unwrap().clone(); - changes.insert(new_key, text_edits); - } - - insta::assert_yaml_snapshot!(WorkspaceEdit { - changes: Some(changes), - document_changes: None, - change_annotations: None, - }); - - - } - ); - let mut text_edit_ranges: Vec = vec![]; if let Some(changes) = &$name.changes { for text_edits in changes.values() { @@ -343,16 +318,36 @@ test "pow" { "t1" ); - // TODO: not supported yet test_rename_request!( rename_struct_key, r#" - struct user { + struct User { + name: str; + //---^ + } + + let a: User = {name: "a"}; + //---- + + log(a.name); + //---- + "#, + "t1" + ); + + test_rename_request!( + rename_struct_key_usage, + r#" + struct User { name: str; - //^ + //---- } - let a: user = {name: "a"}; + let a: User = {name: "a"}; + //---- + + log(a.name); + //---^ "#, "t1" ); @@ -419,4 +414,217 @@ test "pow" { "#, "t1" ); + + test_rename_request!( + rename_class_property, + r#" +class Cat { + pub name: str; + //---^ + new(name: str) { + this.name = name; + //---- + } + + inflight pub jump(height: num) {} + pub sleep(d: duration) { + log("{this.name} sleeps"); + //---- + } +} + +let a = new Cat("A") as "a cat"; +let b = new Cat("B") as "b cat"; + +a.sleep(18h); +b.sleep(24h); +log(b.name); + //---- + +test "a cat scares b cat" { + a.jump(5); + b.jump(-5); +} + "#, + "t1" + ); + test_rename_request!( + rename_class_property_from_usage, + r#" +class Cat { + pub name: str; + //---- + new(name: str) { + this.name = name; + //---- + } + + inflight pub jump(height: num) {} + pub sleep(d: duration) { + log("{this.name} sleeps"); + //---- + } +} + +let a = new Cat("A") as "a cat"; +let b = new Cat("B") as "b cat"; + +a.sleep(18h); +b.sleep(24h); +log(b.name); + //---^ + +test "a cat scares b cat" { + a.jump(5); + b.jump(-5); +} + "#, + "t1" + ); + + test_rename_request!( + rename_class_inflight_method, + r#" +class Cat { + pub name: str; + new(name: str) { + this.name = name; + } + + inflight pub jump(height: num) {} + //---^ + pub sleep(d: duration) { + log("{this.name} sleeps"); + } +} + +let a = new Cat("A") as "a cat"; +let b = new Cat("B") as "b cat"; + +a.sleep(18h); +b.sleep(24h); +log(b.name); + +test "a cat scares b cat" { + a.jump(5); + //---- + b.jump(-5); + //---- +} + "#, + "t1" + ); + + test_rename_request!( + rename_class_inflight_method_from_usage, + r#" +class Cat { + pub name: str; + new(name: str) { + this.name = name; + } + + inflight pub jump(height: num) {} + //---- + pub sleep(d: duration) { + log("{this.name} sleeps"); + } +} + +let a = new Cat("A") as "a cat"; +let b = new Cat("B") as "b cat"; + +a.sleep(18h); +b.sleep(24h); +log(b.name); + +test "a cat scares b cat" { + a.jump(5); + //---- + b.jump(-5); + //---^ +} + "#, + "t1" + ); + test_rename_request!( + rename_class_preflight_method, + r#" +class Cat { + pub name: str; + new(name: str) { + this.name = name; + } + + inflight pub jump(height: num) {} + pub sleep(d: duration) { + //----^ + log("{this.name} sleeps"); + } +} + +let a = new Cat("A") as "a cat"; +let b = new Cat("B") as "b cat"; + +a.sleep(18h); +//----- +b.sleep(24h); +//----- +log(b.name); + +test "a cat scares b cat" { + a.jump(5); + b.jump(-5); +} + "#, + "t1" + ); + + test_rename_request!( + rename_class_preflight_method_from_usage, + r#" +class Cat { + pub name: str; + new(name: str) { + this.name = name; + } + + inflight pub jump(height: num) {} + pub sleep(d: duration) { + //----- + log("{this.name} sleeps"); + } +} + +let a = new Cat("A") as "a cat"; +let b = new Cat("B") as "b cat"; + +a.sleep(18h); +//----^ +b.sleep(24h); +//----- +log(b.name); + +test "a cat scares b cat" { + a.jump(5); + b.jump(-5); +} + "#, + "t1" + ); + + test_rename_request!( + new_scope_args, + r#" + class Cat { + pub name: str; + new(name: str) { + //---^ + this.name = name; + //---- + } + } + "#, + "t1" + ); } diff --git a/libs/wingc/src/lsp/rename_visitor.rs b/libs/wingc/src/lsp/rename_visitor.rs index 5d5160a1a1f..5d7f90e925b 100644 --- a/libs/wingc/src/lsp/rename_visitor.rs +++ b/libs/wingc/src/lsp/rename_visitor.rs @@ -1,8 +1,8 @@ use lsp_types::{Position, PrepareRenameResponse, Range, TextEdit}; use crate::diagnostic::WingLocation; -use crate::type_check::symbol_env::LookupResult; -use crate::type_check::{SymbolKind, Types}; +use crate::type_check::symbol_env::{LookupResult, SymbolEnv}; +use crate::type_check::{SymbolKind, Types, UnsafeRef, CLASS_INFLIGHT_INIT_NAME, CLASS_INIT_NAME}; use crate::visit::{visit_scope, Visit}; use crate::visit_context::{VisitContext, VisitorWithContext}; use crate::{ast::*, visit_context}; @@ -29,17 +29,17 @@ impl<'a> RenameVisitor<'a> { self .linked_symbols .iter() - .any(|s: &LinkedSymbol<'a>| symbol.same(&s.symbol)) + .any(|s: &LinkedSymbol<'a>| symbol.same(&s.symbol) || s.references.iter().any(|r| symbol.same(r))) } - fn add_reference_symbol(&mut self, symbol: &'a Symbol) { + fn add_reference_symbol(&mut self, symbol: &'a Symbol, symbol_env: Option<&UnsafeRef>) { // symbols that appear in let/if lef statements will point to a prev declaration of a variable of the same name if exists // this is why we add them in advance during visit_statement // the other condition is for "this" that points to the "new" keyword for some reason - if self.is_symbol_linked(symbol) { + if self.is_symbol_linked(symbol) || symbol.name == "this" { return; } - if let Some(env) = self.ctx.current_env() { + if let Some(env) = symbol_env.or(self.ctx.current_env()) { match env.lookup_ext(symbol, None) { LookupResult::Found(symbol_kind, lookup_info) | LookupResult::NotPublic(symbol_kind, lookup_info) => { // TODO: remove to support rename-refactor of namespaces - after adjusting the edit @@ -154,10 +154,43 @@ impl<'a> Visit<'a> for RenameVisitor<'a> { } fn visit_symbol(&mut self, node: &'a Symbol) { - self.add_reference_symbol(node); + self.add_reference_symbol(node, None); crate::visit::visit_symbol(self, node); } + fn visit_expr(&mut self, node: &'a Expr) { + if let ExprKind::JsonMapLiteral { fields, .. } = &node.kind { + let type_ = self.types.maybe_unwrap_inference(self.types.get_expr_type(node)); + let type_ = *if let Some(type_) = self.types.get_type_from_json_cast(node.id) { + *type_ + } else { + type_ + } + .maybe_unwrap_option(); + + if let Some(c) = type_.as_struct() { + for (field, ..) in fields { + self.add_reference_symbol(field, Some(&UnsafeRef::from(&c.env))); + } + } + } + crate::visit::visit_expr(self, node); + } + + fn visit_reference(&mut self, node: &'a Reference) { + match node { + Reference::InstanceMember { property, object, .. } => { + let object_type = self.types.get_expr_id_type_ref(object.id); + if let Some(inner_env) = object_type.as_env() { + self.add_reference_symbol(property, Some(&UnsafeRef::from(inner_env))); + } + } + _ => {} + } + + crate::visit::visit_reference(self, node); + } + fn visit_stmt(&mut self, stmt: &'a Stmt) { match &stmt.kind { StmtKind::IfLet(IfLet { var_name, .. }) => self.linked_symbols.push(LinkedSymbol { @@ -168,6 +201,40 @@ impl<'a> Visit<'a> for RenameVisitor<'a> { symbol: var_name.clone(), references: vec![], }), + //TODO: to be handled in a following PR, renaming interface fields is not supported yet + // StmtKind::Interface(c) => { + // for field in &c.methods { + // self.linked_symbols.push(LinkedSymbol { + // symbol: field.0.clone(), + // references: vec![], + // }) + // } + // } + StmtKind::Struct(s) => { + for field in &s.fields { + self.linked_symbols.push(LinkedSymbol { + symbol: field.name.clone(), + references: vec![], + }) + } + } + StmtKind::Class(c) => { + for (m, ..) in &c.methods { + if m.name == CLASS_INIT_NAME || m.name == CLASS_INFLIGHT_INIT_NAME { + continue; + } + self.linked_symbols.push(LinkedSymbol { + symbol: m.clone(), + references: vec![], + }) + } + for f in &c.fields { + self.linked_symbols.push(LinkedSymbol { + symbol: f.name.clone(), + references: vec![], + }) + } + } _ => {} } crate::visit::visit_stmt(self, stmt); diff --git a/libs/wingc/src/lsp/snapshots/rename_request/rename_class.snap b/libs/wingc/src/lsp/snapshots/rename_request/rename_class.snap deleted file mode 100644 index a6b68dc52cd..00000000000 --- a/libs/wingc/src/lsp/snapshots/rename_request/rename_class.snap +++ /dev/null @@ -1,30 +0,0 @@ ---- -source: libs/wingc/src/lsp/rename_request.rs ---- -changes: - "file:///main.w": - - range: - start: - line: 1 - character: 6 - end: - line: 1 - character: 10 - newText: t1 - - range: - start: - line: 6 - character: 20 - end: - line: 6 - character: 24 - newText: t1 - - range: - start: - line: 11 - character: 12 - end: - line: 11 - character: 16 - newText: t1 - diff --git a/libs/wingc/src/lsp/snapshots/rename_request/rename_closure.snap b/libs/wingc/src/lsp/snapshots/rename_request/rename_closure.snap deleted file mode 100644 index 698d1d03f75..00000000000 --- a/libs/wingc/src/lsp/snapshots/rename_request/rename_closure.snap +++ /dev/null @@ -1,46 +0,0 @@ ---- -source: libs/wingc/src/lsp/rename_request.rs ---- -changes: - "file:///main.w": - - range: - start: - line: 1 - character: 4 - end: - line: 1 - character: 7 - newText: t1 - - range: - start: - line: 7 - character: 9 - end: - line: 7 - character: 12 - newText: t1 - - range: - start: - line: 9 - character: 9 - end: - line: 9 - character: 12 - newText: t1 - - range: - start: - line: 9 - character: 20 - end: - line: 9 - character: 23 - newText: t1 - - range: - start: - line: 9 - character: 25 - end: - line: 9 - character: 28 - newText: t1 - diff --git a/libs/wingc/src/lsp/snapshots/rename_request/rename_for_iterator.snap b/libs/wingc/src/lsp/snapshots/rename_request/rename_for_iterator.snap deleted file mode 100644 index fbc11ca75ad..00000000000 --- a/libs/wingc/src/lsp/snapshots/rename_request/rename_for_iterator.snap +++ /dev/null @@ -1,30 +0,0 @@ ---- -source: libs/wingc/src/lsp/rename_request.rs ---- -changes: - "file:///main.w": - - range: - start: - line: 4 - character: 8 - end: - line: 4 - character: 14 - newText: t1 - - range: - start: - line: 6 - character: 6 - end: - line: 6 - character: 12 - newText: t1 - - range: - start: - line: 8 - character: 10 - end: - line: 8 - character: 16 - newText: t1 - diff --git a/libs/wingc/src/lsp/snapshots/rename_request/rename_for_iterator_reference.snap b/libs/wingc/src/lsp/snapshots/rename_request/rename_for_iterator_reference.snap deleted file mode 100644 index fbc11ca75ad..00000000000 --- a/libs/wingc/src/lsp/snapshots/rename_request/rename_for_iterator_reference.snap +++ /dev/null @@ -1,30 +0,0 @@ ---- -source: libs/wingc/src/lsp/rename_request.rs ---- -changes: - "file:///main.w": - - range: - start: - line: 4 - character: 8 - end: - line: 4 - character: 14 - newText: t1 - - range: - start: - line: 6 - character: 6 - end: - line: 6 - character: 12 - newText: t1 - - range: - start: - line: 8 - character: 10 - end: - line: 8 - character: 16 - newText: t1 - diff --git a/libs/wingc/src/lsp/snapshots/rename_request/rename_for_loop.snap b/libs/wingc/src/lsp/snapshots/rename_request/rename_for_loop.snap deleted file mode 100644 index 871719f666d..00000000000 --- a/libs/wingc/src/lsp/snapshots/rename_request/rename_for_loop.snap +++ /dev/null @@ -1,22 +0,0 @@ ---- -source: libs/wingc/src/lsp/rename_request.rs ---- -changes: - "file:///main.w": - - range: - start: - line: 3 - character: 8 - end: - line: 3 - character: 15 - newText: t1 - - range: - start: - line: 5 - character: 18 - end: - line: 5 - character: 25 - newText: t1 - diff --git a/libs/wingc/src/lsp/snapshots/rename_request/rename_for_loop_iterator.snap b/libs/wingc/src/lsp/snapshots/rename_request/rename_for_loop_iterator.snap deleted file mode 100644 index 850e4126583..00000000000 --- a/libs/wingc/src/lsp/snapshots/rename_request/rename_for_loop_iterator.snap +++ /dev/null @@ -1,6 +0,0 @@ ---- -source: libs/wingc/src/lsp/rename_request.rs ---- -changes: - "file:///main.w": [] - diff --git a/libs/wingc/src/lsp/snapshots/rename_request/rename_if_statement.snap b/libs/wingc/src/lsp/snapshots/rename_request/rename_if_statement.snap deleted file mode 100644 index 850e4126583..00000000000 --- a/libs/wingc/src/lsp/snapshots/rename_request/rename_if_statement.snap +++ /dev/null @@ -1,6 +0,0 @@ ---- -source: libs/wingc/src/lsp/rename_request.rs ---- -changes: - "file:///main.w": [] - diff --git a/libs/wingc/src/lsp/snapshots/rename_request/rename_inner_scope.snap b/libs/wingc/src/lsp/snapshots/rename_request/rename_inner_scope.snap deleted file mode 100644 index 5a1db40daf3..00000000000 --- a/libs/wingc/src/lsp/snapshots/rename_request/rename_inner_scope.snap +++ /dev/null @@ -1,46 +0,0 @@ ---- -source: libs/wingc/src/lsp/rename_request.rs ---- -changes: - "file:///main.w": - - range: - start: - line: 1 - character: 8 - end: - line: 1 - character: 13 - newText: t1 - - range: - start: - line: 3 - character: 4 - end: - line: 3 - character: 9 - newText: t1 - - range: - start: - line: 5 - character: 2 - end: - line: 5 - character: 7 - newText: t1 - - range: - start: - line: 8 - character: 6 - end: - line: 8 - character: 11 - newText: t1 - - range: - start: - line: 13 - character: 6 - end: - line: 13 - character: 11 - newText: t1 - diff --git a/libs/wingc/src/lsp/snapshots/rename_request/rename_inner_scope_shadowing.snap b/libs/wingc/src/lsp/snapshots/rename_request/rename_inner_scope_shadowing.snap deleted file mode 100644 index 2dd4dd1a433..00000000000 --- a/libs/wingc/src/lsp/snapshots/rename_request/rename_inner_scope_shadowing.snap +++ /dev/null @@ -1,22 +0,0 @@ ---- -source: libs/wingc/src/lsp/rename_request.rs ---- -changes: - "file:///main.w": - - range: - start: - line: 7 - character: 10 - end: - line: 7 - character: 15 - newText: t1 - - range: - start: - line: 9 - character: 10 - end: - line: 9 - character: 15 - newText: t1 - diff --git a/libs/wingc/src/lsp/snapshots/rename_request/rename_interface_key.snap b/libs/wingc/src/lsp/snapshots/rename_request/rename_interface_key.snap deleted file mode 100644 index 850e4126583..00000000000 --- a/libs/wingc/src/lsp/snapshots/rename_request/rename_interface_key.snap +++ /dev/null @@ -1,6 +0,0 @@ ---- -source: libs/wingc/src/lsp/rename_request.rs ---- -changes: - "file:///main.w": [] - diff --git a/libs/wingc/src/lsp/snapshots/rename_request/rename_interface_name.snap b/libs/wingc/src/lsp/snapshots/rename_request/rename_interface_name.snap deleted file mode 100644 index 45caafaa652..00000000000 --- a/libs/wingc/src/lsp/snapshots/rename_request/rename_interface_name.snap +++ /dev/null @@ -1,22 +0,0 @@ ---- -source: libs/wingc/src/lsp/rename_request.rs ---- -changes: - "file:///main.w": - - range: - start: - line: 1 - character: 14 - end: - line: 1 - character: 18 - newText: t1 - - range: - start: - line: 6 - character: 19 - end: - line: 6 - character: 23 - newText: t1 - diff --git a/libs/wingc/src/lsp/snapshots/rename_request/rename_namespace.snap b/libs/wingc/src/lsp/snapshots/rename_request/rename_namespace.snap deleted file mode 100644 index 850e4126583..00000000000 --- a/libs/wingc/src/lsp/snapshots/rename_request/rename_namespace.snap +++ /dev/null @@ -1,6 +0,0 @@ ---- -source: libs/wingc/src/lsp/rename_request.rs ---- -changes: - "file:///main.w": [] - diff --git a/libs/wingc/src/lsp/snapshots/rename_request/rename_namespace_from_property.snap b/libs/wingc/src/lsp/snapshots/rename_request/rename_namespace_from_property.snap deleted file mode 100644 index 850e4126583..00000000000 --- a/libs/wingc/src/lsp/snapshots/rename_request/rename_namespace_from_property.snap +++ /dev/null @@ -1,6 +0,0 @@ ---- -source: libs/wingc/src/lsp/rename_request.rs ---- -changes: - "file:///main.w": [] - diff --git a/libs/wingc/src/lsp/snapshots/rename_request/rename_outer_scope.snap b/libs/wingc/src/lsp/snapshots/rename_request/rename_outer_scope.snap deleted file mode 100644 index c40e54e389b..00000000000 --- a/libs/wingc/src/lsp/snapshots/rename_request/rename_outer_scope.snap +++ /dev/null @@ -1,46 +0,0 @@ ---- -source: libs/wingc/src/lsp/rename_request.rs ---- -changes: - "file:///main.w": - - range: - start: - line: 1 - character: 12 - end: - line: 1 - character: 17 - newText: t1 - - range: - start: - line: 3 - character: 8 - end: - line: 3 - character: 13 - newText: t1 - - range: - start: - line: 5 - character: 4 - end: - line: 5 - character: 9 - newText: t1 - - range: - start: - line: 8 - character: 8 - end: - line: 8 - character: 13 - newText: t1 - - range: - start: - line: 13 - character: 8 - end: - line: 13 - character: 13 - newText: t1 - diff --git a/libs/wingc/src/lsp/snapshots/rename_request/rename_str.snap b/libs/wingc/src/lsp/snapshots/rename_request/rename_str.snap deleted file mode 100644 index 850e4126583..00000000000 --- a/libs/wingc/src/lsp/snapshots/rename_request/rename_str.snap +++ /dev/null @@ -1,6 +0,0 @@ ---- -source: libs/wingc/src/lsp/rename_request.rs ---- -changes: - "file:///main.w": [] - diff --git a/libs/wingc/src/lsp/snapshots/rename_request/rename_struct_key.snap b/libs/wingc/src/lsp/snapshots/rename_request/rename_struct_key.snap deleted file mode 100644 index 850e4126583..00000000000 --- a/libs/wingc/src/lsp/snapshots/rename_request/rename_struct_key.snap +++ /dev/null @@ -1,6 +0,0 @@ ---- -source: libs/wingc/src/lsp/rename_request.rs ---- -changes: - "file:///main.w": [] - diff --git a/libs/wingc/src/lsp/snapshots/rename_request/rename_struct_name.snap b/libs/wingc/src/lsp/snapshots/rename_request/rename_struct_name.snap deleted file mode 100644 index 59e296fa52f..00000000000 --- a/libs/wingc/src/lsp/snapshots/rename_request/rename_struct_name.snap +++ /dev/null @@ -1,22 +0,0 @@ ---- -source: libs/wingc/src/lsp/rename_request.rs ---- -changes: - "file:///main.w": - - range: - start: - line: 1 - character: 11 - end: - line: 1 - character: 15 - newText: t1 - - range: - start: - line: 6 - character: 11 - end: - line: 6 - character: 15 - newText: t1 - diff --git a/libs/wingc/src/lsp/snapshots/rename_request/rename_symbol.snap b/libs/wingc/src/lsp/snapshots/rename_request/rename_symbol.snap deleted file mode 100644 index 850e4126583..00000000000 --- a/libs/wingc/src/lsp/snapshots/rename_request/rename_symbol.snap +++ /dev/null @@ -1,6 +0,0 @@ ---- -source: libs/wingc/src/lsp/rename_request.rs ---- -changes: - "file:///main.w": [] - diff --git a/libs/wingc/src/lsp/snapshots/rename_request/variable_same_scope.snap b/libs/wingc/src/lsp/snapshots/rename_request/variable_same_scope.snap deleted file mode 100644 index 93a40ce7791..00000000000 --- a/libs/wingc/src/lsp/snapshots/rename_request/variable_same_scope.snap +++ /dev/null @@ -1,22 +0,0 @@ ---- -source: libs/wingc/src/lsp/rename_request.rs ---- -changes: - "file:///main.w": - - range: - start: - line: 1 - character: 4 - end: - line: 1 - character: 9 - newText: t1 - - range: - start: - line: 3 - character: 13 - end: - line: 3 - character: 18 - newText: t1 - diff --git a/libs/wingc/src/lsp/snapshots/rename_request/variable_same_scope_declaration.snap b/libs/wingc/src/lsp/snapshots/rename_request/variable_same_scope_declaration.snap deleted file mode 100644 index 93a40ce7791..00000000000 --- a/libs/wingc/src/lsp/snapshots/rename_request/variable_same_scope_declaration.snap +++ /dev/null @@ -1,22 +0,0 @@ ---- -source: libs/wingc/src/lsp/rename_request.rs ---- -changes: - "file:///main.w": - - range: - start: - line: 1 - character: 4 - end: - line: 1 - character: 9 - newText: t1 - - range: - start: - line: 3 - character: 13 - end: - line: 3 - character: 18 - newText: t1 -