about summary refs log tree commit diff
diff options
context:
space:
mode:
authorunvalley <kirohi.code@gmail.com>2022-11-27 15:36:26 +0900
committerLukas Wirth <lukastw97@gmail.com>2023-01-09 12:22:29 +0100
commit285f09cfa8dfb696b8bd20a1fac5db5fec1ae46d (patch)
treec9f7c38cac8fe754a694f9471e8bcef42714f237
parent29f3d7dee75e20eeec573065dc01070544d3d6e3 (diff)
downloadrust-285f09cfa8dfb696b8bd20a1fac5db5fec1ae46d.tar.gz
rust-285f09cfa8dfb696b8bd20a1fac5db5fec1ae46d.zip
feat: extract only expressions from format string
-rw-r--r--crates/ide-assists/src/handlers/extract_expressions_from_format_string.rs31
1 files changed, 27 insertions, 4 deletions
diff --git a/crates/ide-assists/src/handlers/extract_expressions_from_format_string.rs b/crates/ide-assists/src/handlers/extract_expressions_from_format_string.rs
index b1bc2a9e6db..6b947fe3641 100644
--- a/crates/ide-assists/src/handlers/extract_expressions_from_format_string.rs
+++ b/crates/ide-assists/src/handlers/extract_expressions_from_format_string.rs
@@ -121,15 +121,14 @@ pub(crate) fn extract_expressions_from_format_string(
             let mut placeholder_idx = 1;
 
             for extracted_args in extracted_args {
-                // remove expr from format string
-                args.push_str(", ");
-
                 match extracted_args {
-                    Arg::Ident(s) | Arg::Expr(s) => {
+                    Arg::Expr(s)=> {
+                        args.push_str(", ");
                         // insert arg
                         args.push_str(&s);
                     }
                     Arg::Placeholder => {
+                        args.push_str(", ");
                         // try matching with existing argument
                         match existing_args.next() {
                             Some(ea) => {
@@ -142,6 +141,7 @@ pub(crate) fn extract_expressions_from_format_string(
                             }
                         }
                     }
+                    Arg::Ident(_s) => (),
                 }
             }
 
@@ -296,4 +296,27 @@ fn main() {
             ),
         );
     }
+
+    #[test]
+    fn extract_only_expressions() {
+        check_assist(
+            extract_expressions_from_format_string,
+            &add_macro_decl(
+                r#"
+fn main() {
+    let var = 1 + 1;
+    print!("foobar {var} {var:?} {x$0 + x}")
+}
+"#,
+            ),
+            &add_macro_decl(
+                r#"
+fn main() {
+    let var = 1 + 1;
+    print!("foobar {var} {var:?} {}"$0, x + x)
+}
+"#,
+            ),
+        );
+    }
 }