diff options
author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2020-03-31 13:53:51 +0100 |
---|---|---|
committer | GitHub <[email protected]> | 2020-03-31 13:53:51 +0100 |
commit | 2cdeb7363a85081803fca184bb603b8e6a61def3 (patch) | |
tree | 59d1a0da950bdf4fb33f48871ccf7c8d0fc3561b /crates/ra_syntax/src | |
parent | d63bb8565e129f51fadf6a036683b1eedefb78dd (diff) | |
parent | 2fe6e23138d990a852a59d9680847cb6718565bb (diff) |
Merge #3786
3786: When adding match arm, don't let the floating comma r=matklad a=matklad
bors r+
🤖
Co-authored-by: Aleksey Kladov <[email protected]>
Diffstat (limited to 'crates/ra_syntax/src')
-rw-r--r-- | crates/ra_syntax/src/ast/edit.rs | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/crates/ra_syntax/src/ast/edit.rs b/crates/ra_syntax/src/ast/edit.rs index 3d023f189..b69cae234 100644 --- a/crates/ra_syntax/src/ast/edit.rs +++ b/crates/ra_syntax/src/ast/edit.rs | |||
@@ -369,22 +369,33 @@ impl ast::MatchArmList { | |||
369 | 369 | ||
370 | #[must_use] | 370 | #[must_use] |
371 | pub fn remove_placeholder(&self) -> ast::MatchArmList { | 371 | pub fn remove_placeholder(&self) -> ast::MatchArmList { |
372 | let placeholder = self.arms().find(|arm| { | 372 | let placeholder = |
373 | if let Some(ast::Pat::PlaceholderPat(_)) = arm.pat() { | 373 | self.arms().find(|arm| matches!(arm.pat(), Some(ast::Pat::PlaceholderPat(_)))); |
374 | return true; | ||
375 | } | ||
376 | false | ||
377 | }); | ||
378 | if let Some(placeholder) = placeholder { | 374 | if let Some(placeholder) = placeholder { |
379 | let s: SyntaxElement = placeholder.syntax().clone().into(); | 375 | self.remove_arm(&placeholder) |
380 | let e = s.clone(); | ||
381 | self.replace_children(s..=e, &mut iter::empty()) | ||
382 | } else { | 376 | } else { |
383 | self.clone() | 377 | self.clone() |
384 | } | 378 | } |
385 | } | 379 | } |
386 | 380 | ||
387 | #[must_use] | 381 | #[must_use] |
382 | fn remove_arm(&self, arm: &ast::MatchArm) -> ast::MatchArmList { | ||
383 | let start = arm.syntax().clone(); | ||
384 | let end = if let Some(comma) = start | ||
385 | .siblings_with_tokens(Direction::Next) | ||
386 | .skip(1) | ||
387 | .skip_while(|it| it.kind().is_trivia()) | ||
388 | .next() | ||
389 | .filter(|it| it.kind() == T![,]) | ||
390 | { | ||
391 | comma | ||
392 | } else { | ||
393 | start.clone().into() | ||
394 | }; | ||
395 | self.replace_children(start.into()..=end, None) | ||
396 | } | ||
397 | |||
398 | #[must_use] | ||
388 | pub fn append_arm(&self, item: ast::MatchArm) -> ast::MatchArmList { | 399 | pub fn append_arm(&self, item: ast::MatchArm) -> ast::MatchArmList { |
389 | let r_curly = match self.syntax().children_with_tokens().find(|it| it.kind() == T!['}']) { | 400 | let r_curly = match self.syntax().children_with_tokens().find(|it| it.kind() == T!['}']) { |
390 | Some(t) => t, | 401 | Some(t) => t, |