Crate rustc_resolve

source Β·
Expand description

This crate is responsible for the part of name resolution that doesn’t require type checker.

Module structure of the crate is built here. Paths in macros, imports, expressions, types, patterns are resolved here. Label and lifetime names are resolved here as well.

Type-relative name resolution (methods, fields, associated items) happens in rustc_hir_analysis.

Modules§

  • After we obtain a fresh AST fragment from a macro, code in this module helps to integrate that fragment into the module structures that are already partially built.
  • check_unused πŸ”’
  • def_collector πŸ”’
  • diagnostics πŸ”’
  • errors πŸ”’
  • ident πŸ”’
  • imports πŸ”’
    A bunch of methods and structures more or less related to resolving imports.
  • late πŸ”’
    β€œLate resolution” is the pass that resolves most of names in a crate beside imports and macros. It runs when the crate is fully expanded and its module structure is fully built. So it just walks through the crate and resolves all the expressions, types, etc.
  • macros πŸ”’
    A bunch of methods and structures more or less related to resolving macros and interface provided by Resolver to macro expander.

Structs§

  • AmbiguityError πŸ”’
  • BindingError πŸ”’
  • BindingKey πŸ”’
    A key that identifies a binding in a given Module.
  • DeriveData πŸ”’
  • Finalize πŸ”’
  • MacroData πŸ”’
  • Module πŸ”’
    All modules are unique and allocated on a same arena, so we can use referential equality to compare them.
  • ModuleData πŸ”’
    One node in the tree of modules.
  • NameBindingData πŸ”’
    Records a possibly-private value, type, or module definition.
  • ParentScope πŸ”’
    Everything you need to know about a name’s location to resolve it. Serves as a starting point for the scope visitor. This struct is currently used only for early resolution (imports and macros), but not for late resolution yet.
  • PrivacyError πŸ”’
  • The main resolver class.
  • Nothing really interesting here; it just provides memory for the rest of the crate.
  • Segment πŸ”’
    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.
  • UseError πŸ”’

Enums§

  • Miscellaneous bits of metadata for better ambiguity error reporting.
  • AmbiguityKind πŸ”’
  • Used for better errors for E0773
  • Determinacy πŸ”’
  • ImplTraitContext πŸ”’
  • An intermediate resolution result.
  • ModuleKind πŸ”’
  • NameBindingKind πŸ”’
  • PathResult πŸ”’
  • ResolutionError πŸ”’
  • Scope πŸ”’
    A specific scope in which a name can be looked up. This enum is currently used only for early resolution (imports and macros), but not for late resolution yet.
  • ScopeSet πŸ”’
    Names from different contexts may want to visit different subsets of all specific scopes with different restrictions when looking up the resolution. This enum is currently used only for early resolution (imports and macros), but not for late resolution yet.
  • Used πŸ”’
    Used for tracking import use types which will be used for redundant import checking.
  • Weak πŸ”’

Statics§

  • Raw content of Fluent resource for this crate, generated by fluent_messages macro, imported by rustc_driver to include all crates’ resources in one bundle.

Traits§

Functions§

Type Aliases§

  • NameBinding πŸ”’
    All name bindings are unique and allocated on a same arena, so we can use referential equality to compare them.
  • Res πŸ”’
  • Resolutions πŸ”’