Unnamed repository; edit this file 'description' to name the repository.
-rw-r--r--crates/ide-assists/src/handlers/add_missing_impl_members.rs35
-rw-r--r--crates/ide-db/src/path_transform.rs13
2 files changed, 48 insertions, 0 deletions
diff --git a/crates/ide-assists/src/handlers/add_missing_impl_members.rs b/crates/ide-assists/src/handlers/add_missing_impl_members.rs
index 7e03eb3030..d0ad2fa4f1 100644
--- a/crates/ide-assists/src/handlers/add_missing_impl_members.rs
+++ b/crates/ide-assists/src/handlers/add_missing_impl_members.rs
@@ -2470,4 +2470,39 @@ impl b::Checker for MyChecker {
}"#,
);
}
+
+ #[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!()
+ }
+}
+"#,
+ );
+ }
}
diff --git a/crates/ide-db/src/path_transform.rs b/crates/ide-db/src/path_transform.rs
index 4a27035afd..096a65d9af 100644
--- a/crates/ide-db/src/path_transform.rs
+++ b/crates/ide-db/src/path_transform.rs
@@ -538,6 +538,14 @@ impl Ctx<'_> {
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 @@ impl Ctx<'_> {
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,