Skip to main content

Crate hir_expand

Crate hir_expand 

Source
Expand description

hir_expand deals with macro expansion.

Specifically, it implements a concept of MacroFile – a file whose syntax tree originates not from the text of some FileId, but from some macro expansion.

Re-exports§

pub use crate::files::AstId;
pub use crate::files::ErasedAstId;
pub use crate::files::FileRange;
pub use crate::files::InFile;
pub use crate::files::InMacroFile;
pub use crate::files::InRealFile;
pub use intern;
pub use tt;

Modules§

attrs
Defines the basics of attributes lowering.
builtin
Builtin macros and attributes
cfg_process 🔒
Processes out #[cfg] and #[cfg_attr] attributes from the input for the derive macro
change
Defines a unit of change that can applied to the database to get the next state. Changes are transactional.
declarative
Compiled declarative macro expanders (macro_rules! and macro)
eager
Eager expansion related utils
files
Things to wrap other things in file ids.
fixup 🔒
To make attribute macros work reliably when typing, we need to take care to fix up syntax errors in the code we’re passing to them.
hygiene
Machinery for hygienic macros.
inert_attr_macro
Builtin attributes resolved by nameres.
mod_path
A lowering for use-paths (more generally, paths without angle-bracketed segments).
name
See Name.
prettify_macro_expansion_ 🔒
Pretty printing of macros output.
proc_macro
Proc Macro Expander stuff
span_map
Span maps for real files and macro expansions.

Macros§

__known_path
__path
__tool_path
impl_intern_lookup
quote
FIXME: It probably should implement in proc-macro

Structs§

AttrMacroAttrIds
DeclarativeMacro
This struct contains AST for a single macro_rules definition. What might be very confusing is that AST has almost exactly the same shape as tt::TokenTree, but there’s a crucial difference: in macro rules, $ident and $()* have special meaning (see Var and Repeat data structures)
EagerCallInfo
EditionedFileId
ExpandError
ExpansionInfo
ExpansionInfo mainly describes how to map text range between src and expanded macro
MacroCallId
Macro ids. That’s probably the tricksiest bit in rust-analyzer, and the reason why we use salsa at all.
MacroCallLoc
MacroCallStyles
A set of MacroCallStyle values, allowing macros to indicate that they support more than one style.
MacroDefId
RenderedExpandError
ValueResult

Enums§

AttrMacroAttrIdsRepr 🔒
ExpandErrorKind
ExpandTo
In Rust, macros expand token trees to token trees. When we want to turn a token tree into an AST node, we need to figure out what kind of AST node we want: something like foo can be a type, an expression, or a pattern.
HirFileId
MacroCallKind
MacroCallStyle
MacroDefKind
MacroKind

Constants§

TOKEN_LIMIT 🔒
Total limit on the number of tokens produced by any macro invocation.

Traits§

Intern
Lookup

Functions§

check_tt_count 🔒
expand_unimplemented_builtin_macro 🔒
map_node_range_up
Maps up the text range out of the expansion hierarchy back into the original file its from.
map_node_range_up_rooted
Maps up the text range out of the expansion hierarchy back into the original file its from only considering the root spans contained. Unlike map_node_range_up, this will not return None if any anchors or syntax contexts differ.
prettify_macro_expansion
Inserts whitespace and replaces $crate in macro expansions.
proc_macro_span 🔒
Retrieves the span to be used for a proc-macro expansions spans. This is a firewall query as it requires parsing the file, which we don’t want proc-macros to directly depend on as that would cause to frequent invalidations, mainly because of the parse queries being LRU cached. If they weren’t the invalidations would only happen if the user wrote in the file that defines the proc-macro.
resolve_span
span_for_offset
Looks up the span at the given offset.
token_tree_to_syntax_node 🔒

Type Aliases§

ExpandResult
MacroArgResult 🔒
This is just to ensure the types of MacroCallId::macro_arg_considering_derives and MacroCallId::macro_arg are the same.