]> git.lizzy.rs Git - rust.git/commitdiff
fix: tuple to named struct inside macros
authorNyikos Zoltán <nyikoszoltan0@gmail.com>
Sat, 19 Nov 2022 19:08:01 +0000 (20:08 +0100)
committerNyikos Zoltán <nyikoszoltan0@gmail.com>
Sat, 19 Nov 2022 19:08:01 +0000 (20:08 +0100)
seems to fix #13634

crates/ide-assists/src/handlers/convert_tuple_struct_to_named_struct.rs

index 92e091fca126c9ac3bbfe8da5a8de017f326fec8..b0383291e7370a1ffa47da9894564a4371c8df88 100644 (file)
@@ -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 @@ fn not_applicable_other_than_tuple_struct() {
         );
         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() {
@@ -554,6 +572,29 @@ fn not_applicable_other_than_tuple_variant() {
         );
     }
 
+    #[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(