Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-db/src/path_transform.rs')
-rw-r--r--crates/ide-db/src/path_transform.rs13
1 files changed, 13 insertions, 0 deletions
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,