From 68854b798ebda70014985d26722e7f6820254658 Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Sun, 12 May 2024 13:24:36 -0700 Subject: Add AST pretty-printer tests for let-else --- tests/ui/macros/stringify.rs | 15 +++++++++++++++ tests/ui/unpretty/let-else-hir.rs | 10 ++++++++++ tests/ui/unpretty/let-else-hir.stdout | 18 ++++++++++++++++++ tests/ui/unpretty/let-else.rs | 11 +++++++++++ tests/ui/unpretty/let-else.stdout | 15 +++++++++++++++ tests/ui/unpretty/pretty-let-else.rs | 10 ---------- tests/ui/unpretty/pretty-let-else.stdout | 18 ------------------ 7 files changed, 69 insertions(+), 28 deletions(-) create mode 100644 tests/ui/unpretty/let-else-hir.rs create mode 100644 tests/ui/unpretty/let-else-hir.stdout create mode 100644 tests/ui/unpretty/let-else.rs create mode 100644 tests/ui/unpretty/let-else.stdout delete mode 100644 tests/ui/unpretty/pretty-let-else.rs delete mode 100644 tests/ui/unpretty/pretty-let-else.stdout diff --git a/tests/ui/macros/stringify.rs b/tests/ui/macros/stringify.rs index 472cb4d417b..6b215ba525d 100644 --- a/tests/ui/macros/stringify.rs +++ b/tests/ui/macros/stringify.rs @@ -675,6 +675,11 @@ fn test_stmt() { "let (a, b): (u32, u32) = (1, 2);", "let (a, b): (u32, u32) = (1, 2)" ); + c2!(stmt, + [ let _ = f() else { return; } ], + "let _ = f() else { return; };", + "let _ = f() else { return; }", + ); macro_rules! c2_let_expr_minus_one { ([ $expr:expr ], $stmt_expected:expr, $tokens_expected:expr $(,)?) => { c2!(stmt, [ let _ = $expr - 1 ], $stmt_expected, $tokens_expected); @@ -685,6 +690,16 @@ fn test_stmt() { "let _ = match void {} - 1;", "let _ = match void {} - 1", ); + macro_rules! c2_let_expr_else_return { + ([ $expr:expr ], $stmt_expected:expr, $tokens_expected:expr $(,)?) => { + c2!(stmt, [ let _ = $expr else { return; } ], $stmt_expected, $tokens_expected); + }; + } + c2_let_expr_else_return!( + [ f() ], + "let _ = f() else { return; };", + "let _ = f() else { return; }", + ); // StmtKind::Item c1!(stmt, [ struct S; ], "struct S;"); diff --git a/tests/ui/unpretty/let-else-hir.rs b/tests/ui/unpretty/let-else-hir.rs new file mode 100644 index 00000000000..9c231189659 --- /dev/null +++ b/tests/ui/unpretty/let-else-hir.rs @@ -0,0 +1,10 @@ +//@ compile-flags: -Zunpretty=hir +//@ check-pass + + + +fn foo(x: Option) { + let Some(_) = x else { panic!() }; +} + +fn main() {} diff --git a/tests/ui/unpretty/let-else-hir.stdout b/tests/ui/unpretty/let-else-hir.stdout new file mode 100644 index 00000000000..ed55f293876 --- /dev/null +++ b/tests/ui/unpretty/let-else-hir.stdout @@ -0,0 +1,18 @@ +#[prelude_import] +use ::std::prelude::rust_2015::*; +#[macro_use] +extern crate std; +//@ compile-flags: -Zunpretty=hir +//@ check-pass + + + +fn foo(x: + Option) { + let Some(_) = x else + { + + { ::std::rt::begin_panic("explicit panic") } + }; + } +fn main() { } diff --git a/tests/ui/unpretty/let-else.rs b/tests/ui/unpretty/let-else.rs new file mode 100644 index 00000000000..4db6eca99b1 --- /dev/null +++ b/tests/ui/unpretty/let-else.rs @@ -0,0 +1,11 @@ +//@ compile-flags: -Zunpretty=expanded +//@ check-pass + +macro_rules! expr { + ($e:expr) => { $e }; +} + +fn main() { + let _ = expr!(1 + 1) else { return; }; + let _ = expr!(loop {}) else { return; }; +} diff --git a/tests/ui/unpretty/let-else.stdout b/tests/ui/unpretty/let-else.stdout new file mode 100644 index 00000000000..5f6972cd429 --- /dev/null +++ b/tests/ui/unpretty/let-else.stdout @@ -0,0 +1,15 @@ +#![feature(prelude_import)] +#![no_std] +#[prelude_import] +use ::std::prelude::rust_2015::*; +#[macro_use] +extern crate std; +//@ compile-flags: -Zunpretty=expanded +//@ check-pass + +macro_rules! expr { ($e:expr) => { $e }; } + +fn main() { + let _ = 1 + 1 else { return; }; + let _ = loop {} else { return; }; +} diff --git a/tests/ui/unpretty/pretty-let-else.rs b/tests/ui/unpretty/pretty-let-else.rs deleted file mode 100644 index 9c231189659..00000000000 --- a/tests/ui/unpretty/pretty-let-else.rs +++ /dev/null @@ -1,10 +0,0 @@ -//@ compile-flags: -Zunpretty=hir -//@ check-pass - - - -fn foo(x: Option) { - let Some(_) = x else { panic!() }; -} - -fn main() {} diff --git a/tests/ui/unpretty/pretty-let-else.stdout b/tests/ui/unpretty/pretty-let-else.stdout deleted file mode 100644 index ed55f293876..00000000000 --- a/tests/ui/unpretty/pretty-let-else.stdout +++ /dev/null @@ -1,18 +0,0 @@ -#[prelude_import] -use ::std::prelude::rust_2015::*; -#[macro_use] -extern crate std; -//@ compile-flags: -Zunpretty=hir -//@ check-pass - - - -fn foo(x: - Option) { - let Some(_) = x else - { - - { ::std::rt::begin_panic("explicit panic") } - }; - } -fn main() { } -- cgit 1.4.1-3-g733a5 From 94cc82c088b9301dc4dcf84ce127a64bbd77dddf Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Sun, 12 May 2024 13:39:43 -0700 Subject: Pretty-print let-else with added parenthesization when needed --- compiler/rustc_ast_pretty/src/pprust/state.rs | 6 +++++- tests/ui/unpretty/let-else.stdout | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/compiler/rustc_ast_pretty/src/pprust/state.rs b/compiler/rustc_ast_pretty/src/pprust/state.rs index 2c176828c84..b7bdb2e14a6 100644 --- a/compiler/rustc_ast_pretty/src/pprust/state.rs +++ b/compiler/rustc_ast_pretty/src/pprust/state.rs @@ -1238,7 +1238,11 @@ impl<'a> State<'a> { if let Some((init, els)) = loc.kind.init_else_opt() { self.nbsp(); self.word_space("="); - self.print_expr(init, FixupContext::default()); + self.print_expr_cond_paren( + init, + els.is_some() && classify::expr_trailing_brace(init).is_some(), + FixupContext::default(), + ); if let Some(els) = els { self.cbox(INDENT_UNIT); self.ibox(INDENT_UNIT); diff --git a/tests/ui/unpretty/let-else.stdout b/tests/ui/unpretty/let-else.stdout index 5f6972cd429..4bc4d9e085f 100644 --- a/tests/ui/unpretty/let-else.stdout +++ b/tests/ui/unpretty/let-else.stdout @@ -11,5 +11,5 @@ macro_rules! expr { ($e:expr) => { $e }; } fn main() { let _ = 1 + 1 else { return; }; - let _ = loop {} else { return; }; + let _ = (loop {}) else { return; }; } -- cgit 1.4.1-3-g733a5