aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_assists/src/flip_comma.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_assists/src/flip_comma.rs')
-rw-r--r--crates/ra_assists/src/flip_comma.rs33
1 files changed, 33 insertions, 0 deletions
diff --git a/crates/ra_assists/src/flip_comma.rs b/crates/ra_assists/src/flip_comma.rs
new file mode 100644
index 000000000..a49820c29
--- /dev/null
+++ b/crates/ra_assists/src/flip_comma.rs
@@ -0,0 +1,33 @@
1use hir::db::HirDatabase;
2use ra_syntax::{
3 Direction,
4 SyntaxKind::COMMA,
5};
6
7use crate::{AssistCtx, Assist, non_trivia_sibling};
8
9pub(crate) fn flip_comma(ctx: AssistCtx<impl HirDatabase>) -> Option<Assist> {
10 let comma = ctx.leaf_at_offset().find(|leaf| leaf.kind() == COMMA)?;
11 let prev = non_trivia_sibling(comma, Direction::Prev)?;
12 let next = non_trivia_sibling(comma, Direction::Next)?;
13 ctx.build("flip comma", |edit| {
14 edit.replace(prev.range(), next.text());
15 edit.replace(next.range(), prev.text());
16 })
17}
18
19#[cfg(test)]
20mod tests {
21 use super::*;
22
23 use crate::helpers::check_assist;
24
25 #[test]
26 fn flip_comma_works_for_function_parameters() {
27 check_assist(
28 flip_comma,
29 "fn foo(x: i32,<|> y: Result<(), ()>) {}",
30 "fn foo(y: Result<(), ()>,<|> x: i32) {}",
31 )
32 }
33}