diff options
| author | unvalley <kirohi.code@gmail.com> | 2022-11-27 15:36:26 +0900 |
|---|---|---|
| committer | Lukas Wirth <lukastw97@gmail.com> | 2023-01-09 12:22:29 +0100 |
| commit | 285f09cfa8dfb696b8bd20a1fac5db5fec1ae46d (patch) | |
| tree | c9f7c38cac8fe754a694f9471e8bcef42714f237 | |
| parent | 29f3d7dee75e20eeec573065dc01070544d3d6e3 (diff) | |
| download | rust-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.rs | 31 |
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) +} +"#, + ), + ); + } } |
