Unnamed repository; edit this file 'description' to name the repository.
Merge pull request #21955 from A4-Tacks/postfix-format-semi
fix: add semicolon for postfix format unit like snippets
A4-Tacks 6 weeks ago
parent 1412ac0 · parent f28e1a1 · commit 46c7112
-rw-r--r--crates/ide-completion/src/completions/postfix.rs26
-rw-r--r--crates/ide-completion/src/completions/postfix/format_like.rs7
2 files changed, 22 insertions, 11 deletions
diff --git a/crates/ide-completion/src/completions/postfix.rs b/crates/ide-completion/src/completions/postfix.rs
index f1ccdd4c73..82baf885dd 100644
--- a/crates/ide-completion/src/completions/postfix.rs
+++ b/crates/ide-completion/src/completions/postfix.rs
@@ -310,7 +310,7 @@ pub(crate) fn complete_postfix(
if let ast::Expr::Literal(literal) = dot_receiver.clone()
&& let Some(literal_text) = ast::String::cast(literal.token())
{
- add_format_like_completions(acc, ctx, &dot_receiver_including_refs, cap, &literal_text);
+ add_format_like_completions(acc, ctx, dot_receiver, cap, &literal_text, semi);
}
postfix_snippet("return", "return expr", &format!("return {receiver_text}{semi}"))
@@ -1302,34 +1302,42 @@ fn main() {
check_edit(
"panic",
r#"fn main() { "Panic with {a}".$0 }"#,
- r#"fn main() { panic!("Panic with {a}") }"#,
+ r#"fn main() { panic!("Panic with {a}"); }"#,
);
check_edit(
"println",
r#"fn main() { "{ 2+2 } { SomeStruct { val: 1, other: 32 } :?}".$0 }"#,
- r#"fn main() { println!("{} {:?}", 2+2, SomeStruct { val: 1, other: 32 }) }"#,
+ r#"fn main() { println!("{} {:?}", 2+2, SomeStruct { val: 1, other: 32 }); }"#,
);
check_edit(
"loge",
r#"fn main() { "{2+2}".$0 }"#,
- r#"fn main() { log::error!("{}", 2+2) }"#,
+ r#"fn main() { log::error!("{}", 2+2); }"#,
);
check_edit(
"logt",
r#"fn main() { "{2+2}".$0 }"#,
- r#"fn main() { log::trace!("{}", 2+2) }"#,
+ r#"fn main() { log::trace!("{}", 2+2); }"#,
);
check_edit(
"logd",
r#"fn main() { "{2+2}".$0 }"#,
- r#"fn main() { log::debug!("{}", 2+2) }"#,
+ r#"fn main() { log::debug!("{}", 2+2); }"#,
+ );
+ check_edit(
+ "logi",
+ r#"fn main() { "{2+2}".$0 }"#,
+ r#"fn main() { log::info!("{}", 2+2); }"#,
+ );
+ check_edit(
+ "logw",
+ r#"fn main() { "{2+2}".$0 }"#,
+ r#"fn main() { log::warn!("{}", 2+2); }"#,
);
- check_edit("logi", r#"fn main() { "{2+2}".$0 }"#, r#"fn main() { log::info!("{}", 2+2) }"#);
- check_edit("logw", r#"fn main() { "{2+2}".$0 }"#, r#"fn main() { log::warn!("{}", 2+2) }"#);
check_edit(
"loge",
r#"fn main() { "{2+2}".$0 }"#,
- r#"fn main() { log::error!("{}", 2+2) }"#,
+ r#"fn main() { log::error!("{}", 2+2); }"#,
);
}
diff --git a/crates/ide-completion/src/completions/postfix/format_like.rs b/crates/ide-completion/src/completions/postfix/format_like.rs
index 7faa113959..85a8899fd1 100644
--- a/crates/ide-completion/src/completions/postfix/format_like.rs
+++ b/crates/ide-completion/src/completions/postfix/format_like.rs
@@ -40,6 +40,7 @@ static KINDS: &[(&str, &str)] = &[
("logw", "log::warn!"),
("loge", "log::error!"),
];
+static SNIPPET_RETURNS_NON_UNIT: &[&str] = &["format"];
pub(crate) fn add_format_like_completions(
acc: &mut Completions,
@@ -47,6 +48,7 @@ pub(crate) fn add_format_like_completions(
dot_receiver: &ast::Expr,
cap: SnippetCap,
receiver_text: &ast::String,
+ semi: &str,
) {
let postfix_snippet = match build_postfix_snippet_builder(ctx, cap, dot_receiver) {
Some(it) => it,
@@ -64,10 +66,11 @@ pub(crate) fn add_format_like_completions(
let exprs = with_placeholders(exprs);
for (label, macro_name) in KINDS {
+ let semi = if SNIPPET_RETURNS_NON_UNIT.contains(label) { "" } else { semi };
let snippet = if exprs.is_empty() {
- format!(r#"{macro_name}({out})"#)
+ format!(r#"{macro_name}({out}){semi}"#)
} else {
- format!(r#"{}({}, {})"#, macro_name, out, exprs.join(", "))
+ format!(r#"{}({}, {}){semi}"#, macro_name, out, exprs.join(", "))
};
postfix_snippet(label, macro_name, &snippet).add_to(acc, ctx.db);