Skip to content

Commit 5d10d90

Browse files
committed
address review
1 parent 3e2573c commit 5d10d90

8 files changed

Lines changed: 54 additions & 140 deletions

File tree

compiler/rustc_hir/src/def.rs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -590,6 +590,13 @@ pub enum Res<Id = hir::HirId> {
590590
/// **Belongs to the type namespace.**
591591
ToolMod,
592592

593+
/// The resolution for a virtual module in a namespaced crate. E.g. `my_api`
594+
/// in the namespaced crate `my_api::utils` when `my_api` isn't part of the
595+
/// extern prelude.
596+
///
597+
/// **Belongs to the type namespace.**
598+
OpenMod(Symbol),
599+
593600
// Macro namespace
594601
/// An attribute that is *not* implemented via macro.
595602
/// E.g., `#[inline]` and `#[rustfmt::skip]`, which are essentially directives,
@@ -604,13 +611,6 @@ pub enum Res<Id = hir::HirId> {
604611
///
605612
/// **Not bound to a specific namespace.**
606613
Err,
607-
608-
/// The resolution for a virtual module in a namespaced crate. E.g. `my_api`
609-
/// in the namespaced crate `my_api::utils` when `my_api` isn't part of the
610-
/// extern prelude.
611-
///
612-
/// **Belongs to the type namespace.**
613-
VirtualMod(Symbol),
614614
}
615615

616616
impl<Id> IntoDiagArg for Res<Id> {
@@ -845,7 +845,7 @@ impl<Id> Res<Id> {
845845
| Res::SelfTyAlias { .. }
846846
| Res::SelfCtor(..)
847847
| Res::ToolMod
848-
| Res::VirtualMod(..)
848+
| Res::OpenMod(..)
849849
| Res::NonMacroAttr(..)
850850
| Res::Err => None,
851851
}
@@ -877,7 +877,7 @@ impl<Id> Res<Id> {
877877
Res::Local(..) => "local variable",
878878
Res::SelfTyParam { .. } | Res::SelfTyAlias { .. } => "self type",
879879
Res::ToolMod => "tool module",
880-
Res::VirtualMod(..) => "namespaced crate",
880+
Res::OpenMod(..) => "namespaced crate",
881881
Res::NonMacroAttr(attr_kind) => attr_kind.descr(),
882882
Res::Err => "unresolved item",
883883
}
@@ -904,7 +904,7 @@ impl<Id> Res<Id> {
904904
Res::SelfTyAlias { alias_to, is_trait_impl }
905905
}
906906
Res::ToolMod => Res::ToolMod,
907-
Res::VirtualMod(sym) => Res::VirtualMod(sym),
907+
Res::OpenMod(sym) => Res::OpenMod(sym),
908908
Res::NonMacroAttr(attr_kind) => Res::NonMacroAttr(attr_kind),
909909
Res::Err => Res::Err,
910910
}
@@ -921,7 +921,7 @@ impl<Id> Res<Id> {
921921
Res::SelfTyAlias { alias_to, is_trait_impl }
922922
}
923923
Res::ToolMod => Res::ToolMod,
924-
Res::VirtualMod(sym) => Res::VirtualMod(sym),
924+
Res::OpenMod(sym) => Res::OpenMod(sym),
925925
Res::NonMacroAttr(attr_kind) => Res::NonMacroAttr(attr_kind),
926926
Res::Err => Res::Err,
927927
})
@@ -951,7 +951,7 @@ impl<Id> Res<Id> {
951951
| Res::SelfTyParam { .. }
952952
| Res::SelfTyAlias { .. }
953953
| Res::ToolMod
954-
| Res::VirtualMod(..) => Some(Namespace::TypeNS),
954+
| Res::OpenMod(..) => Some(Namespace::TypeNS),
955955
Res::SelfCtor(..) | Res::Local(..) => Some(Namespace::ValueNS),
956956
Res::NonMacroAttr(..) => Some(Namespace::MacroNS),
957957
Res::Err => None,

compiler/rustc_hir_analysis/src/hir_ty_lowering/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2786,7 +2786,7 @@ impl<'tcx> dyn HirTyLowerer<'tcx> + '_ {
27862786
| Res::SelfCtor(_)
27872787
| Res::Local(_)
27882788
| Res::ToolMod
2789-
| Res::VirtualMod(..)
2789+
| Res::OpenMod(..)
27902790
| Res::NonMacroAttr(_)
27912791
| Res::Err) => Const::new_error_with_message(
27922792
tcx,

compiler/rustc_passes/src/dead.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ impl<'tcx> MarkSymbolVisitor<'tcx> {
157157
Res::Def(_, def_id) => self.check_def_id(def_id),
158158
Res::SelfTyParam { trait_: t } => self.check_def_id(t),
159159
Res::SelfTyAlias { alias_to: i, .. } => self.check_def_id(i),
160-
Res::ToolMod | Res::NonMacroAttr(..) | Res::VirtualMod(..) | Res::Err => {}
160+
Res::ToolMod | Res::NonMacroAttr(..) | Res::OpenMod(..) | Res::Err => {}
161161
}
162162
}
163163

