mirror of
https://github.com/rust-lang/rust.git
synced 2025-05-14 02:49:40 +00:00
Account for updated module ids when determining whether a resolution is "changed"
This commit is contained in:
parent
471d44e72c
commit
38af81f183
@ -126,17 +126,40 @@ impl ItemScope {
|
||||
let mut changed = false;
|
||||
let existing = self.visible.entry(name).or_default();
|
||||
|
||||
if existing.types.is_none() && def.types.is_some() {
|
||||
existing.types = def.types;
|
||||
changed = true;
|
||||
match (existing.types, def.types) {
|
||||
(None, Some(_)) => {
|
||||
existing.types = def.types;
|
||||
changed = true;
|
||||
}
|
||||
(Some(e), Some(d)) if e.0 != d.0 => {
|
||||
existing.types = def.types;
|
||||
changed = true;
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
if existing.values.is_none() && def.values.is_some() {
|
||||
existing.values = def.values;
|
||||
changed = true;
|
||||
|
||||
match (existing.values, def.values) {
|
||||
(None, Some(_)) => {
|
||||
existing.values = def.values;
|
||||
changed = true;
|
||||
}
|
||||
(Some(e), Some(d)) if e.0 != d.0 => {
|
||||
existing.values = def.values;
|
||||
changed = true;
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
if existing.macros.is_none() && def.macros.is_some() {
|
||||
existing.macros = def.macros;
|
||||
changed = true;
|
||||
|
||||
match (existing.macros, def.macros) {
|
||||
(None, Some(_)) => {
|
||||
existing.macros = def.macros;
|
||||
changed = true;
|
||||
}
|
||||
(Some(e), Some(d)) if e.0 != d.0 => {
|
||||
existing.macros = def.macros;
|
||||
changed = true;
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
|
||||
changed
|
||||
|
@ -229,3 +229,149 @@ fn glob_enum_group() {
|
||||
"###
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn glob_shadowed_def() {
|
||||
let db = TestDB::with_files(
|
||||
r###"
|
||||
//- /lib.rs
|
||||
mod foo;
|
||||
mod bar;
|
||||
|
||||
use foo::*;
|
||||
use bar::Baz;
|
||||
|
||||
//- /foo.rs
|
||||
pub struct Baz;
|
||||
|
||||
//- /bar.rs
|
||||
pub struct Baz;
|
||||
"###,
|
||||
);
|
||||
let krate = db.test_crate();
|
||||
|
||||
let crate_def_map = db.crate_def_map(krate);
|
||||
let (_, root_module) = crate_def_map
|
||||
.modules
|
||||
.iter()
|
||||
.find(|(_, module_data)| module_data.parent.is_none())
|
||||
.expect("Root module not found");
|
||||
let visible_entries = root_module.scope.entries().collect::<Vec<_>>();
|
||||
insta::assert_debug_snapshot!(
|
||||
visible_entries,
|
||||
@r###"
|
||||
[
|
||||
(
|
||||
Name(
|
||||
Text(
|
||||
"Baz",
|
||||
),
|
||||
),
|
||||
PerNs {
|
||||
types: Some(
|
||||
(
|
||||
AdtId(
|
||||
StructId(
|
||||
StructId(
|
||||
1,
|
||||
),
|
||||
),
|
||||
),
|
||||
Module(
|
||||
ModuleId {
|
||||
krate: CrateId(
|
||||
0,
|
||||
),
|
||||
local_id: Idx::<ModuleData>(0),
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
values: Some(
|
||||
(
|
||||
AdtId(
|
||||
StructId(
|
||||
StructId(
|
||||
1,
|
||||
),
|
||||
),
|
||||
),
|
||||
Module(
|
||||
ModuleId {
|
||||
krate: CrateId(
|
||||
0,
|
||||
),
|
||||
local_id: Idx::<ModuleData>(0),
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
macros: None,
|
||||
},
|
||||
),
|
||||
(
|
||||
Name(
|
||||
Text(
|
||||
"bar",
|
||||
),
|
||||
),
|
||||
PerNs {
|
||||
types: Some(
|
||||
(
|
||||
ModuleId(
|
||||
ModuleId {
|
||||
krate: CrateId(
|
||||
0,
|
||||
),
|
||||
local_id: Idx::<ModuleData>(2),
|
||||
},
|
||||
),
|
||||
Module(
|
||||
ModuleId {
|
||||
krate: CrateId(
|
||||
0,
|
||||
),
|
||||
local_id: Idx::<ModuleData>(0),
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
values: None,
|
||||
macros: None,
|
||||
},
|
||||
),
|
||||
(
|
||||
Name(
|
||||
Text(
|
||||
"foo",
|
||||
),
|
||||
),
|
||||
PerNs {
|
||||
types: Some(
|
||||
(
|
||||
ModuleId(
|
||||
ModuleId {
|
||||
krate: CrateId(
|
||||
0,
|
||||
),
|
||||
local_id: Idx::<ModuleData>(1),
|
||||
},
|
||||
),
|
||||
Module(
|
||||
ModuleId {
|
||||
krate: CrateId(
|
||||
0,
|
||||
),
|
||||
local_id: Idx::<ModuleData>(0),
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
values: None,
|
||||
macros: None,
|
||||
},
|
||||
),
|
||||
]
|
||||
"###
|
||||
);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user