Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-assists/src/handlers/generate_deref.rs')
-rw-r--r--crates/ide-assists/src/handlers/generate_deref.rs26
1 files changed, 24 insertions, 2 deletions
diff --git a/crates/ide-assists/src/handlers/generate_deref.rs b/crates/ide-assists/src/handlers/generate_deref.rs
index c7b97dcd23..55a09c5d77 100644
--- a/crates/ide-assists/src/handlers/generate_deref.rs
+++ b/crates/ide-assists/src/handlers/generate_deref.rs
@@ -10,7 +10,7 @@ use syntax::{
use crate::{
AssistId,
assist_context::{AssistContext, Assists, SourceChangeBuilder},
- utils::generate_trait_impl_text,
+ utils::generate_trait_impl_text_intransitive,
};
// Assist: generate_deref
@@ -150,7 +150,7 @@ fn generate_edit(
),
};
let strukt_adt = ast::Adt::Struct(strukt);
- let deref_impl = generate_trait_impl_text(
+ let deref_impl = generate_trait_impl_text_intransitive(
&strukt_adt,
&trait_path.display(db, edition).to_string(),
&impl_code,
@@ -228,6 +228,28 @@ impl core::ops::Deref for B {
}
#[test]
+ fn test_generate_record_deref_with_generic() {
+ check_assist(
+ generate_deref,
+ r#"
+//- minicore: deref
+struct A<T>($0T);
+"#,
+ r#"
+struct A<T>(T);
+
+impl<T> core::ops::Deref for A<T> {
+ type Target = T;
+
+ fn deref(&self) -> &Self::Target {
+ &self.0
+ }
+}
+"#,
+ );
+ }
+
+ #[test]
fn test_generate_record_deref_short_path() {
check_assist(
generate_deref,