fix: tuple to named struct inside macros
seems to fix
@@ -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() {
@@ -554,6 +572,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(
