rustdoc: Eliminate remaining uses of resolver
This commit is contained in:
parent
00cf19a75a
commit
9080b79f2b
18 changed files with 85 additions and 247 deletions
|
@ -1251,6 +1251,7 @@ impl<'a, 'b> BuildReducedGraphVisitor<'a, 'b> {
|
|||
};
|
||||
let binding = (res, vis, span, expansion).to_name_binding(self.r.arenas);
|
||||
self.r.set_binding_parent_module(binding, parent_scope.module);
|
||||
self.r.all_macro_rules.insert(ident.name, res);
|
||||
if is_macro_export {
|
||||
let import = self.r.arenas.alloc_import(Import {
|
||||
kind: ImportKind::MacroExport,
|
||||
|
|
|
@ -29,7 +29,7 @@ impl ParentId<'_> {
|
|||
}
|
||||
}
|
||||
|
||||
pub struct EffectiveVisibilitiesVisitor<'r, 'a> {
|
||||
pub(crate) struct EffectiveVisibilitiesVisitor<'r, 'a> {
|
||||
r: &'r mut Resolver<'a>,
|
||||
def_effective_visibilities: EffectiveVisibilities,
|
||||
/// While walking import chains we need to track effective visibilities per-binding, and def id
|
||||
|
@ -78,7 +78,7 @@ impl<'r, 'a> EffectiveVisibilitiesVisitor<'r, 'a> {
|
|||
/// Fills the `Resolver::effective_visibilities` table with public & exported items
|
||||
/// For now, this doesn't resolve macros (FIXME) and cannot resolve Impl, as we
|
||||
/// need access to a TyCtxt for that.
|
||||
pub fn compute_effective_visibilities<'c>(r: &'r mut Resolver<'a>, krate: &'c Crate) {
|
||||
pub(crate) fn compute_effective_visibilities<'c>(r: &'r mut Resolver<'a>, krate: &'c Crate) {
|
||||
let mut visitor = EffectiveVisibilitiesVisitor {
|
||||
r,
|
||||
def_effective_visibilities: Default::default(),
|
||||
|
|
|
@ -33,7 +33,7 @@ type Res = def::Res<NodeId>;
|
|||
|
||||
/// Contains data for specific kinds of imports.
|
||||
#[derive(Clone)]
|
||||
pub enum ImportKind<'a> {
|
||||
pub(crate) enum ImportKind<'a> {
|
||||
Single {
|
||||
/// `source` in `use prefix::source as target`.
|
||||
source: Ident,
|
||||
|
@ -157,11 +157,11 @@ pub(crate) struct Import<'a> {
|
|||
}
|
||||
|
||||
impl<'a> Import<'a> {
|
||||
pub fn is_glob(&self) -> bool {
|
||||
pub(crate) fn is_glob(&self) -> bool {
|
||||
matches!(self.kind, ImportKind::Glob { .. })
|
||||
}
|
||||
|
||||
pub fn is_nested(&self) -> bool {
|
||||
pub(crate) fn is_nested(&self) -> bool {
|
||||
match self.kind {
|
||||
ImportKind::Single { nested, .. } => nested,
|
||||
_ => false,
|
||||
|
@ -405,7 +405,7 @@ struct UnresolvedImportError {
|
|||
candidates: Option<Vec<ImportSuggestion>>,
|
||||
}
|
||||
|
||||
pub struct ImportResolver<'a, 'b> {
|
||||
pub(crate) struct ImportResolver<'a, 'b> {
|
||||
pub r: &'a mut Resolver<'b>,
|
||||
}
|
||||
|
||||
|
@ -420,7 +420,7 @@ impl<'a, 'b> ImportResolver<'a, 'b> {
|
|||
|
||||
/// Resolves all imports for the crate. This method performs the fixed-
|
||||
/// point iteration.
|
||||
pub fn resolve_imports(&mut self) {
|
||||
pub(crate) fn resolve_imports(&mut self) {
|
||||
let mut prev_num_indeterminates = self.r.indeterminate_imports.len() + 1;
|
||||
while self.r.indeterminate_imports.len() < prev_num_indeterminates {
|
||||
prev_num_indeterminates = self.r.indeterminate_imports.len();
|
||||
|
@ -433,7 +433,7 @@ impl<'a, 'b> ImportResolver<'a, 'b> {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn finalize_imports(&mut self) {
|
||||
pub(crate) fn finalize_imports(&mut self) {
|
||||
for module in self.r.arenas.local_modules().iter() {
|
||||
self.finalize_resolutions_in(module);
|
||||
}
|
||||
|
|
|
@ -56,7 +56,7 @@ struct BindingInfo {
|
|||
}
|
||||
|
||||
#[derive(Copy, Clone, PartialEq, Eq, Debug)]
|
||||
pub enum PatternSource {
|
||||
pub(crate) enum PatternSource {
|
||||
Match,
|
||||
Let,
|
||||
For,
|
||||
|
@ -70,7 +70,7 @@ enum IsRepeatExpr {
|
|||
}
|
||||
|
||||
impl PatternSource {
|
||||
pub fn descr(self) -> &'static str {
|
||||
fn descr(self) -> &'static str {
|
||||
match self {
|
||||
PatternSource::Match => "match binding",
|
||||
PatternSource::Let => "let binding",
|
||||
|
@ -2374,9 +2374,8 @@ impl<'a: 'ast, 'b, 'ast> LateResolutionVisitor<'a, 'b, 'ast> {
|
|||
// Maintain macro_rules scopes in the same way as during early resolution
|
||||
// for diagnostics and doc links.
|
||||
if macro_def.macro_rules {
|
||||
let (macro_rules_scope, _) =
|
||||
self.r.macro_rules_scope(self.r.local_def_id(item.id));
|
||||
self.parent_scope.macro_rules = macro_rules_scope;
|
||||
let def_id = self.r.local_def_id(item.id);
|
||||
self.parent_scope.macro_rules = self.r.macro_rules_scopes[&def_id];
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2626,7 +2626,7 @@ impl<'a: 'ast, 'ast> LateResolutionVisitor<'a, '_, 'ast> {
|
|||
}
|
||||
|
||||
/// Report lifetime/lifetime shadowing as an error.
|
||||
pub fn signal_lifetime_shadowing(sess: &Session, orig: Ident, shadower: Ident) {
|
||||
pub(super) fn signal_lifetime_shadowing(sess: &Session, orig: Ident, shadower: Ident) {
|
||||
let mut err = struct_span_err!(
|
||||
sess,
|
||||
shadower.span,
|
||||
|
@ -2641,7 +2641,7 @@ pub fn signal_lifetime_shadowing(sess: &Session, orig: Ident, shadower: Ident) {
|
|||
|
||||
/// Shadowing involving a label is only a warning for historical reasons.
|
||||
//FIXME: make this a proper lint.
|
||||
pub fn signal_label_shadowing(sess: &Session, orig: Span, shadower: Ident) {
|
||||
pub(super) fn signal_label_shadowing(sess: &Session, orig: Span, shadower: Ident) {
|
||||
let name = shadower.name;
|
||||
let shadower = shadower.span;
|
||||
let mut err = sess.struct_span_warn(
|
||||
|
|
|
@ -21,8 +21,6 @@
|
|||
#[macro_use]
|
||||
extern crate tracing;
|
||||
|
||||
pub use rustc_hir::def::{Namespace, PerNS};
|
||||
|
||||
use rustc_arena::{DroplessArena, TypedArena};
|
||||
use rustc_ast::node_id::NodeMap;
|
||||
use rustc_ast::{self as ast, NodeId, CRATE_NODE_ID};
|
||||
|
@ -32,8 +30,8 @@ use rustc_data_structures::intern::Interned;
|
|||
use rustc_data_structures::sync::{Lrc, RwLock};
|
||||
use rustc_errors::{Applicability, DiagnosticBuilder, ErrorGuaranteed};
|
||||
use rustc_expand::base::{DeriveResolutions, SyntaxExtension, SyntaxExtensionKind};
|
||||
use rustc_hir::def::Namespace::*;
|
||||
use rustc_hir::def::{self, CtorOf, DefKind, DocLinkResMap, LifetimeRes, PartialRes};
|
||||
use rustc_hir::def::Namespace::{self, *};
|
||||
use rustc_hir::def::{self, CtorOf, DefKind, DocLinkResMap, LifetimeRes, PartialRes, PerNS};
|
||||
use rustc_hir::def_id::{CrateNum, DefId, DefIdMap, LocalDefId};
|
||||
use rustc_hir::def_id::{CRATE_DEF_ID, LOCAL_CRATE};
|
||||
use rustc_hir::definitions::{DefPathData, Definitions};
|
||||
|
@ -86,7 +84,7 @@ enum Weak {
|
|||
}
|
||||
|
||||
#[derive(Copy, Clone, PartialEq, Debug)]
|
||||
pub enum Determinacy {
|
||||
enum Determinacy {
|
||||
Determined,
|
||||
Undetermined,
|
||||
}
|
||||
|
@ -257,7 +255,7 @@ enum VisResolutionError<'a> {
|
|||
/// A minimal representation of a path segment. We use this in resolve because we synthesize 'path
|
||||
/// segments' which don't have the rest of an AST or HIR `PathSegment`.
|
||||
#[derive(Clone, Copy, Debug)]
|
||||
pub struct Segment {
|
||||
struct Segment {
|
||||
ident: Ident,
|
||||
id: Option<NodeId>,
|
||||
/// Signals whether this `PathSegment` has generic arguments. Used to avoid providing
|
||||
|
@ -435,7 +433,7 @@ enum ModuleKind {
|
|||
|
||||
impl ModuleKind {
|
||||
/// Get name of the module.
|
||||
pub fn name(&self) -> Option<Symbol> {
|
||||
fn name(&self) -> Option<Symbol> {
|
||||
match self {
|
||||
ModuleKind::Block => None,
|
||||
ModuleKind::Def(.., name) => Some(*name),
|
||||
|
@ -471,7 +469,7 @@ type Resolutions<'a> = RefCell<FxIndexMap<BindingKey, &'a RefCell<NameResolution
|
|||
/// * curly-braced block with statements
|
||||
///
|
||||
/// You can use [`ModuleData::kind`] to determine the kind of module this is.
|
||||
pub struct ModuleData<'a> {
|
||||
struct ModuleData<'a> {
|
||||
/// The direct parent module (it may not be a `mod`, however).
|
||||
parent: Option<Module<'a>>,
|
||||
/// What kind of module this is, because this may not be a `mod`.
|
||||
|
@ -570,7 +568,7 @@ impl<'a> ModuleData<'a> {
|
|||
}
|
||||
|
||||
// Public for rustdoc.
|
||||
pub fn def_id(&self) -> DefId {
|
||||
fn def_id(&self) -> DefId {
|
||||
self.opt_def_id().expect("`ModuleData::def_id` is called on a block module")
|
||||
}
|
||||
|
||||
|
@ -628,7 +626,7 @@ impl<'a> fmt::Debug for ModuleData<'a> {
|
|||
|
||||
/// Records a possibly-private value, type, or module definition.
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct NameBinding<'a> {
|
||||
struct NameBinding<'a> {
|
||||
kind: NameBindingKind<'a>,
|
||||
ambiguity: Option<(&'a NameBinding<'a>, AmbiguityKind)>,
|
||||
expansion: LocalExpnId,
|
||||
|
@ -636,7 +634,7 @@ pub struct NameBinding<'a> {
|
|||
vis: ty::Visibility<DefId>,
|
||||
}
|
||||
|
||||
pub trait ToNameBinding<'a> {
|
||||
trait ToNameBinding<'a> {
|
||||
fn to_name_binding(self, arenas: &'a ResolverArenas<'a>) -> &'a NameBinding<'a>;
|
||||
}
|
||||
|
||||
|
@ -840,9 +838,9 @@ impl<'a> NameBinding<'a> {
|
|||
}
|
||||
|
||||
#[derive(Default, Clone)]
|
||||
pub struct ExternPreludeEntry<'a> {
|
||||
struct ExternPreludeEntry<'a> {
|
||||
extern_crate_item: Option<&'a NameBinding<'a>>,
|
||||
pub introduced_by_item: bool,
|
||||
introduced_by_item: bool,
|
||||
}
|
||||
|
||||
/// Used for better errors for E0773
|
||||
|
@ -1049,6 +1047,7 @@ pub struct Resolver<'a> {
|
|||
effective_visibilities: EffectiveVisibilities,
|
||||
doc_link_resolutions: FxHashMap<LocalDefId, DocLinkResMap>,
|
||||
doc_link_traits_in_scope: FxHashMap<LocalDefId, Vec<DefId>>,
|
||||
all_macro_rules: FxHashMap<Symbol, Res>,
|
||||
}
|
||||
|
||||
/// Nothing really interesting here; it just provides memory for the rest of the crate.
|
||||
|
@ -1147,7 +1146,7 @@ impl<'a> Resolver<'a> {
|
|||
self.node_id_to_def_id.get(&node).copied()
|
||||
}
|
||||
|
||||
pub fn local_def_id(&self, node: NodeId) -> LocalDefId {
|
||||
fn local_def_id(&self, node: NodeId) -> LocalDefId {
|
||||
self.opt_local_def_id(node).unwrap_or_else(|| panic!("no entry for node id: `{:?}`", node))
|
||||
}
|
||||
|
||||
|
@ -1199,10 +1198,6 @@ impl<'a> Resolver<'a> {
|
|||
self.cstore().item_generics_num_lifetimes(def_id, self.session)
|
||||
}
|
||||
}
|
||||
|
||||
pub fn sess(&self) -> &'a Session {
|
||||
self.session
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> Resolver<'a> {
|
||||
|
@ -1379,6 +1374,7 @@ impl<'a> Resolver<'a> {
|
|||
effective_visibilities: Default::default(),
|
||||
doc_link_resolutions: Default::default(),
|
||||
doc_link_traits_in_scope: Default::default(),
|
||||
all_macro_rules: Default::default(),
|
||||
};
|
||||
|
||||
let root_parent_scope = ParentScope::module(graph_root, &resolver);
|
||||
|
@ -1399,14 +1395,14 @@ impl<'a> Resolver<'a> {
|
|||
self.arenas.new_module(parent, kind, expn_id, span, no_implicit_prelude, module_map)
|
||||
}
|
||||
|
||||
pub fn next_node_id(&mut self) -> NodeId {
|
||||
fn next_node_id(&mut self) -> NodeId {
|
||||
let start = self.next_node_id;
|
||||
let next = start.as_u32().checked_add(1).expect("input too large; ran out of NodeIds");
|
||||
self.next_node_id = ast::NodeId::from_u32(next);
|
||||
start
|
||||
}
|
||||
|
||||
pub fn next_node_ids(&mut self, count: usize) -> std::ops::Range<NodeId> {
|
||||
fn next_node_ids(&mut self, count: usize) -> std::ops::Range<NodeId> {
|
||||
let start = self.next_node_id;
|
||||
let end = start.as_usize().checked_add(count).expect("input too large; ran out of NodeIds");
|
||||
self.next_node_id = ast::NodeId::from_usize(end);
|
||||
|
@ -1457,6 +1453,7 @@ impl<'a> Resolver<'a> {
|
|||
registered_tools: self.registered_tools,
|
||||
doc_link_resolutions: self.doc_link_resolutions,
|
||||
doc_link_traits_in_scope: self.doc_link_traits_in_scope,
|
||||
all_macro_rules: self.all_macro_rules,
|
||||
};
|
||||
let ast_lowering = ty::ResolverAstLowering {
|
||||
legacy_const_generic_args: self.legacy_const_generic_args,
|
||||
|
@ -1503,6 +1500,7 @@ impl<'a> Resolver<'a> {
|
|||
effective_visibilities: self.effective_visibilities.clone(),
|
||||
doc_link_resolutions: self.doc_link_resolutions.clone(),
|
||||
doc_link_traits_in_scope: self.doc_link_traits_in_scope.clone(),
|
||||
all_macro_rules: self.all_macro_rules.clone(),
|
||||
};
|
||||
let ast_lowering = ty::ResolverAstLowering {
|
||||
legacy_const_generic_args: self.legacy_const_generic_args.clone(),
|
||||
|
@ -1525,7 +1523,7 @@ impl<'a> Resolver<'a> {
|
|||
StableHashingContext::new(self.session, &self.untracked)
|
||||
}
|
||||
|
||||
pub fn crate_loader(&mut self) -> CrateLoader<'_> {
|
||||
fn crate_loader(&mut self) -> CrateLoader<'_> {
|
||||
CrateLoader::new(
|
||||
&self.session,
|
||||
&*self.metadata_loader,
|
||||
|
@ -1536,7 +1534,7 @@ impl<'a> Resolver<'a> {
|
|||
)
|
||||
}
|
||||
|
||||
pub fn cstore(&self) -> &CStore {
|
||||
fn cstore(&self) -> &CStore {
|
||||
self.untracked.cstore.as_any().downcast_ref().unwrap()
|
||||
}
|
||||
|
||||
|
@ -1968,24 +1966,15 @@ impl<'a> Resolver<'a> {
|
|||
}
|
||||
}
|
||||
|
||||
/// For rustdoc.
|
||||
pub fn macro_rules_scope(&self, def_id: LocalDefId) -> (MacroRulesScopeRef<'a>, Res) {
|
||||
let scope = *self.macro_rules_scopes.get(&def_id).expect("not a `macro_rules` item");
|
||||
match scope.get() {
|
||||
MacroRulesScope::Binding(mb) => (scope, mb.binding.res()),
|
||||
_ => unreachable!(),
|
||||
}
|
||||
}
|
||||
|
||||
/// Retrieves the span of the given `DefId` if `DefId` is in the local crate.
|
||||
#[inline]
|
||||
pub fn opt_span(&self, def_id: DefId) -> Option<Span> {
|
||||
fn opt_span(&self, def_id: DefId) -> Option<Span> {
|
||||
def_id.as_local().map(|def_id| self.untracked.source_span[def_id])
|
||||
}
|
||||
|
||||
/// Retrieves the name of the given `DefId`.
|
||||
#[inline]
|
||||
pub fn opt_name(&self, def_id: DefId) -> Option<Symbol> {
|
||||
fn opt_name(&self, def_id: DefId) -> Option<Symbol> {
|
||||
let def_key = match def_id.as_local() {
|
||||
Some(def_id) => self.untracked.definitions.read().def_key(def_id),
|
||||
None => self.cstore().def_key(def_id),
|
||||
|
@ -1996,7 +1985,7 @@ impl<'a> Resolver<'a> {
|
|||
/// Checks if an expression refers to a function marked with
|
||||
/// `#[rustc_legacy_const_generics]` and returns the argument index list
|
||||
/// from the attribute.
|
||||
pub fn legacy_const_generic_args(&mut self, expr: &Expr) -> Option<Vec<usize>> {
|
||||
fn legacy_const_generic_args(&mut self, expr: &Expr) -> Option<Vec<usize>> {
|
||||
if let ExprKind::Path(None, path) = &expr.kind {
|
||||
// Don't perform legacy const generics rewriting if the path already
|
||||
// has generic arguments.
|
||||
|
|
|
@ -39,7 +39,7 @@ type Res = def::Res<NodeId>;
|
|||
/// Binding produced by a `macro_rules` item.
|
||||
/// Not modularized, can shadow previous `macro_rules` bindings, etc.
|
||||
#[derive(Debug)]
|
||||
pub struct MacroRulesBinding<'a> {
|
||||
pub(crate) struct MacroRulesBinding<'a> {
|
||||
pub(crate) binding: &'a NameBinding<'a>,
|
||||
/// `macro_rules` scope into which the `macro_rules` item was planted.
|
||||
pub(crate) parent_macro_rules_scope: MacroRulesScopeRef<'a>,
|
||||
|
@ -52,7 +52,7 @@ pub struct MacroRulesBinding<'a> {
|
|||
/// Some macro invocations need to introduce `macro_rules` scopes too because they
|
||||
/// can potentially expand into macro definitions.
|
||||
#[derive(Copy, Clone, Debug)]
|
||||
pub enum MacroRulesScope<'a> {
|
||||
pub(crate) enum MacroRulesScope<'a> {
|
||||
/// Empty "root" scope at the crate start containing no names.
|
||||
Empty,
|
||||
/// The scope introduced by a `macro_rules!` macro definition.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue