From e7cdbe795a0eb061ce5b0274d4b3ca3029cfbe18 Mon Sep 17 00:00:00 2001 From: Evgenii P Date: Tue, 30 Jul 2019 20:33:58 +0700 Subject: Fix flip comma assist --- crates/ra_assists/src/flip_comma.rs | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/crates/ra_assists/src/flip_comma.rs b/crates/ra_assists/src/flip_comma.rs index 34489329c..1b7521e8b 100644 --- a/crates/ra_assists/src/flip_comma.rs +++ b/crates/ra_assists/src/flip_comma.rs @@ -7,6 +7,13 @@ pub(crate) fn flip_comma(mut ctx: AssistCtx) -> Option let comma = ctx.token_at_offset().find(|leaf| leaf.kind() == T![,])?; let prev = non_trivia_sibling(comma.clone().into(), Direction::Prev)?; let next = non_trivia_sibling(comma.clone().into(), Direction::Next)?; + + // Don't apply a "flip" in case of a last comma + // that typically comes before punctuation + if next.kind().is_punct() { + return None; + } + ctx.add_action(AssistId("flip_comma"), "flip comma", |edit| { edit.target(comma.text_range()); edit.replace(prev.text_range(), next.to_string()); @@ -35,4 +42,22 @@ mod tests { fn flip_comma_target() { check_assist_target(flip_comma, "fn foo(x: i32,<|> y: Result<(), ()>) {}", ",") } + + #[test] + #[should_panic] + fn flip_comma_before_punct() { + // See https://github.com/rust-analyzer/rust-analyzer/issues/1619 + // "Flip comma" assist shouldn't be applicable to the last comma in enum or struct + // declaration body. + check_assist_target(flip_comma, + "pub enum Test { \ + A,<|> \ + }", ","); + + + check_assist_target(flip_comma, + "pub struct Test { \ + foo: usize,<|> \ + }", ","); + } } -- cgit v1.2.3