Unnamed repository; edit this file 'description' to name the repository.
4 files changed, 21 insertions, 71 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()); } } diff --git a/crates/ide/src/syntax_highlighting/test_data/highlight_byte_string.html b/crates/ide/src/syntax_highlighting/test_data/highlight_byte_string.html deleted file mode 100644 index 113b73af0c..0000000000 --- a/crates/ide/src/syntax_highlighting/test_data/highlight_byte_string.html +++ /dev/null @@ -1,47 +0,0 @@ - -<style> -body { margin: 0; } -pre { color: #DCDCCC; background: #3F3F3F; font-size: 22px; padding: 0.4em; } - -.lifetime { color: #DFAF8F; font-style: italic; } -.label { color: #DFAF8F; font-style: italic; } -.comment { color: #7F9F7F; } -.documentation { color: #629755; } -.intra_doc_link { font-style: italic; } -.injected { opacity: 0.65 ; } -.struct, .enum { color: #7CB8BB; } -.enum_variant { color: #BDE0F3; } -.string_literal { color: #CC9393; } -.field { color: #94BFF3; } -.function { color: #93E0E3; } -.function.unsafe { color: #BC8383; } -.trait.unsafe { color: #BC8383; } -.operator.unsafe { color: #BC8383; } -.mutable.unsafe { color: #BC8383; text-decoration: underline; } -.keyword.unsafe { color: #BC8383; font-weight: bold; } -.parameter { color: #94BFF3; } -.text { color: #DCDCCC; } -.type { color: #7CB8BB; } -.builtin_type { color: #8CD0D3; } -.type_param { color: #DFAF8F; } -.attribute { color: #94BFF3; } -.numeric_literal { color: #BFEBBF; } -.bool_literal { color: #BFE6EB; } -.macro { color: #94BFF3; } -.derive { color: #94BFF3; font-style: italic; } -.module { color: #AFD8AF; } -.value_param { color: #DCDCCC; } -.variable { color: #DCDCCC; } -.format_specifier { color: #CC696B; } -.mutable { text-decoration: underline; } -.escape_sequence { color: #94BFF3; } -.keyword { color: #F0DFAF; font-weight: bold; } -.control { font-style: italic; } -.reference { font-style: italic; font-weight: bold; } - -.unresolved_reference { color: #FC5555; text-decoration: wavy underline; } -</style> -<pre><code><span class="keyword">fn</span> <span class="function declaration">main</span><span class="parenthesis">(</span><span class="parenthesis">)</span> <span class="brace">{</span> - <span class="keyword">let</span> <span class="punctuation">_</span> <span class="operator">=</span> <span class="string_literal">"</span><span class="escape_sequence">\x28</span><span class="escape_sequence">\x28</span><span class="escape_sequence">\x00</span><span class="escape_sequence">\x63</span><span class="escape_sequence">\n</span><span class="string_literal">"</span><span class="semicolon">;</span> - <span class="keyword">let</span> <span class="punctuation">_</span> <span class="operator">=</span> <span class="string_literal">b"</span><span class="escape_sequence">\x28</span><span class="escape_sequence">\x28</span><span class="escape_sequence">\x00</span><span class="escape_sequence">\x63</span><span class="escape_sequence">\n</span><span class="string_literal">"</span><span class="semicolon">;</span> -<span class="brace">}</span></code></pre>
\ No newline at end of file diff --git a/crates/ide/src/syntax_highlighting/test_data/highlight_strings.html b/crates/ide/src/syntax_highlighting/test_data/highlight_strings.html index 07c7881a1f..3715164bbf 100644 --- a/crates/ide/src/syntax_highlighting/test_data/highlight_strings.html +++ b/crates/ide/src/syntax_highlighting/test_data/highlight_strings.html @@ -136,6 +136,9 @@ pre { color: #DCDCCC; background: #3F3F3F; font-size: 22px; padd <span class="macro">println</span><span class="macro_bang">!</span><span class="parenthesis">(</span><span class="string_literal">"Hello</span><span class="escape_sequence">\n</span><span class="string_literal">World"</span><span class="parenthesis">)</span><span class="semicolon">;</span> <span class="macro">println</span><span class="macro_bang">!</span><span class="parenthesis">(</span><span class="string_literal">"</span><span class="escape_sequence">\u{48}</span><span class="escape_sequence">\x65</span><span class="escape_sequence">\x6C</span><span class="escape_sequence">\x6C</span><span class="escape_sequence">\x6F</span><span class="string_literal"> World"</span><span class="parenthesis">)</span><span class="semicolon">;</span> + <span class="keyword">let</span> <span class="punctuation">_</span> <span class="operator">=</span> <span class="string_literal">"</span><span class="escape_sequence">\x28</span><span class="escape_sequence">\x28</span><span class="escape_sequence">\x00</span><span class="escape_sequence">\x63</span><span class="escape_sequence">\n</span><span class="string_literal">"</span><span class="semicolon">;</span> + <span class="keyword">let</span> <span class="punctuation">_</span> <span class="operator">=</span> <span class="string_literal">b"</span><span class="escape_sequence">\x28</span><span class="escape_sequence">\x28</span><span class="escape_sequence">\x00</span><span class="escape_sequence">\x63</span><span class="escape_sequence">\n</span><span class="string_literal">"</span><span class="semicolon">;</span> + <span class="macro">println</span><span class="macro_bang">!</span><span class="parenthesis">(</span><span class="string_literal">"</span><span class="format_specifier">{</span><span class="escape_sequence">\x41</span><span class="format_specifier">}</span><span class="string_literal">"</span><span class="comma">,</span> A <span class="operator">=</span> <span class="numeric_literal">92</span><span class="parenthesis">)</span><span class="semicolon">;</span> <span class="macro">println</span><span class="macro_bang">!</span><span class="parenthesis">(</span><span class="string_literal">"</span><span class="format_specifier">{</span><span class="variable">ничоси</span><span class="format_specifier">}</span><span class="string_literal">"</span><span class="comma">,</span> ничоси <span class="operator">=</span> <span class="numeric_literal">92</span><span class="parenthesis">)</span><span class="semicolon">;</span> diff --git a/crates/ide/src/syntax_highlighting/tests.rs b/crates/ide/src/syntax_highlighting/tests.rs index f9c2404c35..a8c69875e0 100644 --- a/crates/ide/src/syntax_highlighting/tests.rs +++ b/crates/ide/src/syntax_highlighting/tests.rs @@ -459,6 +459,9 @@ fn main() { println!("Hello\nWorld"); println!("\u{48}\x65\x6C\x6C\x6F World"); + let _ = "\x28\x28\x00\x63\n"; + let _ = b"\x28\x28\x00\x63\n"; + println!("{\x41}", A = 92); println!("{ничоси}", ничоси = 92); @@ -477,20 +480,6 @@ fn main() { } #[test] -fn test_byte_string_highlight() { - check_highlighting( - r#" -fn main() { - let _ = "\x28\x28\x00\x63\n"; - let _ = b"\x28\x28\x00\x63\n"; -} -"#, - expect_file!["./test_data/highlight_byte_string.html"], - false, - ); -} - -#[test] fn test_unsafe_highlighting() { check_highlighting( r#" |