Unnamed repository; edit this file 'description' to name the repository.
| -rw-r--r-- | crates/ide/src/typing/on_enter.rs | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/crates/ide/src/typing/on_enter.rs b/crates/ide/src/typing/on_enter.rs index 7d04594a5b..4811dd69e0 100644 --- a/crates/ide/src/typing/on_enter.rs +++ b/crates/ide/src/typing/on_enter.rs @@ -108,12 +108,19 @@ fn on_enter_in_comment( Some(edit) } +// for lack of a better place to put this function +fn escape_snippet_bits(text: &mut String) { + stdx::replace(text, '\\', "\\\\"); + stdx::replace(text, '$', "\\$"); +} + fn on_enter_in_braces(l_curly: SyntaxToken, position: FilePosition) -> Option<TextEdit> { if l_curly.text_range().end() != position.offset { 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)?; + 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 +690,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 + }; +} +"#, + ); + } } |