diff --git a/compiler/rustc_ast/src/ast.rs b/compiler/rustc_ast/src/ast.rs index e94e26a63bc..e09ba03d881 100644 --- a/compiler/rustc_ast/src/ast.rs +++ b/compiler/rustc_ast/src/ast.rs @@ -734,6 +734,8 @@ pub enum RangeSyntax { } /// All the different flavors of pattern that Rust recognizes. +// +// Adding a new variant? Please update `test_pat` in `tests/ui/macros/stringify.rs`. #[derive(Clone, Encodable, Decodable, Debug)] pub enum PatKind { /// Represents a wildcard pattern (`_`). @@ -967,6 +969,7 @@ impl Stmt { } } +// Adding a new variant? Please update `test_stmt` in `tests/ui/macros/stringify.rs`. #[derive(Clone, Encodable, Decodable, Debug)] pub enum StmtKind { /// A local (let) binding. @@ -1345,6 +1348,7 @@ pub struct StructExpr { pub rest: StructRest, } +// Adding a new variant? Please update `test_expr` in `tests/ui/macros/stringify.rs`. #[derive(Clone, Encodable, Decodable, Debug)] pub enum ExprKind { /// An array (`[a, b, c, d]`) @@ -2015,6 +2019,8 @@ pub struct BareFnTy { } /// The various kinds of type recognized by the compiler. +// +// Adding a new variant? Please update `test_ty` in `tests/ui/macros/stringify.rs`. #[derive(Clone, Encodable, Decodable, Debug)] pub enum TyKind { /// A variable-length slice (`[T]`). @@ -2880,6 +2886,7 @@ pub struct ConstItem { pub expr: Option>, } +// Adding a new variant? Please update `test_item` in `tests/ui/macros/stringify.rs`. #[derive(Clone, Encodable, Decodable, Debug)] pub enum ItemKind { /// An `extern crate` item, with the optional *original* crate name if the crate was renamed. diff --git a/tests/ui/macros/stringify.rs b/tests/ui/macros/stringify.rs index 939b4ce299f..0d23cfba7fd 100644 --- a/tests/ui/macros/stringify.rs +++ b/tests/ui/macros/stringify.rs @@ -2,17 +2,20 @@ // edition:2021 // compile-flags: --test +#![allow(incomplete_features)] #![feature(async_closure)] #![feature(auto_traits)] #![feature(box_patterns)] #![feature(const_trait_impl)] #![feature(decl_macro)] #![feature(coroutines)] +#![feature(explicit_tail_calls)] #![feature(more_qualified_paths)] #![feature(raw_ref_op)] #![feature(trait_alias)] #![feature(try_blocks)] #![feature(type_ascription)] +#![feature(yeet_expr)] #![deny(unused_macros)] // These macros force the use of AST pretty-printing by converting the input to @@ -79,6 +82,9 @@ fn test_expr() { c2!(expr, [ [true,] ], "[true]", "[true,]"); c1!(expr, [ [true, true] ], "[true, true]"); + // ExprKind::ConstBlock + // FIXME: todo + // ExprKind::Call c1!(expr, [ f() ], "f()"); c2!(expr, [ f::() ], "f::()", "f :: < u8 > ()"); @@ -116,8 +122,10 @@ fn test_expr() { c1!(expr, [ expr as T ], "expr as T"); c2!(expr, [ expr as T ], "expr as T", "expr as T < u8 >"); - // ExprKind::Type - // There is no syntax for type ascription. + // ExprKind::Type: there is no syntax for type ascription. + + // ExprKind::Let + c1!(expr, [ if let Some(a) = b { c } else { d } ], "if let Some(a) = b { c } else { d }"); // ExprKind::If c1!(expr, [ if true {} ], "if true {}"); @@ -265,6 +273,9 @@ fn test_expr() { c2!(expr, [ lo..=hi ], "lo..=hi", "lo ..= hi"); c2!(expr, [ -2..=-1 ], "-2..=-1", "- 2 ..= - 1"); + // ExprKind::Underscore + // FIXME: todo + // ExprKind::Path c1!(expr, [ thing ], "thing"); c2!(expr, [ m::thing ], "m::thing", "m :: thing"); @@ -294,6 +305,10 @@ fn test_expr() { c1!(expr, [ return ], "return"); c1!(expr, [ return true ], "return true"); + // ExprKind::InlineAsm: untestable because this test works pre-expansion. + + // ExprKind::OffsetOf: untestable because this test works pre-expansion. + // ExprKind::MacCall c2!(expr, [ mac!(...) ], "mac!(...)", "mac! (...)"); c2!(expr, [ mac![...] ], "mac![...]", "mac! [...]"); @@ -332,6 +347,20 @@ fn test_expr() { // ExprKind::Yield c1!(expr, [ yield ], "yield"); c1!(expr, [ yield true ], "yield true"); + + // ExprKind::Yeet + c1!(expr, [ do yeet ], "do yeet"); + c1!(expr, [ do yeet 0 ], "do yeet 0"); + + // ExprKind::Become + // FIXME: todo + + // ExprKind::IncludedBytes + // FIXME: todo + + // ExprKind::FormatArgs: untestable because this test works pre-expansion. + + // ExprKind::Err: untestable. } #[test] @@ -386,6 +415,8 @@ fn test_item() { "unsafe extern \"C++\" {}" ); + // ItemKind::GlobalAsm: untestable because this test works pre-expansion. + // ItemKind::TyAlias #[rustfmt::skip] c2!(item, @@ -641,6 +672,7 @@ fn test_stmt() { // StmtKind::Item c2!(stmt, [ struct S; ], "struct S;", "struct S ;"); + c1!(stmt, [ struct S {} ], "struct S {}"); // StmtKind::Expr c1!(stmt, [ loop {} ], "loop {}"); @@ -692,6 +724,10 @@ fn test_ty() { c1!(ty, [ (T,) ], "(T,)"); c1!(ty, [ (T, U) ], "(T, U)"); + // TyKind::AnonStruct: untestable in isolation. + + // TyKind::AnonUnion: untestable in isolation. + // TyKind::Path c1!(ty, [ T ], "T"); c2!(ty, [ Ref<'a> ], "Ref<'a>", "Ref < 'a >"); @@ -720,13 +756,22 @@ fn test_ty() { // TyKind::Paren c1!(ty, [ (T) ], "(T)"); + // TyKind::Typeof: unused for now. + // TyKind::Infer c1!(ty, [ _ ], "_"); + + // TyKind::ImplicitSelf: there is no syntax for this. // TyKind::MacCall c2!(ty, [ mac!(...) ], "mac!(...)", "mac! (...)"); c2!(ty, [ mac![...] ], "mac![...]", "mac! [...]"); c1!(ty, [ mac! { ... } ], "mac! { ... }"); + + // TyKind::Err: untestable. + + // TyKind::CVarArgs + // FIXME: todo } #[test]