mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-12-28 14:03:35 +00:00
Merge #2329
2329: fix 2190; add test for "replace if let with match" r=matklad a=fkohlgrueber Fixes #2190. Check that the expression doesn't contain newlines only for "replace if let with match". For "join lines", enclosing blocks for multiline expressions should be removed. Co-authored-by: Felix Kohlgrüber <felix.kohlgrueber@gmail.com>
This commit is contained in:
commit
5aec3e4a7b
3 changed files with 58 additions and 5 deletions
|
@ -66,8 +66,8 @@ fn build_match_expr(
|
|||
|
||||
fn format_arm(block: &ast::BlockExpr) -> String {
|
||||
match extract_trivial_expression(block) {
|
||||
None => block.syntax().text().to_string(),
|
||||
Some(e) => format!("{},", e.syntax().text()),
|
||||
Some(e) if !e.syntax().text().contains_char('\n') => format!("{},", e.syntax().text()),
|
||||
_ => block.syntax().text().to_string(),
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -102,6 +102,34 @@ impl VariantData {
|
|||
)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_replace_if_let_with_match_doesnt_unwrap_multiline_expressions() {
|
||||
check_assist(
|
||||
replace_if_let_with_match,
|
||||
"
|
||||
fn foo() {
|
||||
if <|>let VariantData::Struct(..) = a {
|
||||
bar(
|
||||
123
|
||||
)
|
||||
} else {
|
||||
false
|
||||
}
|
||||
} ",
|
||||
"
|
||||
fn foo() {
|
||||
<|>match a {
|
||||
VariantData::Struct(..) => {
|
||||
bar(
|
||||
123
|
||||
)
|
||||
}
|
||||
_ => false,
|
||||
}
|
||||
} ",
|
||||
)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn replace_if_let_with_match_target() {
|
||||
check_assist_target(
|
||||
|
|
|
@ -38,9 +38,6 @@ fn prev_tokens(token: SyntaxToken) -> impl Iterator<Item = SyntaxToken> {
|
|||
pub fn extract_trivial_expression(expr: &ast::BlockExpr) -> Option<ast::Expr> {
|
||||
let block = expr.block()?;
|
||||
let expr = block.expr()?;
|
||||
if expr.syntax().text().contains_char('\n') {
|
||||
return None;
|
||||
}
|
||||
let non_trivial_children = block.syntax().children().filter(|it| match it.kind() {
|
||||
WHITESPACE | T!['{'] | T!['}'] => false,
|
||||
_ => it != expr.syntax(),
|
||||
|
|
|
@ -243,6 +243,34 @@ fn foo(e: Result<U, V>) {
|
|||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn join_lines_multiline_in_block() {
|
||||
check_join_lines(
|
||||
r"
|
||||
fn foo() {
|
||||
match ty {
|
||||
<|> Some(ty) => {
|
||||
match ty {
|
||||
_ => false,
|
||||
}
|
||||
}
|
||||
_ => true,
|
||||
}
|
||||
}
|
||||
",
|
||||
r"
|
||||
fn foo() {
|
||||
match ty {
|
||||
<|> Some(ty) => match ty {
|
||||
_ => false,
|
||||
},
|
||||
_ => true,
|
||||
}
|
||||
}
|
||||
",
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn join_lines_keeps_comma_for_block_in_match_arm() {
|
||||
// We already have a comma
|
||||
|
|
Loading…
Reference in a new issue