Skip to content

Commit fa0320d

Browse files
authored
Merge pull request #20255 from A4-Tacks/deref-intranstive
Fix ide-assist: generate Deref transitive
2 parents 2eaba02 + 196833c commit fa0320d

File tree

2 files changed

+25
-2
lines changed

2 files changed

+25
-2
lines changed

src/tools/rust-analyzer/crates/ide-assists/src/handlers/generate_deref.rs

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use syntax::{
1010
use crate::{
1111
AssistId,
1212
assist_context::{AssistContext, Assists, SourceChangeBuilder},
13-
utils::generate_trait_impl_text,
13+
utils::generate_trait_impl_text_intransitive,
1414
};
1515

1616
// Assist: generate_deref
@@ -150,7 +150,7 @@ fn generate_edit(
150150
),
151151
};
152152
let strukt_adt = ast::Adt::Struct(strukt);
153-
let deref_impl = generate_trait_impl_text(
153+
let deref_impl = generate_trait_impl_text_intransitive(
154154
&strukt_adt,
155155
&trait_path.display(db, edition).to_string(),
156156
&impl_code,
@@ -227,6 +227,28 @@ impl core::ops::Deref for B {
227227
);
228228
}
229229

230+
#[test]
231+
fn test_generate_record_deref_with_generic() {
232+
check_assist(
233+
generate_deref,
234+
r#"
235+
//- minicore: deref
236+
struct A<T>($0T);
237+
"#,
238+
r#"
239+
struct A<T>(T);
240+
241+
impl<T> core::ops::Deref for A<T> {
242+
type Target = T;
243+
244+
fn deref(&self) -> &Self::Target {
245+
&self.0
246+
}
247+
}
248+
"#,
249+
);
250+
}
251+
230252
#[test]
231253
fn test_generate_record_deref_short_path() {
232254
check_assist(

src/tools/rust-analyzer/crates/ide-assists/src/utils.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -567,6 +567,7 @@ pub(crate) fn generate_impl_text(adt: &ast::Adt, code: &str) -> String {
567567
///
568568
/// This is useful for traits like `PartialEq`, since `impl<T> PartialEq for U<T>` often requires `T: PartialEq`.
569569
// FIXME: migrate remaining uses to `generate_trait_impl`
570+
#[allow(dead_code)]
570571
pub(crate) fn generate_trait_impl_text(adt: &ast::Adt, trait_text: &str, code: &str) -> String {
571572
generate_impl_text_inner(adt, Some(trait_text), true, code)
572573
}

0 commit comments

Comments
 (0)