mirror of
https://github.com/rust-lang/rust.git
synced 2026-06-01 22:18:23 +03:00
fix: show no error when parameters match macro names
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user