Merge pull request #20255 from A4-Tacks/deref-intranstive

Fix ide-assist: generate Deref transitive
This commit is contained in:
Laurențiu Nicola 2025-07-20 10:54:35 +00:00 committed by GitHub
commit fa0320d077
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 25 additions and 2 deletions

View file

@ -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,
@ -227,6 +227,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(

View file

@ -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)
}