summaryrefslogtreecommitdiffstats
path: root/src/tools/rust-analyzer/crates/ide-completion/src/completions/postfix/format_like.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/rust-analyzer/crates/ide-completion/src/completions/postfix/format_like.rs')
-rw-r--r--src/tools/rust-analyzer/crates/ide-completion/src/completions/postfix/format_like.rs27
1 files changed, 22 insertions, 5 deletions
diff --git a/src/tools/rust-analyzer/crates/ide-completion/src/completions/postfix/format_like.rs b/src/tools/rust-analyzer/crates/ide-completion/src/completions/postfix/format_like.rs
index b43bdb9ab..dfcc78e92 100644
--- a/src/tools/rust-analyzer/crates/ide-completion/src/completions/postfix/format_like.rs
+++ b/src/tools/rust-analyzer/crates/ide-completion/src/completions/postfix/format_like.rs
@@ -54,7 +54,11 @@ pub(crate) fn add_format_like_completions(
if let Ok((out, exprs)) = parse_format_exprs(receiver_text.text()) {
let exprs = with_placeholders(exprs);
for (label, macro_name) in KINDS {
- let snippet = format!(r#"{}({}, {})"#, macro_name, out, exprs.join(", "));
+ let snippet = if exprs.is_empty() {
+ format!(r#"{}({})"#, macro_name, out)
+ } else {
+ format!(r#"{}({}, {})"#, macro_name, out, exprs.join(", "))
+ };
postfix_snippet(label, macro_name, &snippet).add_to(acc);
}
@@ -72,16 +76,29 @@ mod tests {
("eprintln!", "{}", r#"eprintln!("{}", $1)"#),
(
"log::info!",
- "{} {expr} {} {2 + 2}",
- r#"log::info!("{} {} {} {}", $1, expr, $2, 2 + 2)"#,
+ "{} {ident} {} {2 + 2}",
+ r#"log::info!("{} {ident} {} {}", $1, $2, 2 + 2)"#,
),
- ("format!", "{expr:?}", r#"format!("{:?}", expr)"#),
];
for (kind, input, output) in test_vector {
let (parsed_string, exprs) = parse_format_exprs(input).unwrap();
let exprs = with_placeholders(exprs);
- let snippet = format!(r#"{}("{}", {})"#, kind, parsed_string, exprs.join(", "));
+ let snippet = format!(r#"{kind}("{parsed_string}", {})"#, exprs.join(", "));
+ assert_eq!(&snippet, output);
+ }
+ }
+
+ #[test]
+ fn test_into_suggestion_no_epxrs() {
+ let test_vector = &[
+ ("println!", "{ident}", r#"println!("{ident}")"#),
+ ("format!", "{ident:?}", r#"format!("{ident:?}")"#),
+ ];
+
+ for (kind, input, output) in test_vector {
+ let (parsed_string, _exprs) = parse_format_exprs(input).unwrap();
+ let snippet = format!(r#"{}("{}")"#, kind, parsed_string);
assert_eq!(&snippet, output);
}
}