aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--crates/ra_editor/src/typing.rs60
1 files changed, 58 insertions, 2 deletions
diff --git a/crates/ra_editor/src/typing.rs b/crates/ra_editor/src/typing.rs
index dd3d0f260..1b568e96c 100644
--- a/crates/ra_editor/src/typing.rs
+++ b/crates/ra_editor/src/typing.rs
@@ -188,10 +188,14 @@ fn remove_newline(
188 edit.delete(TextRange::from_to(prev.range().start(), node.range().end())); 188 edit.delete(TextRange::from_to(prev.range().start(), node.range().end()));
189 } else if prev.kind() == COMMA && next.kind() == R_CURLY { 189 } else if prev.kind() == COMMA && next.kind() == R_CURLY {
190 // Removes: comma, newline (incl. surrounding whitespace) 190 // Removes: comma, newline (incl. surrounding whitespace)
191 // Adds: a single whitespace 191 let space = if let Some(left) = prev.prev_sibling() {
192 compute_ws(left, next)
193 } else {
194 " "
195 };
192 edit.replace( 196 edit.replace(
193 TextRange::from_to(prev.range().start(), node.range().end()), 197 TextRange::from_to(prev.range().start(), node.range().end()),
194 " ".to_string(), 198 space.to_string(),
195 ); 199 );
196 } else if let (Some(_), Some(next)) = (ast::Comment::cast(prev), ast::Comment::cast(next)) { 200 } else if let (Some(_), Some(next)) = (ast::Comment::cast(prev), ast::Comment::cast(next)) {
197 // Removes: newline (incl. surrounding whitespace), start of the next comment 201 // Removes: newline (incl. surrounding whitespace), start of the next comment
@@ -256,10 +260,20 @@ fn join_single_use_tree(edit: &mut TextEditBuilder, node: SyntaxNodeRef) -> Opti
256fn compute_ws(left: SyntaxNodeRef, right: SyntaxNodeRef) -> &'static str { 260fn compute_ws(left: SyntaxNodeRef, right: SyntaxNodeRef) -> &'static str {
257 match left.kind() { 261 match left.kind() {
258 L_PAREN | L_BRACK => return "", 262 L_PAREN | L_BRACK => return "",
263 L_CURLY => {
264 if let USE_TREE = right.kind() {
265 return "";
266 }
267 }
259 _ => (), 268 _ => (),
260 } 269 }
261 match right.kind() { 270 match right.kind() {
262 R_PAREN | R_BRACK => return "", 271 R_PAREN | R_BRACK => return "",
272 R_CURLY => {
273 if let USE_TREE = left.kind() {
274 return "";
275 }
276 }
263 DOT => return "", 277 DOT => return "",
264 _ => (), 278 _ => (),
265 } 279 }
@@ -331,6 +345,48 @@ fn foo() {
331 } 345 }
332 346
333 #[test] 347 #[test]
348 fn test_join_lines_use_items_left() {
349 // No space after the '{'
350 check_join_lines(
351 r"
352<|>use ra_syntax::{
353 TextUnit, TextRange,
354};",
355 r"
356<|>use ra_syntax::{TextUnit, TextRange,
357};",
358 );
359 }
360
361 #[test]
362 fn test_join_lines_use_items_right() {
363 // No space after the '}'
364 check_join_lines(
365 r"
366use ra_syntax::{
367<|> TextUnit, TextRange
368};",
369 r"
370use ra_syntax::{
371<|> TextUnit, TextRange};",
372 );
373 }
374
375 #[test]
376 fn test_join_lines_use_items_right_comma() {
377 // No space after the '}'
378 check_join_lines(
379 r"
380use ra_syntax::{
381<|> TextUnit, TextRange,
382};",
383 r"
384use ra_syntax::{
385<|> TextUnit, TextRange};",
386 );
387 }
388
389 #[test]
334 fn test_join_lines_use_tree() { 390 fn test_join_lines_use_tree() {
335 check_join_lines( 391 check_join_lines(
336 r" 392 r"