Skip to content

Commit 8ded3ec

Browse files
committed
fix: Fix semantic highlighting breaking for lifetimes in macros
1 parent 59088d8 commit 8ded3ec

File tree

3 files changed

+82
-0
lines changed

3 files changed

+82
-0
lines changed

crates/ide/src/syntax_highlighting.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -323,6 +323,7 @@ fn traverse(
323323
(T![ident], NAME | NAME_REF) => parent.into(),
324324
(T![self] | T![super] | T![crate], NAME_REF) => parent.into(),
325325
(INT_NUMBER, NAME_REF) => parent.into(),
326+
(LIFETIME_IDENT, LIFETIME) => parent.into(),
326327
_ => token.into(),
327328
}
328329
}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
2+
<style>
3+
body { margin: 0; }
4+
pre { color: #DCDCCC; background: #3F3F3F; font-size: 22px; padding: 0.4em; }
5+
6+
.lifetime { color: #DFAF8F; font-style: italic; }
7+
.label { color: #DFAF8F; font-style: italic; }
8+
.comment { color: #7F9F7F; }
9+
.documentation { color: #629755; }
10+
.intra_doc_link { font-style: italic; }
11+
.injected { opacity: 0.65 ; }
12+
.struct, .enum { color: #7CB8BB; }
13+
.enum_variant { color: #BDE0F3; }
14+
.string_literal { color: #CC9393; }
15+
.field { color: #94BFF3; }
16+
.function { color: #93E0E3; }
17+
.function.unsafe { color: #BC8383; }
18+
.trait.unsafe { color: #BC8383; }
19+
.operator.unsafe { color: #BC8383; }
20+
.mutable.unsafe { color: #BC8383; text-decoration: underline; }
21+
.keyword.unsafe { color: #BC8383; font-weight: bold; }
22+
.parameter { color: #94BFF3; }
23+
.text { color: #DCDCCC; }
24+
.type { color: #7CB8BB; }
25+
.builtin_type { color: #8CD0D3; }
26+
.type_param { color: #DFAF8F; }
27+
.attribute { color: #94BFF3; }
28+
.numeric_literal { color: #BFEBBF; }
29+
.bool_literal { color: #BFE6EB; }
30+
.macro { color: #94BFF3; }
31+
.derive { color: #94BFF3; font-style: italic; }
32+
.module { color: #AFD8AF; }
33+
.value_param { color: #DCDCCC; }
34+
.variable { color: #DCDCCC; }
35+
.format_specifier { color: #CC696B; }
36+
.mutable { text-decoration: underline; }
37+
.escape_sequence { color: #94BFF3; }
38+
.keyword { color: #F0DFAF; font-weight: bold; }
39+
.control { font-style: italic; }
40+
.reference { font-style: italic; font-weight: bold; }
41+
42+
.unresolved_reference { color: #FC5555; text-decoration: wavy underline; }
43+
</style>
44+
<pre><code>
45+
<span class="attribute_bracket attribute">#</span><span class="attribute_bracket attribute">[</span><span class="attribute attribute default_library library">derive</span><span class="parenthesis attribute">(</span><span class="parenthesis attribute">)</span><span class="attribute_bracket attribute">]</span>
46+
<span class="keyword">struct</span> <span class="struct declaration">Foo</span><span class="angle">&lt;</span><span class="lifetime declaration">'a</span><span class="comma">,</span> <span class="lifetime declaration">'b</span><span class="comma">,</span> <span class="lifetime declaration">'c</span><span class="angle">&gt;</span> <span class="keyword">where</span> <span class="lifetime">'a</span><span class="colon">:</span> <span class="lifetime">'a</span><span class="comma">,</span> <span class="lifetime">'static</span><span class="colon">:</span> <span class="lifetime">'static</span> <span class="brace">{</span>
47+
<span class="field declaration">field</span><span class="colon">:</span> <span class="operator">&</span><span class="lifetime">'a</span> <span class="parenthesis">(</span><span class="parenthesis">)</span><span class="comma">,</span>
48+
<span class="field declaration">field2</span><span class="colon">:</span> <span class="operator">&</span><span class="lifetime">'static</span> <span class="parenthesis">(</span><span class="parenthesis">)</span><span class="comma">,</span>
49+
<span class="brace">}</span>
50+
<span class="keyword">impl</span><span class="angle">&lt;</span><span class="lifetime declaration">'a</span><span class="angle">&gt;</span> <span class="struct">Foo</span><span class="angle">&lt;</span><span class="lifetime">'_</span><span class="comma">,</span> <span class="lifetime">'a</span><span class="comma">,</span> <span class="lifetime">'static</span><span class="angle">&gt;</span>
51+
<span class="keyword">where</span>
52+
<span class="lifetime">'a</span><span class="colon">:</span> <span class="lifetime">'a</span><span class="comma">,</span>
53+
<span class="lifetime">'static</span><span class="colon">:</span> <span class="lifetime">'static</span>
54+
<span class="brace">{</span>
55+
56+
<span class="brace">}</span>
57+
</code></pre>

crates/ide/src/syntax_highlighting/tests.rs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,30 @@ macro_rules! die {
312312
);
313313
}
314314

315+
#[test]
316+
fn test_lifetime_highlighting() {
317+
check_highlighting(
318+
r#"
319+
//- minicore: derive
320+
321+
#[derive()]
322+
struct Foo<'a, 'b, 'c> where 'a: 'a, 'static: 'static {
323+
field: &'a (),
324+
field2: &'static (),
325+
}
326+
impl<'a> Foo<'_, 'a, 'static>
327+
where
328+
'a: 'a,
329+
'static: 'static
330+
{
331+
332+
}
333+
"#,
334+
expect_file!["./test_data/highlight_lifetimes.html"],
335+
false,
336+
);
337+
}
338+
315339
#[test]
316340
fn test_string_highlighting() {
317341
// The format string detection is based on macro-expansion,

0 commit comments

Comments
 (0)