]> git.lizzy.rs Git - rust.git/commitdiff
fix: join lines doesn't add space before closing quote
authorAleksey Kladov <aleksey.kladov@gmail.com>
Sun, 9 May 2021 14:17:28 +0000 (17:17 +0300)
committerAleksey Kladov <aleksey.kladov@gmail.com>
Sun, 9 May 2021 14:19:18 +0000 (17:19 +0300)
crates/ide/src/join_lines.rs

index fe2a349e63f2daf291202bc4ea2eac2b4a63c7ce..482b23cf5ea119fe35da16cd0e2bd16ac15f4adc 100644 (file)
@@ -65,11 +65,15 @@ fn remove_newlines(edit: &mut TextEditBuilder, token: &SyntaxToken, range: TextR
 
 fn remove_newline(edit: &mut TextEditBuilder, token: &SyntaxToken, offset: TextSize) {
     if token.kind() != WHITESPACE || token.text().bytes().filter(|&b| b == b'\n').count() != 1 {
-        let mut string_open_quote = false;
+        let mut no_space = false;
         if let Some(string) = ast::String::cast(token.clone()) {
             if let Some(range) = string.open_quote_text_range() {
-                cov_mark::hit!(join_string_literal);
-                string_open_quote = range.end() == offset;
+                cov_mark::hit!(join_string_literal_open_quote);
+                no_space |= range.end() == offset;
+            }
+            if let Some(range) = string.close_quote_text_range() {
+                cov_mark::hit!(join_string_literal_close_quote);
+                no_space |= range.start() == offset + TextSize::of('\n');
             }
         }
 
@@ -82,7 +86,7 @@ fn remove_newline(edit: &mut TextEditBuilder, token: &SyntaxToken, offset: TextS
         };
 
         let range = TextRange::at(offset, ((n_spaces_after_line_break + 1) as u32).into());
-        let replace_with = if string_open_quote { "" } else { " " };
+        let replace_with = if no_space { "" } else { " " };
         edit.replace(range, replace_with.to_string());
         return;
     }
@@ -797,22 +801,41 @@ fn foo() {
 
     #[test]
     fn join_string_literal() {
-        cov_mark::check!(join_string_literal);
-        check_join_lines(
-            r#"
+        {
+            cov_mark::check!(join_string_literal_open_quote);
+            check_join_lines(
+                r#"
 fn main() {
     $0"
 hello
 ";
 }
 "#,
-            r#"
+                r#"
 fn main() {
     $0"hello
 ";
 }
 "#,
-        );
+            );
+        }
+
+        {
+            cov_mark::check!(join_string_literal_close_quote);
+            check_join_lines(
+                r#"
+fn main() {
+    $0"hello
+";
+}
+"#,
+                r#"
+fn main() {
+    $0"hello";
+}
+"#,
+            );
+        }
 
         check_join_lines(
             r#"