Update ast-validation.md
This commit is contained in:
parent
e37b9440ed
commit
914b409125
|
|
@ -1,6 +1,37 @@
|
|||
# AST Validation
|
||||
|
||||
AST validation is the process of checking various correctness properties about
|
||||
the AST after macro expansion.
|
||||
* [About](#about)
|
||||
* [Validation](#validation)
|
||||
|
||||
**TODO**: write this chapter. [#656](https://github.com/rust-lang/rustc-dev-guide/issues/656)
|
||||
## About
|
||||
|
||||
_AST validation_ is a separate AST pass that visits each
|
||||
item in the tree and performs simple checks. This pass
|
||||
doesn't perform any complex analysis, type checking or
|
||||
name resolution.
|
||||
|
||||
Before performing any validation, the compiler first expands
|
||||
the macros. Then this pass performs validations to check
|
||||
that each AST item is in the correct state. And when this pass
|
||||
is done, the compiler runs the crate resolution pass.
|
||||
|
||||
## Validations
|
||||
|
||||
Validations are defined in `AstValidator` class, which
|
||||
itself is located in `rustc_ast_passes` crate. This
|
||||
class implements various simple checks which emit errors
|
||||
when certain language rules are broken.
|
||||
|
||||
In addition, `AstValidator` implements `Visitor` trait
|
||||
that defines how to visit AST items (which can be functions,
|
||||
traits, enums, etc).
|
||||
|
||||
For each item, visitor performs specific checks. For
|
||||
example, when visiting a function declaration,
|
||||
`AstValidator` checks that the function has:
|
||||
|
||||
* no more than `u16::MAX` parameters;
|
||||
* c-variadic functions are declared with at least one named argument;
|
||||
* c-variadic argument goes the last in the declaration;
|
||||
* documentation comments aren't applied to function parameters;
|
||||
* and other validations.
|
||||
|
|
|
|||
Loading…
Reference in New Issue