summaryrefslogtreecommitdiffstats
path: root/src/doc/rustc-dev-guide/src/ast-validation.md
diff options
context:
space:
mode:
Diffstat (limited to 'src/doc/rustc-dev-guide/src/ast-validation.md')
-rw-r--r--src/doc/rustc-dev-guide/src/ast-validation.md36
1 files changed, 33 insertions, 3 deletions
diff --git a/src/doc/rustc-dev-guide/src/ast-validation.md b/src/doc/rustc-dev-guide/src/ast-validation.md
index ff549ca62..f3ac35e8a 100644
--- a/src/doc/rustc-dev-guide/src/ast-validation.md
+++ b/src/doc/rustc-dev-guide/src/ast-validation.md
@@ -1,6 +1,36 @@
# AST Validation
-AST validation is the process of checking various correctness properties about
-the AST after macro expansion.
+<!-- toc -->
-**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` type, which
+itself is located in `rustc_ast_passes` crate. This
+type 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.