mirror of
https://github.com/rust-lang/rust.git
synced 2025-04-28 02:57:37 +00:00
Use a macro in push_res to simplify code, simplify glob_shadowed_def assertion
This commit is contained in:
parent
38af81f183
commit
dfd79907b8
@ -5,6 +5,7 @@ use hir_expand::name::Name;
|
||||
use once_cell::sync::Lazy;
|
||||
use ra_db::CrateId;
|
||||
use rustc_hash::FxHashMap;
|
||||
use test_utils::mark;
|
||||
|
||||
use crate::{
|
||||
db::DefDatabase, per_ns::PerNs, visibility::Visibility, AdtId, BuiltinType, HasModule, ImplId,
|
||||
@ -126,41 +127,26 @@ impl ItemScope {
|
||||
let mut changed = false;
|
||||
let existing = self.visible.entry(name).or_default();
|
||||
|
||||
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;
|
||||
}
|
||||
_ => {}
|
||||
macro_rules! check_changed {
|
||||
($changed:ident, $existing:expr, $def:expr) => {
|
||||
match ($existing, $def) {
|
||||
(None, Some(_)) => {
|
||||
$existing = $def;
|
||||
$changed = true;
|
||||
}
|
||||
(Some(e), Some(d)) if e.0 != d.0 => {
|
||||
mark::hit!(import_shadowed);
|
||||
$existing = $def;
|
||||
$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;
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
check_changed!(changed, existing.types, def.types);
|
||||
check_changed!(changed, existing.values, def.values);
|
||||
check_changed!(changed, existing.macros, def.macros);
|
||||
|
||||
changed
|
||||
}
|
||||
|
@ -232,146 +232,47 @@ fn glob_enum_group() {
|
||||
|
||||
#[test]
|
||||
fn glob_shadowed_def() {
|
||||
let db = TestDB::with_files(
|
||||
mark::check!(import_shadowed);
|
||||
let map = def_map(
|
||||
r###"
|
||||
//- /lib.rs
|
||||
mod foo;
|
||||
mod bar;
|
||||
|
||||
use foo::*;
|
||||
use bar::Baz;
|
||||
use bar::baz;
|
||||
|
||||
use baz::Bar;
|
||||
|
||||
//- /foo.rs
|
||||
pub struct Baz;
|
||||
pub mod baz {
|
||||
pub struct Foo;
|
||||
}
|
||||
|
||||
//- /bar.rs
|
||||
pub struct Baz;
|
||||
pub mod baz {
|
||||
pub struct Bar;
|
||||
}
|
||||
"###,
|
||||
);
|
||||
let krate = db.test_crate();
|
||||
assert_snapshot!(map, @r###"
|
||||
crate
|
||||
Bar: t v
|
||||
bar: t
|
||||
baz: t
|
||||
foo: t
|
||||
|
||||
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,
|
||||
},
|
||||
),
|
||||
]
|
||||
crate::bar
|
||||
baz: t
|
||||
|
||||
crate::bar::baz
|
||||
Bar: t v
|
||||
|
||||
crate::foo
|
||||
baz: t
|
||||
|
||||
crate::foo::baz
|
||||
Foo: t v
|
||||
"###
|
||||
);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user