From e18b89452efc8e036ad0f95ff00d8e9e333a5c1a Mon Sep 17 00:00:00 2001 From: Matheus Cardoso Date: Fri, 25 Aug 2023 15:47:27 -0300 Subject: [PATCH] Flip binexpr works for lhs binexpr --- .../ide-assists/src/handlers/flip_binexpr.rs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/crates/ide-assists/src/handlers/flip_binexpr.rs b/crates/ide-assists/src/handlers/flip_binexpr.rs index 2ea6f58fa0..4b1e416596 100644 --- a/crates/ide-assists/src/handlers/flip_binexpr.rs +++ b/crates/ide-assists/src/handlers/flip_binexpr.rs @@ -33,6 +33,15 @@ pub(crate) fn flip_binexpr(acc: &mut Assists, ctx: &AssistContext<'_>) -> Option return None; } + // If the lhs is a binary expression we check if its rhs can be used as the lhs of the current expression + let lhs = match BinExpr::cast(lhs.clone()) { + Some(lhs) => match lhs.rhs() { + Some(lhs) => lhs, + None => lhs, + }, + None => lhs, + }; + acc.add( AssistId("flip_binexpr", AssistKind::RefactorRewrite), "Flip binary expression", @@ -114,6 +123,15 @@ mod tests { ) } + #[test] + fn flip_binexpr_works_for_lhs_binexpr() { + check_assist( + flip_binexpr, + r"fn f() { let res = 1 + (2 - 3) +$0 4 + 5; }", + r"fn f() { let res = 1 + 4 + (2 - 3) + 5; }", + ) + } + #[test] fn flip_binexpr_works_inside_match() { check_assist(