Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide/src/syntax_highlighting.rs')
-rw-r--r--crates/ide/src/syntax_highlighting.rs25
1 files changed, 15 insertions, 10 deletions
diff --git a/crates/ide/src/syntax_highlighting.rs b/crates/ide/src/syntax_highlighting.rs
index 1bd95c4c43..8f764e3336 100644
--- a/crates/ide/src/syntax_highlighting.rs
+++ b/crates/ide/src/syntax_highlighting.rs
@@ -375,18 +375,23 @@ fn traverse(
if let (Some(token), Some(descended_token)) = (token, descended_element.as_token()) {
if ast::String::can_cast(token.kind()) && ast::String::can_cast(descended_token.kind())
{
- let string = ast::String::cast(token).unwrap();
- let expanded_string = ast::String::cast(descended_token.clone()).unwrap();
- if string.is_raw() {
- if inject::ra_fixture(hl, sema, &string, &expanded_string).is_some() {
- continue;
+ let string = ast::String::cast(token);
+ let string_to_highlight = ast::String::cast(descended_token.clone());
+ if let Some((string, expanded_string)) = string.zip(string_to_highlight) {
+ if string.is_raw() {
+ if inject::ra_fixture(hl, sema, &string, &expanded_string).is_some() {
+ continue;
+ }
}
+ highlight_format_string(hl, &string, &expanded_string, range);
+ highlight_escape_string(hl, &string, range.start());
+ }
+ } else if ast::ByteString::can_cast(token.kind())
+ && ast::ByteString::can_cast(descended_token.kind())
+ {
+ if let Some(byte_string) = ast::ByteString::cast(token) {
+ highlight_escape_string(hl, &byte_string, range.start());
}
- highlight_format_string(hl, &string, &expanded_string, range);
- highlight_escape_string(hl, &string, range.start());
- } else if ast::ByteString::can_cast(token.kind()) {
- let byte_string = ast::ByteString::cast(token).unwrap();
- highlight_escape_string(hl, &byte_string, range.start());
}
}