Unnamed repository; edit this file 'description' to name the repository.
fix: preserve where clause in delegate method
Ryan Mehri 2023-12-08
parent 934358e · commit f4349ff
-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 92fbdf53f6..7a5d3d0859 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,