diff options
Diffstat (limited to 'crates/ra_editor/src')
-rw-r--r-- | crates/ra_editor/src/typing.rs | 45 |
1 files changed, 23 insertions, 22 deletions
diff --git a/crates/ra_editor/src/typing.rs b/crates/ra_editor/src/typing.rs index 97ff01e40..1dc658f9b 100644 --- a/crates/ra_editor/src/typing.rs +++ b/crates/ra_editor/src/typing.rs | |||
@@ -174,27 +174,10 @@ fn remove_newline( | |||
174 | ); | 174 | ); |
175 | } else if let (Some(_), Some(next)) = (ast::Comment::cast(prev), ast::Comment::cast(next)) { | 175 | } else if let (Some(_), Some(next)) = (ast::Comment::cast(prev), ast::Comment::cast(next)) { |
176 | // Removes: newline (incl. surrounding whitespace), start of the next comment | 176 | // Removes: newline (incl. surrounding whitespace), start of the next comment |
177 | let comment_text = next.text(); | 177 | edit.delete(TextRange::from_to( |
178 | if let Some(newline_pos) = comment_text.find('\n') { | 178 | node.range().start(), |
179 | // Special case for multiline comments: join the comment content but | 179 | next.syntax().range().start() + TextUnit::of_str(next.prefix()) |
180 | // keep the leading `/*` | 180 | )); |
181 | |||
182 | let newline_offset = next.syntax().range().start() | ||
183 | + TextUnit::from(newline_pos as u32) | ||
184 | + TextUnit::of_char('\n'); | ||
185 | |||
186 | edit.insert(newline_offset, "/*".to_string()); | ||
187 | edit.delete(TextRange::from_to( | ||
188 | node.range().start(), | ||
189 | next.syntax().range().start() + TextUnit::of_str(next.prefix()) | ||
190 | )); | ||
191 | } else { | ||
192 | // Single-line comments | ||
193 | edit.delete(TextRange::from_to( | ||
194 | node.range().start(), | ||
195 | next.syntax().range().start() + TextUnit::of_str(next.prefix()) | ||
196 | )); | ||
197 | } | ||
198 | } else { | 181 | } else { |
199 | // Remove newline but add a computed amount of whitespace characters | 182 | // Remove newline but add a computed amount of whitespace characters |
200 | edit.replace( | 183 | edit.replace( |
@@ -356,7 +339,7 @@ fn foo() { | |||
356 | } | 339 | } |
357 | 340 | ||
358 | #[test] | 341 | #[test] |
359 | fn test_join_lines_multiline_comments() { | 342 | fn test_join_lines_multiline_comments_1() { |
360 | check_join_lines(r" | 343 | check_join_lines(r" |
361 | fn foo() { | 344 | fn foo() { |
362 | // Hello<|> | 345 | // Hello<|> |
@@ -369,6 +352,24 @@ fn foo() { | |||
369 | "); | 352 | "); |
370 | } | 353 | } |
371 | 354 | ||
355 | #[test] | ||
356 | fn test_join_lines_multiline_comments_2() { | ||
357 | check_join_lines(r" | ||
358 | fn foo() { | ||
359 | // The<|> | ||
360 | /* quick | ||
361 | brown | ||
362 | fox! */ | ||
363 | } | ||
364 | ", r" | ||
365 | fn foo() { | ||
366 | // The<|> quick | ||
367 | brown | ||
368 | fox! */ | ||
369 | } | ||
370 | "); | ||
371 | } | ||
372 | |||
372 | fn check_join_lines_sel(before: &str, after: &str) { | 373 | fn check_join_lines_sel(before: &str, after: &str) { |
373 | let (sel, before) = extract_range(before); | 374 | let (sel, before) = extract_range(before); |
374 | let file = File::parse(&before); | 375 | let file = File::parse(&before); |