mirror of
https://github.com/rust-lang/rust-analyzer
synced 2025-01-13 21:54:42 +00:00
Merge #7959
7959: Prefer names from outer DefMap over extern prelude r=jonas-schievink a=jonas-schievink Fixes https://github.com/rust-analyzer/rust-analyzer/issues/7919 Just one more special case, how bad could it be. bors r+ Co-authored-by: Jonas Schievink <jonasschievink@gmail.com>
This commit is contained in:
commit
b35559a246
2 changed files with 40 additions and 5 deletions
|
@ -156,7 +156,7 @@ impl DefMap {
|
|||
}
|
||||
}
|
||||
|
||||
pub(super) fn resolve_path_fp_with_macro_single(
|
||||
fn resolve_path_fp_with_macro_single(
|
||||
&self,
|
||||
db: &dyn DefDatabase,
|
||||
mode: ResolveMode,
|
||||
|
@ -384,10 +384,16 @@ impl DefMap {
|
|||
}
|
||||
}
|
||||
};
|
||||
let from_extern_prelude = self
|
||||
.extern_prelude
|
||||
.get(name)
|
||||
.map_or(PerNs::none(), |&it| PerNs::types(it, Visibility::Public));
|
||||
// Give precedence to names in outer `DefMap`s over the extern prelude; only check prelude
|
||||
// from the crate DefMap.
|
||||
let from_extern_prelude = match self.block {
|
||||
Some(_) => PerNs::none(),
|
||||
None => self
|
||||
.extern_prelude
|
||||
.get(name)
|
||||
.map_or(PerNs::none(), |&it| PerNs::types(it, Visibility::Public)),
|
||||
};
|
||||
|
||||
let from_prelude = self.resolve_in_prelude(db, name);
|
||||
|
||||
from_legacy_macro.or(from_scope_or_builtin).or(from_extern_prelude).or(from_prelude)
|
||||
|
|
|
@ -705,6 +705,35 @@ fn x(a: S) {
|
|||
)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn import_extern_crate_clash_with_inner_item() {
|
||||
// This is more of a resolver test, but doesn't really work with the hir_def testsuite.
|
||||
|
||||
check_diagnostics(
|
||||
r#"
|
||||
//- /lib.rs crate:lib deps:jwt
|
||||
mod permissions;
|
||||
|
||||
use permissions::jwt;
|
||||
|
||||
fn f() {
|
||||
fn inner() {}
|
||||
jwt::Claims {}; // should resolve to the local one with 0 fields, and not get a diagnostic
|
||||
}
|
||||
|
||||
//- /permissions.rs
|
||||
pub mod jwt {
|
||||
pub struct Claims {}
|
||||
}
|
||||
|
||||
//- /jwt/lib.rs crate:jwt
|
||||
pub struct Claims {
|
||||
field: u8,
|
||||
}
|
||||
"#,
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn break_outside_of_loop() {
|
||||
check_diagnostics(
|
||||
|
|
Loading…
Reference in a new issue