Skip to content

Commit 56ce34c

Browse files
committed
Correctly flag 'lifetime definitions as definitions
1 parent 5ebfcb9 commit 56ce34c

File tree

6 files changed

+47
-40
lines changed

6 files changed

+47
-40
lines changed

crates/ra_ide/src/snapshots/highlighting.html

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
body { margin: 0; }
44
pre { color: #DCDCCC; background: #3F3F3F; font-size: 22px; padding: 0.4em; }
55

6-
6+
.lifetime { color: #DFAF8F; font-style: italic; }
77
.comment { color: #7F9F7F; }
88
.struct, .enum { color: #7CB8BB; }
99
.enum_variant { color: #BDE0F3; }
@@ -27,55 +27,54 @@
2727
.control { font-style: italic; }
2828
</style>
2929
<pre><code><span class="attribute">#</span><span class="attribute">[</span><span class="attribute">derive</span><span class="attribute">(</span><span class="attribute">Clone</span><span class="attribute">,</span><span class="attribute"> </span><span class="attribute">Debug</span><span class="attribute">)</span><span class="attribute">]</span>
30-
<span class="keyword">struct</span> <span class="struct">Foo</span> {
31-
<span class="keyword">pub</span> <span class="field">x</span>: <span class="builtin_type">i32</span>,
32-
<span class="keyword">pub</span> <span class="field">y</span>: <span class="builtin_type">i32</span>,
30+
<span class="keyword">struct</span> <span class="struct declaration">Foo</span> {
31+
<span class="keyword">pub</span> <span class="field declaration">x</span>: <span class="builtin_type">i32</span>,
32+
<span class="keyword">pub</span> <span class="field declaration">y</span>: <span class="builtin_type">i32</span>,
3333
}
3434

35-
<span class="keyword">fn</span> <span class="function">foo</span>&lt;<span class="type_param">T</span>&gt;() -&gt; <span class="type_param">T</span> {
36-
<span class="macro">unimplemented</span><span class="macro">!</span>();
37-
<span class="function">foo</span>::&lt;<span class="builtin_type">i32</span>&gt;();
35+
<span class="keyword">fn</span> <span class="function declaration">foo</span>&lt;<span class="lifetime declaration">'a</span>, <span class="type_param declaration">T</span>&gt;() -&gt; <span class="type_param">T</span> {
36+
<span class="function">foo</span>::&lt;<span class="lifetime">'a</span>, <span class="builtin_type">i32</span>&gt;()
3837
}
3938

4039
<span class="macro">macro_rules</span><span class="macro">!</span> def_fn {
4140
($($tt:tt)*) =&gt; {$($tt)*}
4241
}
4342

4443
<span class="macro">def_fn</span><span class="macro">!</span> {
45-
<span class="keyword">fn</span> <span class="function">bar</span>() -&gt; <span class="builtin_type">u32</span> {
44+
<span class="keyword">fn</span> <span class="function declaration">bar</span>() -&gt; <span class="builtin_type">u32</span> {
4645
<span class="numeric_literal">100</span>
4746
}
4847
}
4948

5049
<span class="comment">// comment</span>
51-
<span class="keyword">fn</span> <span class="function">main</span>() {
50+
<span class="keyword">fn</span> <span class="function declaration">main</span>() {
5251
<span class="macro">println</span><span class="macro">!</span>(<span class="string_literal">"Hello, {}!"</span>, <span class="numeric_literal">92</span>);
5352

54-
<span class="keyword">let</span> <span class="keyword">mut</span> <span class="variable mutable">vec</span> = Vec::new();
53+
<span class="keyword">let</span> <span class="keyword">mut</span> <span class="variable declaration mutable">vec</span> = Vec::new();
5554
<span class="keyword control">if</span> <span class="keyword">true</span> {
56-
<span class="keyword">let</span> <span class="variable">x</span> = <span class="numeric_literal">92</span>;
55+
<span class="keyword">let</span> <span class="variable declaration">x</span> = <span class="numeric_literal">92</span>;
5756
<span class="variable mutable">vec</span>.push(<span class="struct">Foo</span> { <span class="field">x</span>, <span class="field">y</span>: <span class="numeric_literal">1</span> });
5857
}
5958
<span class="keyword unsafe">unsafe</span> { <span class="variable mutable">vec</span>.set_len(<span class="numeric_literal">0</span>); }
6059

61-
<span class="keyword">let</span> <span class="keyword">mut</span> <span class="variable mutable">x</span> = <span class="numeric_literal">42</span>;
62-
<span class="keyword">let</span> <span class="variable mutable">y</span> = &<span class="keyword">mut</span> <span class="variable mutable">x</span>;
63-
<span class="keyword">let</span> <span class="variable">z</span> = &<span class="variable mutable">y</span>;
60+
<span class="keyword">let</span> <span class="keyword">mut</span> <span class="variable declaration mutable">x</span> = <span class="numeric_literal">42</span>;
61+
<span class="keyword">let</span> <span class="variable declaration mutable">y</span> = &<span class="keyword">mut</span> <span class="variable mutable">x</span>;
62+
<span class="keyword">let</span> <span class="variable declaration">z</span> = &<span class="variable mutable">y</span>;
6463

6564
<span class="variable mutable">y</span>;
6665
}
6766

68-
<span class="keyword">enum</span> <span class="enum">Option</span>&lt;<span class="type_param">T</span>&gt; {
69-
<span class="enum_variant">Some</span>(<span class="type_param">T</span>),
70-
<span class="enum_variant">None</span>,
67+
<span class="keyword">enum</span> <span class="enum declaration">Option</span>&lt;<span class="type_param declaration">T</span>&gt; {
68+
<span class="enum_variant declaration">Some</span>(<span class="type_param">T</span>),
69+
<span class="enum_variant declaration">None</span>,
7170
}
7271
<span class="keyword">use</span> <span class="enum">Option</span>::*;
7372

74-
<span class="keyword">impl</span>&lt;<span class="type_param">T</span>&gt; <span class="enum">Option</span>&lt;<span class="type_param">T</span>&gt; {
75-
<span class="keyword">fn</span> <span class="function">and</span>&lt;<span class="type_param">U</span>&gt;(<span class="keyword">self</span>, <span class="variable">other</span>: <span class="enum">Option</span>&lt;<span class="type_param">U</span>&gt;) -&gt; <span class="enum">Option</span>&lt;(<span class="type_param">T</span>, <span class="type_param">U</span>)&gt; {
73+
<span class="keyword">impl</span>&lt;<span class="type_param declaration">T</span>&gt; <span class="enum">Option</span>&lt;<span class="type_param">T</span>&gt; {
74+
<span class="keyword">fn</span> <span class="function declaration">and</span>&lt;<span class="type_param declaration">U</span>&gt;(<span class="keyword">self</span>, <span class="variable declaration">other</span>: <span class="enum">Option</span>&lt;<span class="type_param">U</span>&gt;) -&gt; <span class="enum">Option</span>&lt;(<span class="type_param">T</span>, <span class="type_param">U</span>)&gt; {
7675
<span class="keyword control">match</span> <span class="variable">other</span> {
77-
<span class="enum_variant">None</span> =&gt; <span class="macro">todo</span><span class="macro">!</span>(),
78-
<span class="variable">Nope</span> =&gt; <span class="variable">Nope</span>,
76+
<span class="enum_variant">None</span> =&gt; <span class="macro">unimplemented</span><span class="macro">!</span>(),
77+
<span class="variable declaration">Nope</span> =&gt; <span class="variable">Nope</span>,
7978
}
8079
}
8180
}</code></pre>

crates/ra_ide/src/snapshots/rainbow_highlighting.html

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
body { margin: 0; }
44
pre { color: #DCDCCC; background: #3F3F3F; font-size: 22px; padding: 0.4em; }
55

6-
6+
.lifetime { color: #DFAF8F; font-style: italic; }
77
.comment { color: #7F9F7F; }
88
.struct, .enum { color: #7CB8BB; }
99
.enum_variant { color: #BDE0F3; }
@@ -26,15 +26,15 @@
2626
.keyword.unsafe { color: #BC8383; font-weight: bold; }
2727
.control { font-style: italic; }
2828
</style>
29-
<pre><code><span class="keyword">fn</span> <span class="function">main</span>() {
30-
<span class="keyword">let</span> <span class="variable" data-binding-hash="8121853618659664005" style="color: hsl(261,57%,61%);">hello</span> = <span class="string_literal">"hello"</span>;
31-
<span class="keyword">let</span> <span class="variable" data-binding-hash="2705725358298919760" style="color: hsl(17,51%,74%);">x</span> = <span class="variable" data-binding-hash="8121853618659664005" style="color: hsl(261,57%,61%);">hello</span>.to_string();
32-
<span class="keyword">let</span> <span class="variable" data-binding-hash="3365759661443752373" style="color: hsl(127,76%,66%);">y</span> = <span class="variable" data-binding-hash="8121853618659664005" style="color: hsl(261,57%,61%);">hello</span>.to_string();
29+
<pre><code><span class="keyword">fn</span> <span class="function declaration">main</span>() {
30+
<span class="keyword">let</span> <span class="variable declaration" data-binding-hash="8121853618659664005" style="color: hsl(261,57%,61%);">hello</span> = <span class="string_literal">"hello"</span>;
31+
<span class="keyword">let</span> <span class="variable declaration" data-binding-hash="2705725358298919760" style="color: hsl(17,51%,74%);">x</span> = <span class="variable" data-binding-hash="8121853618659664005" style="color: hsl(261,57%,61%);">hello</span>.to_string();
32+
<span class="keyword">let</span> <span class="variable declaration" data-binding-hash="3365759661443752373" style="color: hsl(127,76%,66%);">y</span> = <span class="variable" data-binding-hash="8121853618659664005" style="color: hsl(261,57%,61%);">hello</span>.to_string();
3333

34-
<span class="keyword">let</span> <span class="variable" data-binding-hash="794745962933817518" style="color: hsl(19,74%,76%);">x</span> = <span class="string_literal">"other color please!"</span>;
35-
<span class="keyword">let</span> <span class="variable" data-binding-hash="6717528807933952652" style="color: hsl(85,49%,84%);">y</span> = <span class="variable" data-binding-hash="794745962933817518" style="color: hsl(19,74%,76%);">x</span>.to_string();
34+
<span class="keyword">let</span> <span class="variable declaration" data-binding-hash="794745962933817518" style="color: hsl(19,74%,76%);">x</span> = <span class="string_literal">"other color please!"</span>;
35+
<span class="keyword">let</span> <span class="variable declaration" data-binding-hash="6717528807933952652" style="color: hsl(85,49%,84%);">y</span> = <span class="variable" data-binding-hash="794745962933817518" style="color: hsl(19,74%,76%);">x</span>.to_string();
3636
}
3737

38-
<span class="keyword">fn</span> <span class="function">bar</span>() {
39-
<span class="keyword">let</span> <span class="keyword">mut</span> <span class="variable mutable" data-binding-hash="8121853618659664005" style="color: hsl(261,57%,61%);">hello</span> = <span class="string_literal">"hello"</span>;
38+
<span class="keyword">fn</span> <span class="function declaration">bar</span>() {
39+
<span class="keyword">let</span> <span class="keyword">mut</span> <span class="variable declaration mutable" data-binding-hash="8121853618659664005" style="color: hsl(261,57%,61%);">hello</span> = <span class="string_literal">"hello"</span>;
4040
}</code></pre>

crates/ra_ide/src/syntax_highlighting.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -214,8 +214,13 @@ fn highlight_element(
214214
INT_NUMBER | FLOAT_NUMBER => HighlightTag::NumericLiteral.into(),
215215
BYTE => HighlightTag::ByteLiteral.into(),
216216
CHAR => HighlightTag::CharLiteral.into(),
217-
// FIXME: set Declaration for decls
218-
LIFETIME => HighlightTag::Lifetime.into(),
217+
LIFETIME => {
218+
let h = Highlight::new(HighlightTag::Lifetime);
219+
dbg!(match element.parent().map(|it| it.kind()) {
220+
Some(LIFETIME_PARAM) | Some(LABEL) => h | HighlightModifier::Definition,
221+
_ => h,
222+
})
223+
}
219224

220225
k if k.is_keyword() => {
221226
let h = Highlight::new(HighlightTag::Keyword);

crates/ra_ide/src/syntax_highlighting/html.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ const STYLE: &str = "
8080
body { margin: 0; }
8181
pre { color: #DCDCCC; background: #3F3F3F; font-size: 22px; padding: 0.4em; }
8282
83-
83+
.lifetime { color: #DFAF8F; font-style: italic; }
8484
.comment { color: #7F9F7F; }
8585
.struct, .enum { color: #7CB8BB; }
8686
.enum_variant { color: #BDE0F3; }

crates/ra_ide/src/syntax_highlighting/tags.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,12 @@ impl fmt::Display for HighlightTag {
9090
}
9191

9292
impl HighlightModifier {
93-
const ALL: &'static [HighlightModifier] =
94-
&[HighlightModifier::Mutable, HighlightModifier::Unsafe, HighlightModifier::Control];
93+
const ALL: &'static [HighlightModifier] = &[
94+
HighlightModifier::Control,
95+
HighlightModifier::Definition,
96+
HighlightModifier::Mutable,
97+
HighlightModifier::Unsafe,
98+
];
9599

96100
fn as_str(self) -> &'static str {
97101
match self {

crates/ra_ide/src/syntax_highlighting/tests.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,8 @@ struct Foo {
1717
pub y: i32,
1818
}
1919
20-
fn foo<T>() -> T {
21-
unimplemented!();
22-
foo::<i32>();
20+
fn foo<'a, T>() -> T {
21+
foo::<'a, i32>()
2322
}
2423
2524
macro_rules! def_fn {
@@ -59,7 +58,7 @@ use Option::*;
5958
impl<T> Option<T> {
6059
fn and<U>(self, other: Option<U>) -> Option<(T, U)> {
6160
match other {
62-
None => todo!(),
61+
None => unimplemented!(),
6362
Nope => Nope,
6463
}
6564
}
@@ -130,5 +129,5 @@ fn test_ranges() {
130129
.highlight_range(FileRange { file_id, range: TextRange::offset_len(82.into(), 1.into()) })
131130
.unwrap();
132131

133-
assert_eq!(&highlights[0].highlight.to_string(), "field");
132+
assert_eq!(&highlights[0].highlight.to_string(), "field.declaration");
134133
}

0 commit comments

Comments
 (0)