Parenthesize composite if condition before inverting in invert-if assist
This commit is contained in:
parent
8cba423109
commit
0f42a71806
@ -68,6 +68,15 @@ mod tests {
|
|||||||
|
|
||||||
use crate::tests::{check_assist, check_assist_not_applicable};
|
use crate::tests::{check_assist, check_assist_not_applicable};
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn invert_if_composite_condition() {
|
||||||
|
check_assist(
|
||||||
|
invert_if,
|
||||||
|
"fn f() { i<|>f x == 3 || x == 4 || x == 5 { 1 } else { 3 * 2 } }",
|
||||||
|
"fn f() { if !(x == 3 || x == 4 || x == 5) { 3 * 2 } else { 1 } }",
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn invert_if_remove_inequality() {
|
fn invert_if_remove_inequality() {
|
||||||
check_assist(
|
check_assist(
|
||||||
|
@ -212,6 +212,10 @@ fn invert_special_case(expr: &ast::Expr) -> Option<ast::Expr> {
|
|||||||
ast::Expr::BinExpr(bin) => match bin.op_kind()? {
|
ast::Expr::BinExpr(bin) => match bin.op_kind()? {
|
||||||
ast::BinOp::NegatedEqualityTest => bin.replace_op(T![==]).map(|it| it.into()),
|
ast::BinOp::NegatedEqualityTest => bin.replace_op(T![==]).map(|it| it.into()),
|
||||||
ast::BinOp::EqualityTest => bin.replace_op(T![!=]).map(|it| it.into()),
|
ast::BinOp::EqualityTest => bin.replace_op(T![!=]).map(|it| it.into()),
|
||||||
|
// Parenthesize composite boolean expressions before prefixing `!`
|
||||||
|
ast::BinOp::BooleanAnd | ast::BinOp::BooleanOr => {
|
||||||
|
Some(make::expr_prefix(T![!], make::expr_paren(expr.clone())))
|
||||||
|
}
|
||||||
_ => None,
|
_ => None,
|
||||||
},
|
},
|
||||||
ast::Expr::MethodCallExpr(mce) => {
|
ast::Expr::MethodCallExpr(mce) => {
|
||||||
|
@ -196,6 +196,9 @@ pub fn expr_method_call(receiver: ast::Expr, method: &str, arg_list: ast::ArgLis
|
|||||||
pub fn expr_ref(expr: ast::Expr, exclusive: bool) -> ast::Expr {
|
pub fn expr_ref(expr: ast::Expr, exclusive: bool) -> ast::Expr {
|
||||||
expr_from_text(&if exclusive { format!("&mut {}", expr) } else { format!("&{}", expr) })
|
expr_from_text(&if exclusive { format!("&mut {}", expr) } else { format!("&{}", expr) })
|
||||||
}
|
}
|
||||||
|
pub fn expr_paren(expr: ast::Expr) -> ast::Expr {
|
||||||
|
expr_from_text(&format!("({})", expr))
|
||||||
|
}
|
||||||
fn expr_from_text(text: &str) -> ast::Expr {
|
fn expr_from_text(text: &str) -> ast::Expr {
|
||||||
ast_from_text(&format!("const C: () = {};", text))
|
ast_from_text(&format!("const C: () = {};", text))
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user