Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-completion/src/completions/postfix/format_like.rs')
-rw-r--r--crates/ide-completion/src/completions/postfix/format_like.rs16
1 files changed, 13 insertions, 3 deletions
diff --git a/crates/ide-completion/src/completions/postfix/format_like.rs b/crates/ide-completion/src/completions/postfix/format_like.rs
index cb242e4aa6..fd50fd4e8c 100644
--- a/crates/ide-completion/src/completions/postfix/format_like.rs
+++ b/crates/ide-completion/src/completions/postfix/format_like.rs
@@ -17,13 +17,15 @@
// image::https://user-images.githubusercontent.com/48062697/113020656-b560f500-917a-11eb-87de-02991f61beb8.gif[]
use ide_db::{
- syntax_helpers::format_string_exprs::{parse_format_exprs, with_placeholders},
+ syntax_helpers::format_string_exprs::{parse_format_exprs, with_placeholders, Arg},
SnippetCap,
};
use syntax::{ast, AstToken};
use crate::{
- completions::postfix::build_postfix_snippet_builder, context::CompletionContext, Completions,
+ completions::postfix::{build_postfix_snippet_builder, escape_snippet_bits},
+ context::CompletionContext,
+ Completions,
};
/// Mapping ("postfix completion item" => "macro to use")
@@ -51,7 +53,15 @@ pub(crate) fn add_format_like_completions(
None => return,
};
- if let Ok((out, exprs)) = parse_format_exprs(receiver_text.text()) {
+ if let Ok((mut out, mut exprs)) = parse_format_exprs(receiver_text.text()) {
+ // Escape any snippet bits in the out text and any of the exprs.
+ escape_snippet_bits(&mut out);
+ for arg in &mut exprs {
+ if let Arg::Ident(text) | Arg::Expr(text) = arg {
+ escape_snippet_bits(text)
+ }
+ }
+
let exprs = with_placeholders(exprs);
for (label, macro_name) in KINDS {
let snippet = if exprs.is_empty() {