Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-assists/src/handlers/extract_function.rs')
-rw-r--r--crates/ide-assists/src/handlers/extract_function.rs62
1 files changed, 62 insertions, 0 deletions
diff --git a/crates/ide-assists/src/handlers/extract_function.rs b/crates/ide-assists/src/handlers/extract_function.rs
index 19ded49b18..231df9b5b3 100644
--- a/crates/ide-assists/src/handlers/extract_function.rs
+++ b/crates/ide-assists/src/handlers/extract_function.rs
@@ -6313,4 +6313,66 @@ fn $0fun_name(v1: u32, v2: u32) -> u32 {
}"#,
);
}
+
+ #[test]
+ fn pattern_assignment() {
+ check_assist(
+ extract_function,
+ r#"
+struct Point {x: u32, y: u32};
+
+fn point() -> Point {
+ Point { x: 45, y: 50 };
+}
+
+fn foo() {
+ let mut a = 1;
+ let mut b = 3;
+ $0Point { x: a, y: b } = point();$0
+}
+"#,
+ r#"
+struct Point {x: u32, y: u32};
+
+fn point() -> Point {
+ Point { x: 45, y: 50 };
+}
+
+fn foo() {
+ let mut a = 1;
+ let mut b = 3;
+ fun_name(a, b);
+}
+
+fn $0fun_name(mut a: u32, mut b: u32) {
+ Point { x: a, y: b } = point();
+}
+"#,
+ );
+ }
+
+ #[test]
+ fn tuple_assignment() {
+ check_assist(
+ extract_function,
+ r#"
+fn foo() {
+ let mut a = 3;
+ let mut b = 4;
+ $0(a, b) = (b, a);$0
+}
+"#,
+ r#"
+fn foo() {
+ let mut a = 3;
+ let mut b = 4;
+ fun_name(a, b);
+}
+
+fn $0fun_name(mut a: i32, mut b: i32) {
+ (a, b) = (b, a);
+}
+"#,
+ );
+ }
}