]> git.lizzy.rs Git - rust.git/commitdiff
preserve escape sequences when replacing string with char
authorDomantas Jadenkus <djadenkus@gmail.com>
Wed, 3 Mar 2021 21:20:18 +0000 (23:20 +0200)
committerDomantas Jadenkus <djadenkus@gmail.com>
Wed, 3 Mar 2021 21:20:18 +0000 (23:20 +0200)
crates/ide_assists/src/handlers/replace_string_with_char.rs

index 317318c2478020c093725a7fd602c6e5835c121c..303c0dcbebfcba22bb8377f2a078c3226739c42d 100644 (file)
@@ -31,7 +31,9 @@ pub(crate) fn replace_string_with_char(acc: &mut Assists, ctx: &AssistContext) -
         "Replace string with char",
         target,
         |edit| {
-            edit.replace(token.syntax().text_range(), format!("'{}'", value));
+            let token_text = token.syntax().text();
+            let inner_text = &token_text[1..token_text.len() - 1];
+            edit.replace(token.syntax().text_range(), format!("'{}'", inner_text));
         },
     )
 }
@@ -134,4 +136,38 @@ fn f() {
                 "##,
         )
     }
+
+    #[test]
+    fn replace_string_with_char_newline() {
+        check_assist(
+            replace_string_with_char,
+            r#"
+                fn f() {
+                    find($0"\n");
+                }
+                "#,
+            r##"
+                fn f() {
+                    find('\n');
+                }
+                "##,
+        )
+    }
+
+    #[test]
+    fn replace_string_with_char_unicode_escape() {
+        check_assist(
+            replace_string_with_char,
+            r#"
+                fn f() {
+                    find($0"\u{7FFF}");
+                }
+                "#,
+            r##"
+                fn f() {
+                    find('\u{7FFF}');
+                }
+                "##,
+        )
+    }
 }