summaryrefslogtreecommitdiffstats
path: root/src/tools/rust-analyzer/crates/ide-assists/src/handlers/convert_tuple_struct_to_named_struct.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/rust-analyzer/crates/ide-assists/src/handlers/convert_tuple_struct_to_named_struct.rs')
-rw-r--r--src/tools/rust-analyzer/crates/ide-assists/src/handlers/convert_tuple_struct_to_named_struct.rs43
1 files changed, 42 insertions, 1 deletions
diff --git a/src/tools/rust-analyzer/crates/ide-assists/src/handlers/convert_tuple_struct_to_named_struct.rs b/src/tools/rust-analyzer/crates/ide-assists/src/handlers/convert_tuple_struct_to_named_struct.rs
index 92e091fca..b0383291e 100644
--- a/src/tools/rust-analyzer/crates/ide-assists/src/handlers/convert_tuple_struct_to_named_struct.rs
+++ b/src/tools/rust-analyzer/crates/ide-assists/src/handlers/convert_tuple_struct_to_named_struct.rs
@@ -168,7 +168,7 @@ fn edit_struct_references(
let arg_list = call_expr.syntax().descendants().find_map(ast::ArgList::cast)?;
edit.replace(
- call_expr.syntax().text_range(),
+ ctx.sema.original_range(&node).range,
ast::make::record_expr(
path,
ast::make::record_expr_field_list(arg_list.args().zip(names).map(
@@ -249,6 +249,24 @@ mod tests {
);
check_assist_not_applicable(convert_tuple_struct_to_named_struct, r#"struct Foo$0;"#);
}
+ #[test]
+ fn convert_in_macro_args() {
+ check_assist(
+ convert_tuple_struct_to_named_struct,
+ r#"
+macro_rules! foo {($i:expr) => {$i} }
+struct T$0(u8);
+fn test() {
+ foo!(T(1));
+}"#,
+ r#"
+macro_rules! foo {($i:expr) => {$i} }
+struct T { field1: u8 }
+fn test() {
+ foo!(T { field1: 1 });
+}"#,
+ );
+ }
#[test]
fn convert_simple_struct() {
@@ -555,6 +573,29 @@ where
}
#[test]
+ fn convert_variant_in_macro_args() {
+ check_assist(
+ convert_tuple_struct_to_named_struct,
+ r#"
+macro_rules! foo {($i:expr) => {$i} }
+enum T {
+ V$0(u8)
+}
+fn test() {
+ foo!(T::V(1));
+}"#,
+ r#"
+macro_rules! foo {($i:expr) => {$i} }
+enum T {
+ V { field1: u8 }
+}
+fn test() {
+ foo!(T::V { field1: 1 });
+}"#,
+ );
+ }
+
+ #[test]
fn convert_simple_variant() {
check_assist(
convert_tuple_struct_to_named_struct,