Skip to content

Commit e17d604

Browse files
bors[bot]ruabmbua
andauthored
Merge #6558
6558: format string highlighting: handle hex + debug type specifier r=matklad a=ruabmbua Should fix #6427 Co-authored-by: Roland Ruckerbauer <[email protected]>
2 parents 382361c + a15dda4 commit e17d604

File tree

3 files changed

+26
-0
lines changed

3 files changed

+26
-0
lines changed

crates/ide/src/syntax_highlighting/test_data/highlight_strings.html

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,4 +93,6 @@
9393

9494
<span class="macro">println!</span><span class="punctuation">(</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="punctuation">,</span> A <span class="operator">=</span> <span class="numeric_literal">92</span><span class="punctuation">)</span><span class="punctuation">;</span>
9595
<span class="macro">println!</span><span class="punctuation">(</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="punctuation">,</span> ничоси <span class="operator">=</span> <span class="numeric_literal">92</span><span class="punctuation">)</span><span class="punctuation">;</span>
96+
97+
<span class="macro">println!</span><span class="punctuation">(</span><span class="string_literal">"</span><span class="format_specifier">{</span><span class="format_specifier">:</span><span class="variable">x</span><span class="format_specifier">?</span><span class="format_specifier">}</span><span class="string_literal"> </span><span class="format_specifier">{</span><span class="format_specifier">}</span><span class="string_literal"> "</span><span class="punctuation">,</span> thingy<span class="punctuation">,</span> n2<span class="punctuation">)</span><span class="punctuation">;</span>
9698
<span class="punctuation">}</span></code></pre>

crates/ide/src/syntax_highlighting/tests.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -340,6 +340,8 @@ fn main() {
340340
341341
println!("{\x41}", A = 92);
342342
println!("{ничоси}", ничоси = 92);
343+
344+
println!("{:x?} {} ", thingy, n2);
343345
}"#
344346
.trim(),
345347
expect_file!["./test_data/highlight_strings.html"],

crates/syntax/src/ast/token_ext.rs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -331,10 +331,22 @@ pub trait HasFormatSpecifier: AstToken {
331331
}
332332
c if c == '_' || c.is_alphabetic() => {
333333
read_identifier(&mut chars, &mut callback);
334+
335+
if chars.peek().and_then(|next| next.1.as_ref().ok()).copied()
336+
== Some('?')
337+
{
338+
skip_char_and_emit(
339+
&mut chars,
340+
FormatSpecifier::QuestionMark,
341+
&mut callback,
342+
);
343+
}
344+
334345
// can be either width (indicated by dollar sign, or type in which case
335346
// the next sign has to be `}`)
336347
let next =
337348
chars.peek().and_then(|next| next.1.as_ref().ok()).copied();
349+
338350
match next {
339351
Some('$') => skip_char_and_emit(
340352
&mut chars,
@@ -417,6 +429,16 @@ pub trait HasFormatSpecifier: AstToken {
417429
}
418430
c if c == '_' || c.is_alphabetic() => {
419431
read_identifier(&mut chars, &mut callback);
432+
433+
if chars.peek().and_then(|next| next.1.as_ref().ok()).copied()
434+
== Some('?')
435+
{
436+
skip_char_and_emit(
437+
&mut chars,
438+
FormatSpecifier::QuestionMark,
439+
&mut callback,
440+
);
441+
}
420442
}
421443
_ => {}
422444
}

0 commit comments

Comments
 (0)