Crate ra_ap_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.

Modules

  • AstIdMap allows to create stable IDs for “large” syntax nodes like items and macro calls.
  • A higher level attributes based on TokenTree, with also some shortcuts.
  • Builtin attributes.
  • Builtin derives.
  • Builtin macro
  • Defines database & queries for macro expansion.
  • Eager expansion related utils
  • This modules handles hygiene information.
  • A lowering for use-paths (more generally, paths without angle-bracketed segments).
  • See Name.
  • Proc Macro Expander stub
  • A simplified version of quote-crate like quasi quote macro

Macros

Structs

  • ExpansionInfo mainly describes how to map text range between src and expanded macro
  • Input to the analyzer is a set of files, where each file is identified by FileId and contains source code. However, another source of source code in Rust are macros: each macro can be thought of as producing a “temporary file”. To assign an id to such a file, we use the id of the macro call that produced the file. So, a HirFileId is either a FileId (source code written by user), or a MacroCallId (source code produced by macro).
  • InFile<T> stores a value of T inside a particular file/syntax tree.
  • MacroCallId identifies a particular macro invocation, like println!("Hello, {}", world).

Enums

  • 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.

Type Definitions