Skip to content

Commit 32f425d

Browse files
bors[bot]Veykril
andauthored
Merge #10787
10787: minor: Simplify r=Veykril a=Veykril bors r+ Co-authored-by: Lukas Wirth <[email protected]>
2 parents e051ae8 + 6e1ecae commit 32f425d

File tree

1 file changed

+48
-55
lines changed

1 file changed

+48
-55
lines changed

crates/hir_def/src/nameres/collector.rs

Lines changed: 48 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ use itertools::Itertools;
2121
use la_arena::Idx;
2222
use limit::Limit;
2323
use rustc_hash::{FxHashMap, FxHashSet};
24-
use syntax::ast;
24+
use syntax::{ast, SmolStr};
2525

2626
use crate::{
2727
attr::{Attr, AttrId, AttrInput, Attrs},
@@ -94,7 +94,6 @@ pub(super) fn collect_defs(
9494
glob_imports: FxHashMap::default(),
9595
unresolved_imports: Vec::new(),
9696
resolved_imports: Vec::new(),
97-
9897
unresolved_macros: Vec::new(),
9998
mod_dirs: FxHashMap::default(),
10099
cfg_options,
@@ -107,12 +106,8 @@ pub(super) fn collect_defs(
107106
registered_tools: Default::default(),
108107
};
109108
match block {
110-
Some(block) => {
111-
collector.seed_with_inner(block);
112-
}
113-
None => {
114-
collector.seed_with_top_level();
115-
}
109+
Some(block) => collector.seed_with_inner(block),
110+
None => collector.seed_with_top_level(),
116111
}
117112
collector.collect();
118113
let mut def_map = collector.finish();
@@ -126,16 +121,15 @@ enum PartialResolvedImport {
126121
Unresolved,
127122
/// One of namespaces is resolved
128123
Indeterminate(PerNs),
129-
/// All namespaces are resolved, OR it is came from other crate
124+
/// All namespaces are resolved, OR it comes from other crate
130125
Resolved(PerNs),
131126
}
132127

133128
impl PartialResolvedImport {
134-
fn namespaces(&self) -> PerNs {
129+
fn namespaces(self) -> PerNs {
135130
match self {
136131
PartialResolvedImport::Unresolved => PerNs::none(),
137-
PartialResolvedImport::Indeterminate(ns) => *ns,
138-
PartialResolvedImport::Resolved(ns) => *ns,
132+
PartialResolvedImport::Indeterminate(ns) | PartialResolvedImport::Resolved(ns) => ns,
139133
}
140134
}
141135
}
@@ -268,9 +262,9 @@ struct DefCollector<'a> {
268262
/// attributes.
269263
derive_helpers_in_scope: FxHashMap<AstId<ast::Item>, Vec<Name>>,
270264
/// Custom attributes registered with `#![register_attr]`.
271-
registered_attrs: Vec<String>,
265+
registered_attrs: Vec<SmolStr>,
272266
/// Custom tool modules registered with `#![register_tool]`.
273-
registered_tools: Vec<String>,
267+
registered_tools: Vec<SmolStr>,
274268
}
275269

276270
impl DefCollector<'_> {
@@ -292,31 +286,31 @@ impl DefCollector<'_> {
292286
None => continue,
293287
};
294288

295-
let registered_name = if *attr_name == hir_expand::name![register_attr]
296-
|| *attr_name == hir_expand::name![register_tool]
297-
{
298-
match attr.input.as_deref() {
299-
Some(AttrInput::TokenTree(subtree, _)) => match &*subtree.token_trees {
300-
[tt::TokenTree::Leaf(tt::Leaf::Ident(name))] => name.as_name(),
301-
_ => continue,
302-
},
303-
_ => continue,
304-
}
305-
} else {
289+
let attr_is_register_like = *attr_name == hir_expand::name![register_attr]
290+
|| *attr_name == hir_expand::name![register_tool];
291+
if !attr_is_register_like {
306292
continue;
293+
}
294+
295+
let registered_name = match attr.input.as_deref() {
296+
Some(AttrInput::TokenTree(subtree, _)) => match &*subtree.token_trees {
297+
[tt::TokenTree::Leaf(tt::Leaf::Ident(name))] => name.as_name(),
298+
_ => continue,
299+
},
300+
_ => continue,
307301
};
308302

309303
if *attr_name == hir_expand::name![register_attr] {
310-
self.registered_attrs.push(registered_name.to_string());
304+
self.registered_attrs.push(registered_name.to_smol_str());
311305
cov_mark::hit!(register_attr);
312306
} else {
313-
self.registered_tools.push(registered_name.to_string());
307+
self.registered_tools.push(registered_name.to_smol_str());
314308
cov_mark::hit!(register_tool);
315309
}
316310
}
317311

318312
ModCollector {
319-
def_collector: &mut *self,
313+
def_collector: self,
320314
macro_depth: 0,
321315
module_id,
322316
tree_id: TreeId::new(file_id.into(), None),
@@ -330,13 +324,14 @@ impl DefCollector<'_> {
330324
fn seed_with_inner(&mut self, block: AstId<ast::BlockExpr>) {
331325
let item_tree = self.db.file_item_tree(block.file_id);
332326
let module_id = self.def_map.root;
333-
if item_tree
327+
328+
let is_cfg_enabled = item_tree
334329
.top_level_attrs(self.db, self.def_map.krate)
335330
.cfg()
336-
.map_or(true, |cfg| self.cfg_options.check(&cfg) != Some(false))
337-
{
331+
.map_or(true, |cfg| self.cfg_options.check(&cfg) != Some(false));
332+
if is_cfg_enabled {
338333
ModCollector {
339-
def_collector: &mut *self,
334+
def_collector: self,
340335
macro_depth: 0,
341336
module_id,
342337
// FIXME: populate block once we have per-block ItemTrees
@@ -444,7 +439,7 @@ impl DefCollector<'_> {
444439
let item_tree = self.db.file_item_tree(file_id);
445440
let mod_dir = self.mod_dirs[&directive.module_id].clone();
446441
ModCollector {
447-
def_collector: &mut *self,
442+
def_collector: self,
448443
macro_depth: directive.depth,
449444
module_id: directive.module_id,
450445
tree_id: TreeId::new(file_id, None),
@@ -522,16 +517,16 @@ impl DefCollector<'_> {
522517
BuiltinShadowMode::Other,
523518
);
524519

525-
match &per_ns.types {
520+
match per_ns.types {
526521
Some((ModuleDefId::ModuleId(m), _)) => {
527-
self.def_map.prelude = Some(*m);
522+
self.def_map.prelude = Some(m);
528523
return;
529524
}
530-
_ => {
525+
types => {
531526
tracing::debug!(
532527
"could not resolve prelude path `{}` to module (resolved to {:?})",
533528
path,
534-
per_ns.types
529+
types
535530
);
536531
}
537532
}
@@ -558,9 +553,9 @@ impl DefCollector<'_> {
558553
let kind = def.kind.to_basedb_kind();
559554
self.exports_proc_macros = true;
560555
let macro_def = match self.proc_macros.iter().find(|(n, _)| n == &def.name) {
561-
Some((_, expander)) => MacroDefId {
556+
Some(&(_, expander)) => MacroDefId {
562557
krate: self.def_map.krate,
563-
kind: MacroDefKind::ProcMacro(*expander, kind, ast_id),
558+
kind: MacroDefKind::ProcMacro(expander, kind, ast_id),
564559
local_inner: false,
565560
},
566561
None => MacroDefId {
@@ -786,18 +781,16 @@ impl DefCollector<'_> {
786781
}
787782

788783
fn resolve_extern_crate(&self, name: &Name) -> PerNs {
789-
let arc;
790-
let root = match self.def_map.block {
791-
Some(_) => {
792-
arc = self.def_map.crate_root(self.db).def_map(self.db);
793-
&*arc
794-
}
795-
None => &self.def_map,
796-
};
797-
798784
if name == &name!(self) {
799785
cov_mark::hit!(extern_crate_self_as);
800-
PerNs::types(root.module_id(root.root()).into(), Visibility::Public)
786+
let root = match self.def_map.block {
787+
Some(_) => {
788+
let def_map = self.def_map.crate_root(self.db).def_map(self.db);
789+
def_map.module_id(def_map.root())
790+
}
791+
None => self.def_map.module_id(self.def_map.root()),
792+
};
793+
PerNs::types(root.into(), Visibility::Public)
801794
} else {
802795
self.deps.get(name).map_or(PerNs::none(), |&it| PerNs::types(it, Visibility::Public))
803796
}
@@ -817,10 +810,10 @@ impl DefCollector<'_> {
817810
match import.kind {
818811
ImportKind::Plain | ImportKind::TypeOnly => {
819812
let name = match &import.alias {
820-
Some(ImportAlias::Alias(name)) => Some(name.clone()),
813+
Some(ImportAlias::Alias(name)) => Some(name),
821814
Some(ImportAlias::Underscore) => None,
822815
None => match import.path.segments().last() {
823-
Some(last_segment) => Some(last_segment.clone()),
816+
Some(last_segment) => Some(last_segment),
824817
None => {
825818
cov_mark::hit!(bogus_paths);
826819
return;
@@ -837,12 +830,12 @@ impl DefCollector<'_> {
837830

838831
// extern crates in the crate root are special-cased to insert entries into the extern prelude: rust-lang/rust#54658
839832
if import.is_extern_crate && module_id == self.def_map.root {
840-
if let (Some(def), Some(name)) = (def.take_types(), name.as_ref()) {
833+
if let (Some(def), Some(name)) = (def.take_types(), name) {
841834
self.def_map.extern_prelude.insert(name.clone(), def);
842835
}
843836
}
844837

845-
self.update(module_id, &[(name, def)], vis, ImportType::Named);
838+
self.update(module_id, &[(name.cloned(), def)], vis, ImportType::Named);
846839
}
847840
ImportKind::Glob => {
848841
tracing::debug!("glob import: {:?}", import);
@@ -1786,7 +1779,7 @@ impl ModCollector<'_, '_> {
17861779
let is_tool = builtin_attr::TOOL_MODULES
17871780
.iter()
17881781
.copied()
1789-
.chain(self.def_collector.registered_tools.iter().map(AsRef::as_ref))
1782+
.chain(self.def_collector.registered_tools.iter().map(SmolStr::as_str))
17901783
.any(|m| tool_module == *m);
17911784
if is_tool {
17921785
return true;
@@ -1798,7 +1791,7 @@ impl ModCollector<'_, '_> {
17981791
let is_inert = builtin_attr::INERT_ATTRIBUTES
17991792
.iter()
18001793
.copied()
1801-
.chain(self.def_collector.registered_attrs.iter().map(AsRef::as_ref))
1794+
.chain(self.def_collector.registered_attrs.iter().map(SmolStr::as_str))
18021795
.any(|attr| name == *attr);
18031796
return is_inert;
18041797
}

0 commit comments

Comments
 (0)