about summary refs log tree commit diff
diff options
context:
space:
mode:
authorRyan Mehri <ryan.mehri1@gmail.com>2023-10-05 12:45:26 -0700
committerLukas Wirth <lukastw97@gmail.com>2023-12-08 12:29:34 +0100
commitf4349ff26ef0736ed6e37a7e491f01ee4c6a76a7 (patch)
tree47663881b759dd067a78a4fdffe201b437a0e3d2
parent934358e95cd2c8190396ba4d7119e5c3dc3b2ead (diff)
downloadrust-f4349ff26ef0736ed6e37a7e491f01ee4c6a76a7.tar.gz
rust-f4349ff26ef0736ed6e37a7e491f01ee4c6a76a7.zip
fix: preserve where clause in delegate method
-rw-r--r--crates/ide-assists/src/handlers/generate_delegate_methods.rs49
1 files changed, 48 insertions, 1 deletions
diff --git a/crates/ide-assists/src/handlers/generate_delegate_methods.rs b/crates/ide-assists/src/handlers/generate_delegate_methods.rs
index 92fbdf53f6b..7a5d3d0859c 100644
--- a/crates/ide-assists/src/handlers/generate_delegate_methods.rs
+++ b/crates/ide-assists/src/handlers/generate_delegate_methods.rs
@@ -134,7 +134,7 @@ pub(crate) fn generate_delegate_methods(acc: &mut Assists, ctx: &AssistContext<'
                     vis,
                     fn_name,
                     type_params,
-                    None,
+                    method_source.where_clause(),
                     params,
                     body,
                     ret_type,
@@ -465,6 +465,53 @@ impl Person {
     }
 
     #[test]
+    fn test_preserve_where_clause() {
+        check_assist(
+            generate_delegate_methods,
+            r#"
+struct Inner<T>(T);
+impl<T> Inner<T> {
+    fn get(&self) -> T
+    where
+        T: Copy,
+        T: PartialEq,
+    {
+        self.0
+    }
+}
+
+struct Struct<T> {
+    $0field: Inner<T>,
+}
+"#,
+            r#"
+struct Inner<T>(T);
+impl<T> Inner<T> {
+    fn get(&self) -> T
+    where
+        T: Copy,
+        T: PartialEq,
+    {
+        self.0
+    }
+}
+
+struct Struct<T> {
+    field: Inner<T>,
+}
+
+impl<T> Struct<T> {
+    $0fn get(&self) -> T where
+            T: Copy,
+            T: PartialEq, {
+        self.field.get()
+    }
+}
+"#,
+        );
+    }
+
+    #[test]
     fn test_fixes_basic_self_references() {
         check_assist(
             generate_delegate_methods,