aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_ide/src/join_lines.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_ide/src/join_lines.rs')
-rw-r--r--crates/ra_ide/src/join_lines.rs33
1 files changed, 24 insertions, 9 deletions
diff --git a/crates/ra_ide/src/join_lines.rs b/crates/ra_ide/src/join_lines.rs
index d0def7eaa..af1ade8a1 100644
--- a/crates/ra_ide/src/join_lines.rs
+++ b/crates/ra_ide/src/join_lines.rs
@@ -129,8 +129,7 @@ fn has_comma_after(node: &SyntaxNode) -> bool {
129} 129}
130 130
131fn join_single_expr_block(edit: &mut TextEditBuilder, token: &SyntaxToken) -> Option<()> { 131fn join_single_expr_block(edit: &mut TextEditBuilder, token: &SyntaxToken) -> Option<()> {
132 let block = ast::Block::cast(token.parent())?; 132 let block_expr = ast::BlockExpr::cast(token.parent())?;
133 let block_expr = ast::BlockExpr::cast(block.syntax().parent()?)?;
134 if !block_expr.is_standalone() { 133 if !block_expr.is_standalone() {
135 return None; 134 return None;
136 } 135 }
@@ -167,16 +166,28 @@ fn is_trailing_comma(left: SyntaxKind, right: SyntaxKind) -> bool {
167 166
168#[cfg(test)] 167#[cfg(test)]
169mod tests { 168mod tests {
170 use crate::test_utils::{assert_eq_text, check_action, extract_range}; 169 use ra_syntax::SourceFile;
170 use test_utils::{add_cursor, assert_eq_text, extract_offset, extract_range};
171 171
172 use super::*; 172 use super::*;
173 173
174 fn check_join_lines(before: &str, after: &str) { 174 fn check_join_lines(before: &str, after: &str) {
175 check_action(before, after, |file, offset| { 175 let (before_cursor_pos, before) = extract_offset(before);
176 let range = TextRange::empty(offset); 176 let file = SourceFile::parse(&before).ok().unwrap();
177 let res = join_lines(file, range); 177
178 Some(res) 178 let range = TextRange::empty(before_cursor_pos);
179 }) 179 let result = join_lines(&file, range);
180
181 let actual = {
182 let mut actual = before.to_string();
183 result.apply(&mut actual);
184 actual
185 };
186 let actual_cursor_pos = result
187 .apply_to_offset(before_cursor_pos)
188 .expect("cursor position is affected by the edit");
189 let actual = add_cursor(&actual, actual_cursor_pos);
190 assert_eq_text!(after, &actual);
180 } 191 }
181 192
182 #[test] 193 #[test]
@@ -570,7 +581,11 @@ fn foo() {
570 let (sel, before) = extract_range(before); 581 let (sel, before) = extract_range(before);
571 let parse = SourceFile::parse(&before); 582 let parse = SourceFile::parse(&before);
572 let result = join_lines(&parse.tree(), sel); 583 let result = join_lines(&parse.tree(), sel);
573 let actual = result.apply(&before); 584 let actual = {
585 let mut actual = before.to_string();
586 result.apply(&mut actual);
587 actual
588 };
574 assert_eq_text!(after, &actual); 589 assert_eq_text!(after, &actual);
575 } 590 }
576 591