Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-assists/src/handlers/add_missing_impl_members.rs')
-rw-r--r--crates/ide-assists/src/handlers/add_missing_impl_members.rs53
1 files changed, 53 insertions, 0 deletions
diff --git a/crates/ide-assists/src/handlers/add_missing_impl_members.rs b/crates/ide-assists/src/handlers/add_missing_impl_members.rs
index 6340feda45..ae5118e950 100644
--- a/crates/ide-assists/src/handlers/add_missing_impl_members.rs
+++ b/crates/ide-assists/src/handlers/add_missing_impl_members.rs
@@ -366,6 +366,59 @@ impl<U> Foo<U> for S {
}
#[test]
+ fn test_lifetime_substitution() {
+ check_assist(
+ add_missing_impl_members,
+ r#"
+pub trait Trait<'a, 'b, A, B, C> {
+ fn foo(&self, one: &'a A, anoter: &'b B) -> &'a C;
+}
+
+impl<'x, 'y, T, V, U> Trait<'x, 'y, T, V, U> for () {$0}"#,
+ r#"
+pub trait Trait<'a, 'b, A, B, C> {
+ fn foo(&self, one: &'a A, anoter: &'b B) -> &'a C;
+}
+
+impl<'x, 'y, T, V, U> Trait<'x, 'y, T, V, U> for () {
+ fn foo(&self, one: &'x T, anoter: &'y V) -> &'x U {
+ ${0:todo!()}
+ }
+}"#,
+ );
+ }
+
+ #[test]
+ fn test_lifetime_substitution_with_body() {
+ check_assist(
+ add_missing_default_members,
+ r#"
+pub trait Trait<'a, 'b, A, B, C: Default> {
+ fn foo(&self, _one: &'a A, _anoter: &'b B) -> (C, &'a i32) {
+ let value: &'a i32 = &0;
+ (C::default(), value)
+ }
+}
+
+impl<'x, 'y, T, V, U: Default> Trait<'x, 'y, T, V, U> for () {$0}"#,
+ r#"
+pub trait Trait<'a, 'b, A, B, C: Default> {
+ fn foo(&self, _one: &'a A, _anoter: &'b B) -> (C, &'a i32) {
+ let value: &'a i32 = &0;
+ (C::default(), value)
+ }
+}
+
+impl<'x, 'y, T, V, U: Default> Trait<'x, 'y, T, V, U> for () {
+ $0fn foo(&self, _one: &'x T, _anoter: &'y V) -> (U, &'x i32) {
+ let value: &'x i32 = &0;
+ (<U>::default(), value)
+ }
+}"#,
+ );
+ }
+
+ #[test]
fn test_cursor_after_empty_impl_def() {
check_assist(
add_missing_impl_members,