From 0e8170dde521c7a6035cd7de53b6a9773224ecbe Mon Sep 17 00:00:00 2001 From: rhysd Date: Wed, 6 Sep 2023 12:37:53 +0900 Subject: [PATCH] Fix checking if newline is needed before `else` in let-else statement (#5901) --- src/items.rs | 11 ++++++++++- tests/source/let_else.rs | 5 +++++ tests/target/let_else.rs | 7 +++++++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/items.rs b/src/items.rs index 4d82e192b7d..947a7c45f0e 100644 --- a/src/items.rs +++ b/src/items.rs @@ -127,8 +127,17 @@ impl Rewrite for ast::Local { if let Some(block) = else_block { let else_kw_span = init.span.between(block.span); + let init_str = if !attrs_str.is_empty() { + // Strip attributes to check if newline is needed before the else keyword from + // the initializer part. (#5901) + result + .strip_prefix(&attrs_str) + .map_or(result.as_str(), str::trim_start) + } else { + result.as_str() + }; let force_newline_else = pat_str.contains('\n') - || !same_line_else_kw_and_brace(&result, context, else_kw_span, nested_shape); + || !same_line_else_kw_and_brace(init_str, context, else_kw_span, nested_shape); let else_kw = rewrite_else_kw_with_comments( force_newline_else, true, diff --git a/tests/source/let_else.rs b/tests/source/let_else.rs index 85b3604ad3c..0be526281be 100644 --- a/tests/source/let_else.rs +++ b/tests/source/let_else.rs @@ -160,3 +160,8 @@ fn with_trailing_try_operator() { // Maybe this is a workaround? let Ok(Some(next_bucket)) = ranking_rules[cur_ranking_rule_index].next_bucket(ctx, logger, &ranking_rule_universes[cur_ranking_rule_index]) else { return }; } + +fn issue5901() { + #[cfg(target_os = "linux")] + let Some(x) = foo() else { return; }; +} diff --git a/tests/target/let_else.rs b/tests/target/let_else.rs index 6554a0961c0..d9a1cf8c5d4 100644 --- a/tests/target/let_else.rs +++ b/tests/target/let_else.rs @@ -252,3 +252,10 @@ fn with_trailing_try_operator() { return; }; } + +fn issue5901() { + #[cfg(target_os = "linux")] + let Some(x) = foo() else { + return; + }; +}