diff options
| author | Laurențiu Nicola <lnicola@users.noreply.github.com> | 2025-07-20 10:54:35 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-07-20 10:54:35 +0000 |
| commit | fa0320d077489e4d40d3225b097dcf37cc0d5ad8 (patch) | |
| tree | 9068b1fd2ef273e12d5ae9659272fc7bf90e403f | |
| parent | 2eaba02b39f86d2fcf82624cbe57de03a89e2705 (diff) | |
| parent | 196833ccf2742f0975cd084aac4f354c025638d4 (diff) | |
| download | rust-fa0320d077489e4d40d3225b097dcf37cc0d5ad8.tar.gz rust-fa0320d077489e4d40d3225b097dcf37cc0d5ad8.zip | |
Merge pull request #20255 from A4-Tacks/deref-intranstive
Fix ide-assist: generate Deref transitive
| -rw-r--r-- | src/tools/rust-analyzer/crates/ide-assists/src/handlers/generate_deref.rs | 26 | ||||
| -rw-r--r-- | src/tools/rust-analyzer/crates/ide-assists/src/utils.rs | 1 |
2 files changed, 25 insertions, 2 deletions
diff --git a/src/tools/rust-analyzer/crates/ide-assists/src/handlers/generate_deref.rs b/src/tools/rust-analyzer/crates/ide-assists/src/handlers/generate_deref.rs index c7b97dcd231..55a09c5d775 100644 --- a/src/tools/rust-analyzer/crates/ide-assists/src/handlers/generate_deref.rs +++ b/src/tools/rust-analyzer/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, diff --git a/src/tools/rust-analyzer/crates/ide-assists/src/utils.rs b/src/tools/rust-analyzer/crates/ide-assists/src/utils.rs index 2c8cb6e4d91..fbce1d31eae 100644 --- a/src/tools/rust-analyzer/crates/ide-assists/src/utils.rs +++ b/src/tools/rust-analyzer/crates/ide-assists/src/utils.rs @@ -567,6 +567,7 @@ pub(crate) fn generate_impl_text(adt: &ast::Adt, code: &str) -> String { /// /// This is useful for traits like `PartialEq`, since `impl<T> PartialEq for U<T>` often requires `T: PartialEq`. // FIXME: migrate remaining uses to `generate_trait_impl` +#[allow(dead_code)] pub(crate) fn generate_trait_impl_text(adt: &ast::Adt, trait_text: &str, code: &str) -> String { generate_impl_text_inner(adt, Some(trait_text), true, code) } |
