Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide/src/typing/on_enter.rs')
-rw-r--r--crates/ide/src/typing/on_enter.rs23
1 files changed, 21 insertions, 2 deletions
diff --git a/crates/ide/src/typing/on_enter.rs b/crates/ide/src/typing/on_enter.rs
index 7d04594a5b..4e3c491418 100644
--- a/crates/ide/src/typing/on_enter.rs
+++ b/crates/ide/src/typing/on_enter.rs
@@ -1,7 +1,7 @@
//! Handles the `Enter` key press, including comment continuation and
//! indentation in brace-delimited constructs.
-use ide_db::{FilePosition, RootDatabase};
+use ide_db::{FilePosition, RootDatabase, source_change::SnippetEdit};
use syntax::{
AstNode, SmolStr, SourceFile,
SyntaxKind::*,
@@ -113,7 +113,8 @@ fn on_enter_in_braces(l_curly: SyntaxToken, position: FilePosition) -> Option<Te
return None;
}
- let (r_curly, content) = brace_contents_on_same_line(&l_curly)?;
+ let (r_curly, mut content) = brace_contents_on_same_line(&l_curly)?;
+ SnippetEdit::escape_snippet_bits(&mut content);
let indent = IndentLevel::from_token(&l_curly);
Some(TextEdit::replace(
TextRange::new(position.offset, r_curly.text_range().start()),
@@ -683,4 +684,22 @@ use path::{$0
"#,
);
}
+
+ #[test]
+ fn escapes_dollar_sign_in_brace_contents() {
+ do_check(
+ r#"
+fn f() {
+ const {$0$bar};
+}
+"#,
+ r#"
+fn f() {
+ const {
+ $0\$bar
+ };
+}
+"#,
+ );
+ }
}