Unnamed repository; edit this file 'description' to name the repository.
-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 b1bc2a9e6d..6b947fe364 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)
+}
+"#,
+ ),
+ );
+ }
}