Skip to content

Commit 6c3ddcf

Browse files
committed
Simplify
1 parent e8da7d4 commit 6c3ddcf

File tree

7 files changed

+41
-58
lines changed

7 files changed

+41
-58
lines changed

crates/ra_hir/src/code_model.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ impl Module {
184184
db.crate_def_map(self.id.krate)[self.id.local_id]
185185
.scope
186186
.entries()
187-
.map(|(name, res)| (name.clone(), res.def.into()))
187+
.map(|(name, def)| (name.clone(), def.into()))
188188
.collect()
189189
}
190190

crates/ra_hir_def/src/body/scope.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -183,8 +183,8 @@ mod tests {
183183
let crate_def_map = db.crate_def_map(krate);
184184

185185
let module = crate_def_map.modules_for_file(file_id).next().unwrap();
186-
let (_, res) = crate_def_map[module].scope.entries().next().unwrap();
187-
match res.def.take_values().unwrap() {
186+
let (_, def) = crate_def_map[module].scope.entries().next().unwrap();
187+
match def.take_values().unwrap() {
188188
ModuleDefId::FunctionId(it) => it,
189189
_ => panic!(),
190190
}

crates/ra_hir_def/src/item_scope.rs

Lines changed: 18 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use crate::{per_ns::PerNs, AdtId, BuiltinType, ImplId, MacroDefId, ModuleDefId,
99

1010
#[derive(Debug, Default, PartialEq, Eq)]
1111
pub struct ItemScope {
12-
visible: FxHashMap<Name, Resolution>,
12+
visible: FxHashMap<Name, PerNs>,
1313
defs: Vec<ModuleDefId>,
1414
impls: Vec<ImplId>,
1515
/// Macros visible in current module in legacy textual scope
@@ -27,10 +27,10 @@ pub struct ItemScope {
2727
legacy_macros: FxHashMap<Name, MacroDefId>,
2828
}
2929

30-
static BUILTIN_SCOPE: Lazy<FxHashMap<Name, Resolution>> = Lazy::new(|| {
30+
static BUILTIN_SCOPE: Lazy<FxHashMap<Name, PerNs>> = Lazy::new(|| {
3131
BuiltinType::ALL
3232
.iter()
33-
.map(|(name, ty)| (name.clone(), Resolution { def: PerNs::types(ty.clone().into()) }))
33+
.map(|(name, ty)| (name.clone(), PerNs::types(ty.clone().into())))
3434
.collect()
3535
});
3636

@@ -46,9 +46,9 @@ pub(crate) enum BuiltinShadowMode {
4646
/// Legacy macros can only be accessed through special methods like `get_legacy_macros`.
4747
/// Other methods will only resolve values, types and module scoped macros only.
4848
impl ItemScope {
49-
pub fn entries<'a>(&'a self) -> impl Iterator<Item = (&'a Name, &'a Resolution)> + 'a {
49+
pub fn entries<'a>(&'a self) -> impl Iterator<Item = (&'a Name, PerNs)> + 'a {
5050
//FIXME: shadowing
51-
self.visible.iter().chain(BUILTIN_SCOPE.iter())
51+
self.visible.iter().chain(BUILTIN_SCOPE.iter()).map(|(n, def)| (n, *def))
5252
}
5353

5454
pub fn declarations(&self) -> impl Iterator<Item = ModuleDefId> + '_ {
@@ -61,9 +61,7 @@ impl ItemScope {
6161

6262
/// Iterate over all module scoped macros
6363
pub(crate) fn macros<'a>(&'a self) -> impl Iterator<Item = (&'a Name, MacroDefId)> + 'a {
64-
self.visible
65-
.iter()
66-
.filter_map(|(name, res)| res.def.take_macros().map(|macro_| (name, macro_)))
64+
self.visible.iter().filter_map(|(name, def)| def.take_macros().map(|macro_| (name, macro_)))
6765
}
6866

6967
/// Iterate over all legacy textual scoped macros visible at the end of the module
@@ -72,13 +70,13 @@ impl ItemScope {
7270
}
7371

7472
/// Get a name from current module scope, legacy macros are not included
75-
pub(crate) fn get(&self, name: &Name, shadow: BuiltinShadowMode) -> Option<&Resolution> {
73+
pub(crate) fn get(&self, name: &Name, shadow: BuiltinShadowMode) -> Option<&PerNs> {
7674
match shadow {
7775
BuiltinShadowMode::Module => self.visible.get(name).or_else(|| BUILTIN_SCOPE.get(name)),
7876
BuiltinShadowMode::Other => {
7977
let item = self.visible.get(name);
80-
if let Some(res) = item {
81-
if let Some(ModuleDefId::ModuleId(_)) = res.def.take_types() {
78+
if let Some(def) = item {
79+
if let Some(ModuleDefId::ModuleId(_)) = def.take_types() {
8280
return BUILTIN_SCOPE.get(name).or(item);
8381
}
8482
}
@@ -89,7 +87,7 @@ impl ItemScope {
8987
}
9088

9189
pub(crate) fn traits<'a>(&'a self) -> impl Iterator<Item = TraitId> + 'a {
92-
self.visible.values().filter_map(|r| match r.def.take_types() {
90+
self.visible.values().filter_map(|def| match def.take_types() {
9391
Some(ModuleDefId::TraitId(t)) => Some(t),
9492
_ => None,
9593
})
@@ -111,27 +109,27 @@ impl ItemScope {
111109
self.legacy_macros.insert(name, mac);
112110
}
113111

114-
pub(crate) fn push_res(&mut self, name: Name, res: &Resolution) -> bool {
112+
pub(crate) fn push_res(&mut self, name: Name, def: &PerNs) -> bool {
115113
let mut changed = false;
116114
let existing = self.visible.entry(name.clone()).or_default();
117115

118-
if existing.def.types.is_none() && res.def.types.is_some() {
119-
existing.def.types = res.def.types;
116+
if existing.types.is_none() && def.types.is_some() {
117+
existing.types = def.types;
120118
changed = true;
121119
}
122-
if existing.def.values.is_none() && res.def.values.is_some() {
123-
existing.def.values = res.def.values;
120+
if existing.values.is_none() && def.values.is_some() {
121+
existing.values = def.values;
124122
changed = true;
125123
}
126-
if existing.def.macros.is_none() && res.def.macros.is_some() {
127-
existing.def.macros = res.def.macros;
124+
if existing.macros.is_none() && def.macros.is_some() {
125+
existing.macros = def.macros;
128126
changed = true;
129127
}
130128

131129
changed
132130
}
133131

134-
pub(crate) fn collect_resolutions(&self) -> Vec<(Name, Resolution)> {
132+
pub(crate) fn collect_resolutions(&self) -> Vec<(Name, PerNs)> {
135133
self.visible.iter().map(|(name, res)| (name.clone(), res.clone())).collect()
136134
}
137135

@@ -140,12 +138,6 @@ impl ItemScope {
140138
}
141139
}
142140

143-
#[derive(Debug, Clone, PartialEq, Eq, Default)]
144-
pub struct Resolution {
145-
/// None for unresolved
146-
pub def: PerNs,
147-
}
148-
149141
impl From<ModuleDefId> for PerNs {
150142
fn from(def: ModuleDefId) -> PerNs {
151143
match def {

crates/ra_hir_def/src/nameres/collector.rs

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ use test_utils::tested_by;
1818
use crate::{
1919
attr::Attrs,
2020
db::DefDatabase,
21-
item_scope::Resolution,
2221
nameres::{
2322
diagnostics::DefDiagnostic, mod_resolution::ModDir, path_resolution::ReachedFixedPoint,
2423
raw, BuiltinShadowMode, CrateDefMap, ModuleData, ModuleOrigin, ResolveMode,
@@ -215,7 +214,7 @@ where
215214
// In Rust, `#[macro_export]` macros are unconditionally visible at the
216215
// crate root, even if the parent modules is **not** visible.
217216
if export {
218-
self.update(self.def_map.root, &[(name, Resolution { def: PerNs::macros(macro_) })]);
217+
self.update(self.def_map.root, &[(name, PerNs::macros(macro_))]);
219218
}
220219
}
221220

@@ -397,8 +396,7 @@ where
397396
.map(|(local_id, variant_data)| {
398397
let name = variant_data.name.clone();
399398
let variant = EnumVariantId { parent: e, local_id };
400-
let res =
401-
Resolution { def: PerNs::both(variant.into(), variant.into()) };
399+
let res = PerNs::both(variant.into(), variant.into());
402400
(name, res)
403401
})
404402
.collect::<Vec<_>>();
@@ -424,22 +422,21 @@ where
424422
}
425423
}
426424

427-
let resolution = Resolution { def };
428-
self.update(module_id, &[(name, resolution)]);
425+
self.update(module_id, &[(name, def)]);
429426
}
430427
None => tested_by!(bogus_paths),
431428
}
432429
}
433430
}
434431

435-
fn update(&mut self, module_id: LocalModuleId, resolutions: &[(Name, Resolution)]) {
432+
fn update(&mut self, module_id: LocalModuleId, resolutions: &[(Name, PerNs)]) {
436433
self.update_recursive(module_id, resolutions, 0)
437434
}
438435

439436
fn update_recursive(
440437
&mut self,
441438
module_id: LocalModuleId,
442-
resolutions: &[(Name, Resolution)],
439+
resolutions: &[(Name, PerNs)],
443440
depth: usize,
444441
) {
445442
if depth > 100 {
@@ -705,8 +702,7 @@ where
705702
let module = ModuleId { krate: self.def_collector.def_map.krate, local_id: res };
706703
let def: ModuleDefId = module.into();
707704
self.def_collector.def_map.modules[self.module_id].scope.define_def(def);
708-
let resolution = Resolution { def: def.into() };
709-
self.def_collector.update(self.module_id, &[(name, resolution)]);
705+
self.def_collector.update(self.module_id, &[(name, def.into())]);
710706
res
711707
}
712708

@@ -765,8 +761,7 @@ where
765761
.into(),
766762
};
767763
self.def_collector.def_map.modules[self.module_id].scope.define_def(def);
768-
let resolution = Resolution { def: def.into() };
769-
self.def_collector.update(self.module_id, &[(name, resolution)])
764+
self.def_collector.update(self.module_id, &[(name, def.into())])
770765
}
771766

772767
fn collect_derives(&mut self, attrs: &Attrs, def: &raw::DefData) {

crates/ra_hir_def/src/nameres/path_resolution.rs

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ impl CrateDefMap {
181181

182182
// Since it is a qualified path here, it should not contains legacy macros
183183
match self[module.local_id].scope.get(&segment, prefer_module(i)) {
184-
Some(res) => res.def,
184+
Some(def) => *def,
185185
_ => {
186186
log::debug!("path segment {:?} not found", segment);
187187
return ResolvePathResult::empty(ReachedFixedPoint::No);
@@ -243,8 +243,7 @@ impl CrateDefMap {
243243
// - std prelude
244244
let from_legacy_macro =
245245
self[module].scope.get_legacy_macro(name).map_or_else(PerNs::none, PerNs::macros);
246-
let from_scope =
247-
self[module].scope.get(name, shadow).map_or_else(PerNs::none, |res| res.def);
246+
let from_scope = self[module].scope.get(name, shadow).copied().unwrap_or_else(PerNs::none);
248247
let from_extern_prelude =
249248
self.extern_prelude.get(name).map_or(PerNs::none(), |&it| PerNs::types(it));
250249
let from_prelude = self.resolve_in_prelude(db, name, shadow);
@@ -258,7 +257,7 @@ impl CrateDefMap {
258257
shadow: BuiltinShadowMode,
259258
) -> PerNs {
260259
let from_crate_root =
261-
self[self.root].scope.get(name, shadow).map_or_else(PerNs::none, |res| res.def);
260+
self[self.root].scope.get(name, shadow).copied().unwrap_or_else(PerNs::none);
262261
let from_extern_prelude = self.resolve_name_in_extern_prelude(name);
263262

264263
from_crate_root.or(from_extern_prelude)
@@ -279,10 +278,7 @@ impl CrateDefMap {
279278
keep = db.crate_def_map(prelude.krate);
280279
&keep
281280
};
282-
def_map[prelude.local_id]
283-
.scope
284-
.get(name, shadow)
285-
.map_or_else(PerNs::none, |res| res.def)
281+
def_map[prelude.local_id].scope.get(name, shadow).copied().unwrap_or_else(PerNs::none)
286282
} else {
287283
PerNs::none()
288284
}

crates/ra_hir_def/src/nameres/tests.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,19 +35,19 @@ fn render_crate_def_map(map: &CrateDefMap) -> String {
3535
let mut entries = map.modules[module].scope.collect_resolutions();
3636
entries.sort_by_key(|(name, _)| name.clone());
3737

38-
for (name, res) in entries {
38+
for (name, def) in entries {
3939
*buf += &format!("{}:", name);
4040

41-
if res.def.types.is_some() {
41+
if def.types.is_some() {
4242
*buf += " t";
4343
}
44-
if res.def.values.is_some() {
44+
if def.values.is_some() {
4545
*buf += " v";
4646
}
47-
if res.def.macros.is_some() {
47+
if def.macros.is_some() {
4848
*buf += " m";
4949
}
50-
if res.def.is_none() {
50+
if def.is_none() {
5151
*buf += " _";
5252
}
5353

crates/ra_hir_def/src/resolver.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -413,8 +413,8 @@ impl Scope {
413413
// def: m.module.into(),
414414
// }),
415415
// );
416-
m.crate_def_map[m.module_id].scope.entries().for_each(|(name, res)| {
417-
f(name.clone(), ScopeDef::PerNs(res.def));
416+
m.crate_def_map[m.module_id].scope.entries().for_each(|(name, def)| {
417+
f(name.clone(), ScopeDef::PerNs(def));
418418
});
419419
m.crate_def_map[m.module_id].scope.legacy_macros().for_each(|(name, macro_)| {
420420
f(name.clone(), ScopeDef::PerNs(PerNs::macros(macro_)));
@@ -424,8 +424,8 @@ impl Scope {
424424
});
425425
if let Some(prelude) = m.crate_def_map.prelude {
426426
let prelude_def_map = db.crate_def_map(prelude.krate);
427-
prelude_def_map[prelude.local_id].scope.entries().for_each(|(name, res)| {
428-
f(name.clone(), ScopeDef::PerNs(res.def));
427+
prelude_def_map[prelude.local_id].scope.entries().for_each(|(name, def)| {
428+
f(name.clone(), ScopeDef::PerNs(def));
429429
});
430430
}
431431
}

0 commit comments

Comments
 (0)