fix: show no error when parameters match macro names

This commit is contained in:
Aditya-PS-05
2025-11-20 14:50:56 +05:30
parent a91049e312
commit 231b8ab647
2 changed files with 48 additions and 0 deletions
@@ -2470,4 +2470,39 @@ fn check(&self) -> b::State {
}"#,
);
}
#[test]
fn test_parameter_names_matching_macros_not_qualified() {
check_assist(
add_missing_impl_members,
r#"
trait Foo {
fn foo(&self, vec: usize);
fn bar(&self, format: String, panic: bool);
}
struct Bar;
impl Foo for Bar {$0}
"#,
r#"
trait Foo {
fn foo(&self, vec: usize);
fn bar(&self, format: String, panic: bool);
}
struct Bar;
impl Foo for Bar {
fn foo(&self, vec: usize) {
${0:todo!()}
}
fn bar(&self, format: String, panic: bool) {
todo!()
}
}
"#,
);
}
}
@@ -538,6 +538,14 @@ fn transform_ident_pat(
editor: &mut SyntaxEditor,
ident_pat: &ast::IdentPat,
) -> Option<()> {
// Check if IdentPat is inside a function parameter.
// Parameter names are bindings, not references, thus should not be qualified.
for ancestor in ident_pat.syntax().ancestors() {
if ast::Param::can_cast(ancestor.kind()) {
return None;
}
}
let name = ident_pat.name()?;
let temp_path = make::path_from_text(&name.text());
@@ -546,6 +554,11 @@ fn transform_ident_pat(
match resolution {
hir::PathResolution::Def(def) if def.as_assoc_item(self.source_scope.db).is_none() => {
// Don't qualify macros - they can't be used in pattern position
if matches!(def, hir::ModuleDef::Macro(_)) {
return None;
}
let cfg = FindPathConfig {
prefer_no_std: false,
prefer_prelude: true,