Skip to content

Commit fc726ce

Browse files
authored
Merge pull request #18912 from vishruth-thimmaiah/fix_named_struct_assist
fix: upmap ranges in convert_tuple_struct_to_named_struct assist
2 parents 0e0dbd1 + bbd09b5 commit fc726ce

File tree

1 file changed

+101
-1
lines changed

1 file changed

+101
-1
lines changed

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

+101-1
Original file line numberDiff line numberDiff line change
@@ -140,8 +140,10 @@ fn edit_struct_references(
140140
match_ast! {
141141
match node {
142142
ast::TupleStructPat(tuple_struct_pat) => {
143+
let file_range = ctx.sema.original_range_opt(&node)?;
144+
edit.edit_file(file_range.file_id);
143145
edit.replace(
144-
tuple_struct_pat.syntax().text_range(),
146+
file_range.range,
145147
ast::make::record_pat_with_fields(
146148
tuple_struct_pat.path()?,
147149
ast::make::record_pat_field_list(tuple_struct_pat.fields().zip(names).map(
@@ -921,6 +923,104 @@ pub struct $0Foo(#[my_custom_attr] u32);
921923
"#,
922924
r#"
923925
pub struct Foo { #[my_custom_attr] field1: u32 }
926+
"#,
927+
);
928+
}
929+
930+
#[test]
931+
fn convert_in_macro_pattern_args() {
932+
check_assist(
933+
convert_tuple_struct_to_named_struct,
934+
r#"
935+
macro_rules! foo {
936+
($expression:expr, $pattern:pat) => {
937+
match $expression {
938+
$pattern => true,
939+
_ => false
940+
}
941+
};
942+
}
943+
enum Expr {
944+
A$0(usize),
945+
}
946+
fn main() {
947+
let e = Expr::A(0);
948+
foo!(e, Expr::A(0));
949+
}
950+
"#,
951+
r#"
952+
macro_rules! foo {
953+
($expression:expr, $pattern:pat) => {
954+
match $expression {
955+
$pattern => true,
956+
_ => false
957+
}
958+
};
959+
}
960+
enum Expr {
961+
A { field1: usize },
962+
}
963+
fn main() {
964+
let e = Expr::A { field1: 0 };
965+
foo!(e, Expr::A { field1: 0 });
966+
}
967+
"#,
968+
);
969+
}
970+
971+
#[test]
972+
fn convert_in_multi_file_macro_pattern_args() {
973+
check_assist(
974+
convert_tuple_struct_to_named_struct,
975+
r#"
976+
//- /main.rs
977+
mod foo;
978+
979+
enum Test {
980+
A$0(i32)
981+
}
982+
983+
//- /foo.rs
984+
use crate::Test;
985+
986+
macro_rules! foo {
987+
($expression:expr, $pattern:pat) => {
988+
match $expression {
989+
$pattern => true,
990+
_ => false
991+
}
992+
};
993+
}
994+
995+
fn foo() {
996+
let a = Test::A(0);
997+
foo!(a, Test::A(0));
998+
}
999+
"#,
1000+
r#"
1001+
//- /main.rs
1002+
mod foo;
1003+
1004+
enum Test {
1005+
A { field1: i32 }
1006+
}
1007+
1008+
//- /foo.rs
1009+
use crate::Test;
1010+
1011+
macro_rules! foo {
1012+
($expression:expr, $pattern:pat) => {
1013+
match $expression {
1014+
$pattern => true,
1015+
_ => false
1016+
}
1017+
};
1018+
}
1019+
1020+
fn foo() {
1021+
let a = Test::A { field1: 0 };
1022+
foo!(a, Test::A { field1: 0 });
1023+
}
9241024
"#,
9251025
);
9261026
}

0 commit comments

Comments
 (0)