Expand description
A simplified AST that only contains items.
This is the primary IR used throughout hir_def
. It is the input to the name resolution
algorithm, as well as to the queries defined in adt.rs
, data.rs
, and most things in
attr.rs
.
ItemTree
s are built per HirFileId
, from the syntax tree of the parsed file. This means that
they are crate-independent: they don’t know which #[cfg]
s are active or which module they
belong to, since those concepts don’t exist at this level (a single ItemTree
might be part of
multiple crates, or might be included into the same crate twice via #[path]
).
One important purpose of this layer is to provide an “invalidation barrier” for incremental
computations: when typing inside an item body, the ItemTree
of the modified file is typically
unaffected, so we don’t have to recompute name resolution results or item data (see data.rs
).
The ItemTree
for the currently open file can be displayed by using the VS Code command
“rust-analyzer: Debug ItemTree”.
Compared to rustc’s architecture, ItemTree
has properties from both rustc’s AST and HIR: many
syntax-level Rust features are already desugared to simpler forms in the ItemTree
, but name
resolution has not yet been performed. ItemTree
s are per-file, while rustc’s AST and HIR are
per-crate, because we are interested in incrementally computing it.
The representation of items in the ItemTree
should generally mirror the surface syntax: it is
usually a bad idea to desugar a syntax-level construct to something that is structurally
different here. Name resolution needs to be able to process attributes and expand macros
(including attribute macros), and having a 1-to-1 mapping between syntax and the ItemTree
avoids introducing subtle bugs.
In general, any item in the ItemTree
stores its AstId
, which allows mapping it back to its
surface syntax.
Structs§
- A single field of an enum variant or struct
- The item tree of a source file.
- “Macros 2.0” macro definition.
- Identifies a particular
ItemTree
.
Enums§
Traits§
- Trait implemented by all nodes in the item tree.