compiler/rustc_resolve/src/build_reduced_graph.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,6 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
326326
_,
327327
)
328328
| Res::PrimTy(..)
329-
| Res::VirtualMod(..)
330329
| Res::ToolMod => define_extern(TypeNS),
331330
Res::Def(
332331
DefKind::Fn
@@ -358,6 +357,7 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
358357
| Res::SelfTyParam { .. }
359358
| Res::SelfTyAlias { .. }
360359
| Res::SelfCtor(..)
360+
| Res::OpenMod(..)
361361
| Res::Err => bug!("unexpected resolution: {:?}", res),
362362
}
363363
}

compiler/rustc_resolve/src/diagnostics.rs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1206,7 +1206,6 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
12061206
Scope::ModuleGlobs(..) => {
12071207
// Already handled in `ModuleNonGlobs`.
12081208
}
1209-
Scope::NamespacedCrates(..) => {}
12101209
Scope::MacroUsePrelude => {
12111210
suggestions.extend(this.macro_use_prelude.iter().filter_map(
12121211
|(name, binding)| {
@@ -1737,7 +1736,7 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
17371736
Res::Def(DefKind::Macro(kinds), _) => {
17381737
format!("{} {}", kinds.article(), kinds.descr())
17391738
}
1740-
Res::ToolMod | Res::VirtualMod(..) => {
1739+
Res::ToolMod | Res::OpenMod(..) => {
17411740
// Don't confuse the user with tool modules or virtual modules.
17421741
continue;
17431742
}
@@ -1976,13 +1975,11 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
19761975
let (built_in, from) = match scope {
19771976
Scope::StdLibPrelude | Scope::MacroUsePrelude => ("", " from prelude"),
19781977
Scope::ExternPreludeFlags
1979-
if self.tcx.sess.opts.externs.get(ident.as_str()).is_some() =>
1978+
if self.tcx.sess.opts.externs.get(ident.as_str()).is_some()
1979+
|| matches!(res, Res::OpenMod(..)) =>
19801980
{
19811981
("", " passed with `--extern`")
19821982
}
1983-
Scope::ExternPreludeFlags if matches!(res, Res::VirtualMod(..)) => {
1984-
("", " passed with `--extern`")
1985-
}
19861983
_ => {
19871984
if matches!(res, Res::NonMacroAttr(..) | Res::PrimTy(..) | Res::ToolMod) {
19881985
// These already contain the "built-in" prefix or look bad with it.

compiler/rustc_resolve/src/ident.rs

Lines changed: 20 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -109,40 +109,26 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
109109
let (ns, macro_kind) = match scope_set {
110110
ScopeSet::All(ns)
111111
| ScopeSet::Module(ns, _)
112-
| ScopeSet::ModuleAndExternPrelude(ns, _)
113-
| ScopeSet::NamespacedCrate(ns, _) => (ns, None),
112+
| ScopeSet::ModuleAndExternPrelude(ns, _) => (ns, None),
114113
ScopeSet::ExternPrelude => (TypeNS, None),
115114
ScopeSet::Macro(macro_kind) => (MacroNS, Some(macro_kind)),
116115
};
117116
let module = match scope_set {
118117
// Start with the specified module.
119-
ScopeSet::Module(_, module) | ScopeSet::ModuleAndExternPrelude(_, module) => {
120-
Some(module)
121-
}
122-
ScopeSet::NamespacedCrate(_, _) => None,
118+
ScopeSet::Module(_, module) | ScopeSet::ModuleAndExternPrelude(_, module) => module,
123119
// Jump out of trait or enum modules, they do not act as scopes.
124-
_ => Some(parent_scope.module.nearest_item_scope()),
120+
_ => parent_scope.module.nearest_item_scope(),
125121
};
126122
let module_only = matches!(scope_set, ScopeSet::Module(..));
127123
let module_and_extern_prelude = matches!(scope_set, ScopeSet::ModuleAndExternPrelude(..));
128124
let extern_prelude = matches!(scope_set, ScopeSet::ExternPrelude);
129-
let namespace_crate_only = matches!(scope_set, ScopeSet::NamespacedCrate(..));
130125
let mut scope = match ns {
131-
_ if module_only || module_and_extern_prelude => {
132-
Scope::ModuleNonGlobs(module.unwrap(), None)
133-
}
134-
_ if namespace_crate_only => {
135-
let ScopeSet::NamespacedCrate(_, root_name) = scope_set else {
136-
unreachable!();
137-
};
138-
139-
Scope::NamespacedCrates(root_name)
140-
}
126+
_ if module_only || module_and_extern_prelude => Scope::ModuleNonGlobs(module, None),
141127
_ if extern_prelude => Scope::ExternPreludeItems,
142-
TypeNS | ValueNS => Scope::ModuleNonGlobs(module.unwrap(), None),
128+
TypeNS | ValueNS => Scope::ModuleNonGlobs(module, None),
143129
MacroNS => Scope::DeriveHelpers(parent_scope.expansion),
144130
};
145-
let mut use_prelude = module.map(|m| !m.no_implicit_prelude).unwrap_or_else(|| true);
131+
let mut use_prelude = !module.no_implicit_prelude;
146132

147133
loop {
148134
let visit = match scope {
@@ -165,9 +151,7 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
165151
}
166152
true
167153
}
168-
Scope::ModuleNonGlobs(..)
169-
| Scope::ModuleGlobs(..)
170-
| Scope::NamespacedCrates(..) => true,
154+
Scope::ModuleNonGlobs(..) | Scope::ModuleGlobs(..) => true,
171155
Scope::MacroUsePrelude => use_prelude || orig_ident_span.is_rust_2015(),
172156
Scope::BuiltinAttrs => true,
173157
Scope::ExternPreludeItems | Scope::ExternPreludeFlags => {
@@ -208,7 +192,7 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
208192
MacroRulesScope::Invocation(invoc_id) => {
209193
Scope::MacroRules(self.invocation_parent_scopes[&invoc_id].macro_rules)
210194
}
211-
MacroRulesScope::Empty => Scope::ModuleNonGlobs(module.unwrap(), None),
195+
MacroRulesScope::Empty => Scope::ModuleNonGlobs(module, None),
212196
},
213197
Scope::ModuleNonGlobs(module, lint_id) => Scope::ModuleGlobs(module, lint_id),
214198
Scope::ModuleGlobs(..) if module_only => break,
@@ -235,10 +219,6 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
235219
}
236220
}
237221
}
238-
Scope::NamespacedCrates(..) => {
239-
assert!(namespace_crate_only);
240-
break;
241-
}
242222
Scope::MacroUsePrelude => Scope::StdLibPrelude,
243223
Scope::BuiltinAttrs => break, // nowhere else to search
244224
Scope::ExternPreludeItems => Scope::ExternPreludeFlags,
@@ -444,8 +424,7 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
444424
let (ns, macro_kind) = match scope_set {
445425
ScopeSet::All(ns)
446426
| ScopeSet::Module(ns, _)
447-
| ScopeSet::ModuleAndExternPrelude(ns, _)
448-
| ScopeSet::NamespacedCrate(ns, _) => (ns, None),
427+
| ScopeSet::ModuleAndExternPrelude(ns, _) => (ns, None),
449428
ScopeSet::ExternPrelude => (TypeNS, None),
450429
ScopeSet::Macro(macro_kind) => (MacroNS, Some(macro_kind)),
451430
};
@@ -500,6 +479,7 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
500479
}
501480
Err(determinacy) => Err(determinacy.into_value()),
502481
};
482+
503483
match res {
504484
Ok(decl) if sub_namespace_match(decl.macro_kinds(), macro_kind) => {
505485
// Below we report various ambiguity errors.
@@ -706,32 +686,6 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
706686
Err(ControlFlow::Break(..)) => return binding,
707687
}
708688
}
709-
Scope::NamespacedCrates(sym) => {
710-
let try_find_namespaced_crate = |root_name: &Symbol| {
711-
self.namespaced_crate_names
712-
.get(root_name.as_str())
713-
.into_iter()
714-
.flatten()
715-
.find(|s| s.split("::").nth(1) == Some(ident.name.as_str()))
716-
};
717-
718-
let ns_crate_cand = try_find_namespaced_crate(&sym);
719-
match ns_crate_cand {
720-
Some(ns_cand) => {
721-
let ns_ident = IdentKey::with_root_ctxt(Symbol::intern(ns_cand));
722-
723-
match self.extern_prelude_get_flag(
724-
ns_ident,
725-
orig_ident_span,
726-
finalize.is_some(),
727-
) {
728-
Some(decl) => Ok(decl),
729-
None => Err(Determinacy::Determined),
730-
}
731-
}
732-
None => Err(Determinacy::Determined),
733-
}
734-
}
735689
Scope::MacroUsePrelude => match self.macro_use_prelude.get(&ident.name).cloned() {
736690
Some(decl) => Ok(decl),
737691
None => Err(Determinacy::determined(
@@ -1022,14 +976,14 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
1022976
ignore_import,
1023977
)
1024978
}
1025-
ModuleOrUniformRoot::VirtualNamespacedCrate(sym) => self.resolve_ident_in_scope_set(
1026-
ident,
1027-
ScopeSet::NamespacedCrate(ns, sym),
1028-
parent_scope,
1029-
finalize,
1030-
ignore_decl,
1031-
ignore_import,
1032-
),
979+
ModuleOrUniformRoot::OpenModule(sym) => {
980+
let open_ns_name = format!("{}::{}", sym.as_str(), ident.name);
981+
let ns_ident = IdentKey::with_root_ctxt(Symbol::intern(&open_ns_name));
982+
match self.extern_prelude_get_flag(ns_ident, ident.span, finalize.is_some()) {
983+
Some(decl) => Ok(decl),
984+
None => Err(Determinacy::Determined),
985+
}
986+
}
1033987
ModuleOrUniformRoot::ModuleAndExternPrelude(module) => self.resolve_ident_in_scope_set(
1034988
ident,
1035989
ScopeSet::ModuleAndExternPrelude(ns, module),
@@ -2016,8 +1970,8 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
20161970
}
20171971

20181972
let maybe_assoc = opt_ns != Some(MacroNS) && PathSource::Type.is_expected(res);
2019-
if let Res::VirtualMod(sym) = binding.res() {
2020-
module = Some(ModuleOrUniformRoot::VirtualNamespacedCrate(sym));
1973+
if let Res::OpenMod(sym) = binding.res() {
1974+
module = Some(ModuleOrUniformRoot::OpenModule(sym));
20211975
record_segment_res(self.reborrow(), finalize, res, id);
20221976
} else if let Some(def_id) = binding.res().module_like_def_id() {
20231977
if self.mods_with_parse_errors.contains(&def_id) {

0 commit comments

Comments
 (0)