From ca4d84fc0157f230e25aa9fcbb1a22f1d06bc4c4 Mon Sep 17 00:00:00 2001 From: Denis Belik <71658215+dbelik@users.noreply.github.com> Date: Sun, 4 Dec 2022 20:29:30 +0200 Subject: [PATCH 1/2] Update ast-validation.md --- src/ast-validation.md | 37 ++++++++++++++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/src/ast-validation.md b/src/ast-validation.md index ff549ca62..0fc0203a3 100644 --- a/src/ast-validation.md +++ b/src/ast-validation.md @@ -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. From 823763c8d3c9828925b6327e0a8a1e98bfc5d29c Mon Sep 17 00:00:00 2001 From: Denis Belik <71658215+dbelik@users.noreply.github.com> Date: Sat, 10 Dec 2022 13:47:22 +0200 Subject: [PATCH 2/2] Apply suggestions from code review Co-authored-by: Tshepang Mbambo --- src/ast-validation.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/ast-validation.md b/src/ast-validation.md index 0fc0203a3..f3ac35e8a 100644 --- a/src/ast-validation.md +++ b/src/ast-validation.md @@ -1,7 +1,6 @@ # AST Validation -* [About](#about) -* [Validation](#validation) + ## About @@ -17,9 +16,9 @@ is done, the compiler runs the crate resolution pass. ## Validations -Validations are defined in `AstValidator` class, which +Validations are defined in `AstValidator` type, which itself is located in `rustc_ast_passes` crate. This -class implements various simple checks which emit errors +type implements various simple checks which emit errors when certain language rules are broken. In addition, `AstValidator` implements `Visitor` trait