Skip to content

Commit 20f8219

Browse files
bors[bot]Veykril
andauthored
Merge #8637
8637: Tag `yield` and `await` as ControlFlow in semantic highlighting r=Veykril a=Veykril and shuffle some code around Closes #8634 bors r+ Co-authored-by: Lukas Wirth <lukastw97@gmail.com>
2 parents 85bab75 + 1e88f5e commit 20f8219

File tree

7 files changed

+147
-150
lines changed

7 files changed

+147
-150
lines changed

crates/ide/src/syntax_highlighting/highlight.rs

Lines changed: 78 additions & 104 deletions
Large diffs are not rendered by default.

crates/ide/src/syntax_highlighting/tags.rs

Lines changed: 37 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -40,28 +40,33 @@ pub enum HlTag {
4040
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
4141
#[repr(u8)]
4242
pub enum HlMod {
43+
/// Used for items in traits and impls.
44+
Associated = 0,
4345
/// Used to differentiate individual elements within attributes.
44-
Attribute = 0,
46+
Attribute,
47+
/// Callable item or value.
48+
Callable,
49+
/// Value that is being consumed in a function call
50+
Consuming,
4551
/// Used with keywords like `if` and `break`.
4652
ControlFlow,
4753
/// `foo` in `fn foo(x: i32)` is a definition, `foo` in `foo(90 + 2)` is
4854
/// not.
4955
Definition,
56+
/// Doc-strings like this one.
5057
Documentation,
58+
/// Highlighting injection like rust code in doc strings or ra_fixture.
5159
Injected,
52-
Mutable,
53-
Consuming,
54-
Callable,
55-
/// Used for associated functions
56-
Static,
57-
/// Used for items in impls&traits.
58-
Associated,
5960
/// Used for intra doc links in doc injection.
6061
IntraDocLink,
62+
/// Mutable binding.
63+
Mutable,
64+
/// Used for associated functions.
65+
Static,
6166
/// Used for items in traits and trait impls.
6267
Trait,
63-
64-
/// Keep this last!
68+
// Keep this last!
69+
/// Used for unsafe functions, mutable statics, union accesses and unsafe operations.
6570
Unsafe,
6671
}
6772

@@ -169,17 +174,17 @@ impl fmt::Display for HlTag {
169174

170175
impl HlMod {
171176
const ALL: &'static [HlMod; HlMod::Unsafe as u8 as usize + 1] = &[
177+
HlMod::Associated,
172178
HlMod::Attribute,
179+
HlMod::Callable,
180+
HlMod::Consuming,
173181
HlMod::ControlFlow,
174182
HlMod::Definition,
175183
HlMod::Documentation,
176-
HlMod::IntraDocLink,
177184
HlMod::Injected,
185+
HlMod::IntraDocLink,
178186
HlMod::Mutable,
179-
HlMod::Consuming,
180-
HlMod::Callable,
181187
HlMod::Static,
182-
HlMod::Associated,
183188
HlMod::Trait,
184189
HlMod::Unsafe,
185190
];
@@ -229,6 +234,24 @@ impl From<HlTag> for Highlight {
229234
}
230235
}
231236

237+
impl From<HlOperator> for Highlight {
238+
fn from(op: HlOperator) -> Highlight {
239+
Highlight::new(HlTag::Operator(op))
240+
}
241+
}
242+
243+
impl From<HlPunct> for Highlight {
244+
fn from(punct: HlPunct) -> Highlight {
245+
Highlight::new(HlTag::Punctuation(punct))
246+
}
247+
}
248+
249+
impl From<SymbolKind> for Highlight {
250+
fn from(sym: SymbolKind) -> Highlight {
251+
Highlight::new(HlTag::Symbol(sym))
252+
}
253+
}
254+
232255
impl Highlight {
233256
pub(crate) fn new(tag: HlTag) -> Highlight {
234257
Highlight { tag, mods: HlMods::default() }

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,17 +42,17 @@
4242
<span class="keyword">struct</span> <span class="struct declaration">foo</span> <span class="brace">{</span><span class="brace">}</span>
4343

4444
<span class="keyword">impl</span> <span class="struct">foo</span> <span class="brace">{</span>
45-
<span class="keyword">pub</span> <span class="keyword">fn</span> <span class="function declaration static associated">is_static</span><span class="parenthesis">(</span><span class="parenthesis">)</span> <span class="brace">{</span><span class="brace">}</span>
46-
<span class="keyword">pub</span> <span class="keyword">fn</span> <span class="function declaration associated">is_not_static</span><span class="parenthesis">(</span><span class="operator">&</span><span class="self_keyword declaration">self</span><span class="parenthesis">)</span> <span class="brace">{</span><span class="brace">}</span>
45+
<span class="keyword">pub</span> <span class="keyword">fn</span> <span class="function associated declaration static">is_static</span><span class="parenthesis">(</span><span class="parenthesis">)</span> <span class="brace">{</span><span class="brace">}</span>
46+
<span class="keyword">pub</span> <span class="keyword">fn</span> <span class="function associated declaration">is_not_static</span><span class="parenthesis">(</span><span class="operator">&</span><span class="self_keyword declaration">self</span><span class="parenthesis">)</span> <span class="brace">{</span><span class="brace">}</span>
4747
<span class="brace">}</span>
4848

4949
<span class="keyword">trait</span> <span class="trait declaration">t</span> <span class="brace">{</span>
50-
<span class="keyword">fn</span> <span class="function declaration static associated trait">t_is_static</span><span class="parenthesis">(</span><span class="parenthesis">)</span> <span class="brace">{</span><span class="brace">}</span>
51-
<span class="keyword">fn</span> <span class="function declaration associated trait">t_is_not_static</span><span class="parenthesis">(</span><span class="operator">&</span><span class="self_keyword declaration">self</span><span class="parenthesis">)</span> <span class="brace">{</span><span class="brace">}</span>
50+
<span class="keyword">fn</span> <span class="function associated declaration static trait">t_is_static</span><span class="parenthesis">(</span><span class="parenthesis">)</span> <span class="brace">{</span><span class="brace">}</span>
51+
<span class="keyword">fn</span> <span class="function associated declaration trait">t_is_not_static</span><span class="parenthesis">(</span><span class="operator">&</span><span class="self_keyword declaration">self</span><span class="parenthesis">)</span> <span class="brace">{</span><span class="brace">}</span>
5252
<span class="brace">}</span>
5353

5454
<span class="keyword">impl</span> <span class="trait">t</span> <span class="keyword">for</span> <span class="struct">foo</span> <span class="brace">{</span>
55-
<span class="keyword">pub</span> <span class="keyword">fn</span> <span class="function declaration static associated trait">is_static</span><span class="parenthesis">(</span><span class="parenthesis">)</span> <span class="brace">{</span><span class="brace">}</span>
56-
<span class="keyword">pub</span> <span class="keyword">fn</span> <span class="function declaration associated trait">is_not_static</span><span class="parenthesis">(</span><span class="operator">&</span><span class="self_keyword declaration">self</span><span class="parenthesis">)</span> <span class="brace">{</span><span class="brace">}</span>
55+
<span class="keyword">pub</span> <span class="keyword">fn</span> <span class="function associated declaration static trait">is_static</span><span class="parenthesis">(</span><span class="parenthesis">)</span> <span class="brace">{</span><span class="brace">}</span>
56+
<span class="keyword">pub</span> <span class="keyword">fn</span> <span class="function associated declaration trait">is_not_static</span><span class="parenthesis">(</span><span class="operator">&</span><span class="self_keyword declaration">self</span><span class="parenthesis">)</span> <span class="brace">{</span><span class="brace">}</span>
5757
<span class="brace">}</span>
5858
</code></pre>

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
<span class="comment">// KILLER WHALE</span>
5151
<span class="comment documentation">/// </span><span class="string_literal injected"> Ishmael."</span><span class="semicolon injected">;</span>
5252
<span class="comment documentation">/// ```</span>
53-
<span class="keyword">pub</span> <span class="keyword">const</span> <span class="constant declaration associated">bar</span><span class="colon">:</span> <span class="builtin_type">bool</span> <span class="operator">=</span> <span class="bool_literal">true</span><span class="semicolon">;</span>
53+
<span class="keyword">pub</span> <span class="keyword">const</span> <span class="constant associated declaration">bar</span><span class="colon">:</span> <span class="builtin_type">bool</span> <span class="operator">=</span> <span class="bool_literal">true</span><span class="semicolon">;</span>
5454

5555
<span class="comment documentation">/// Constructs a new `Foo`.</span>
5656
<span class="comment documentation">///</span>
@@ -60,7 +60,7 @@
6060
<span class="comment documentation">/// #</span><span class="none injected"> </span><span class="attribute attribute injected">#</span><span class="attribute attribute injected">!</span><span class="attribute attribute injected">[</span><span class="function attribute injected">allow</span><span class="parenthesis attribute injected">(</span><span class="attribute attribute injected">unused_mut</span><span class="parenthesis attribute injected">)</span><span class="attribute attribute injected">]</span>
6161
<span class="comment documentation">/// </span><span class="keyword injected">let</span><span class="none injected"> </span><span class="keyword injected">mut</span><span class="none injected"> </span><span class="variable declaration injected mutable">foo</span><span class="colon injected">:</span><span class="none injected"> </span><span class="struct injected">Foo</span><span class="none injected"> </span><span class="operator injected">=</span><span class="none injected"> </span><span class="struct injected">Foo</span><span class="operator injected">::</span><span class="function injected">new</span><span class="parenthesis injected">(</span><span class="parenthesis injected">)</span><span class="semicolon injected">;</span>
6262
<span class="comment documentation">/// ```</span>
63-
<span class="keyword">pub</span> <span class="keyword">const</span> <span class="keyword">fn</span> <span class="function declaration static associated">new</span><span class="parenthesis">(</span><span class="parenthesis">)</span> <span class="operator">-&gt;</span> <span class="struct">Foo</span> <span class="brace">{</span>
63+
<span class="keyword">pub</span> <span class="keyword">const</span> <span class="keyword">fn</span> <span class="function associated declaration static">new</span><span class="parenthesis">(</span><span class="parenthesis">)</span> <span class="operator">-&gt;</span> <span class="struct">Foo</span> <span class="brace">{</span>
6464
<span class="struct">Foo</span> <span class="brace">{</span> <span class="field">bar</span><span class="colon">:</span> <span class="bool_literal">true</span> <span class="brace">}</span>
6565
<span class="brace">}</span>
6666

@@ -94,15 +94,15 @@
9494
<span class="comment documentation">/// ```sh</span>
9595
<span class="comment documentation">/// echo 1</span>
9696
<span class="comment documentation">/// ```</span>
97-
<span class="keyword">pub</span> <span class="keyword">fn</span> <span class="function declaration associated">foo</span><span class="parenthesis">(</span><span class="operator">&</span><span class="self_keyword declaration">self</span><span class="parenthesis">)</span> <span class="operator">-&gt;</span> <span class="builtin_type">bool</span> <span class="brace">{</span>
97+
<span class="keyword">pub</span> <span class="keyword">fn</span> <span class="function associated declaration">foo</span><span class="parenthesis">(</span><span class="operator">&</span><span class="self_keyword declaration">self</span><span class="parenthesis">)</span> <span class="operator">-&gt;</span> <span class="builtin_type">bool</span> <span class="brace">{</span>
9898
<span class="bool_literal">true</span>
9999
<span class="brace">}</span>
100100
<span class="brace">}</span>
101101

102-
<span class="comment documentation">/// </span><span class="struct documentation intra_doc_link injected">[`Foo`](Foo)</span><span class="comment documentation"> is a struct</span>
103-
<span class="comment documentation">/// This function is &gt; </span><span class="function documentation intra_doc_link injected">[`all_the_links`](all_the_links)</span><span class="comment documentation"> &lt;</span>
102+
<span class="comment documentation">/// </span><span class="struct documentation injected intra_doc_link">[`Foo`](Foo)</span><span class="comment documentation"> is a struct</span>
103+
<span class="comment documentation">/// This function is &gt; </span><span class="function documentation injected intra_doc_link">[`all_the_links`](all_the_links)</span><span class="comment documentation"> &lt;</span>
104104
<span class="comment documentation">/// [`noop`](noop) is a macro below</span>
105-
<span class="comment documentation">/// </span><span class="struct documentation intra_doc_link injected">[`Item`]</span><span class="comment documentation"> is a struct in the module </span><span class="module documentation intra_doc_link injected">[`module`]</span>
105+
<span class="comment documentation">/// </span><span class="struct documentation injected intra_doc_link">[`Item`]</span><span class="comment documentation"> is a struct in the module </span><span class="module documentation injected intra_doc_link">[`module`]</span>
106106
<span class="comment documentation">///</span>
107107
<span class="comment documentation">/// [`Item`]: module::Item</span>
108108
<span class="comment documentation">/// [mix_and_match]: ThisShouldntResolve</span>

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
<span class="keyword">fn</span> <span class="function declaration">main</span><span class="parenthesis">(</span><span class="parenthesis">)</span> <span class="brace">{</span>
4343
<span class="function">fixture</span><span class="parenthesis">(</span><span class="string_literal">r#"</span>
4444
<span class="keyword">trait</span> <span class="trait declaration">Foo</span> <span class="brace">{</span>
45-
<span class="keyword">fn</span> <span class="function declaration static associated trait">foo</span><span class="parenthesis">(</span><span class="parenthesis">)</span> <span class="brace">{</span>
45+
<span class="keyword">fn</span> <span class="function associated declaration static trait">foo</span><span class="parenthesis">(</span><span class="parenthesis">)</span> <span class="brace">{</span>
4646
<span class="macro">println!</span><span class="parenthesis">(</span><span class="string_literal">"2 + 2 = {}"</span><span class="comma">,</span> <span class="numeric_literal">4</span><span class="parenthesis">)</span><span class="semicolon">;</span>
4747
<span class="brace">}</span>
4848
<span class="brace">}</span><span class="string_literal">"#</span>

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
<span class="keyword">struct</span> <span class="struct declaration">HasUnsafeFn</span><span class="semicolon">;</span>
4848

4949
<span class="keyword">impl</span> <span class="struct">HasUnsafeFn</span> <span class="brace">{</span>
50-
<span class="keyword unsafe">unsafe</span> <span class="keyword">fn</span> <span class="function declaration associated unsafe">unsafe_method</span><span class="parenthesis">(</span><span class="operator">&</span><span class="self_keyword declaration">self</span><span class="parenthesis">)</span> <span class="brace">{</span><span class="brace">}</span>
50+
<span class="keyword unsafe">unsafe</span> <span class="keyword">fn</span> <span class="function associated declaration unsafe">unsafe_method</span><span class="parenthesis">(</span><span class="operator">&</span><span class="self_keyword declaration">self</span><span class="parenthesis">)</span> <span class="brace">{</span><span class="brace">}</span>
5151
<span class="brace">}</span>
5252

5353
<span class="keyword">struct</span> <span class="struct declaration">TypeForStaticMut</span> <span class="brace">{</span>
@@ -62,11 +62,11 @@
6262
<span class="brace">}</span>
6363

6464
<span class="keyword">trait</span> <span class="trait declaration">DoTheAutoref</span> <span class="brace">{</span>
65-
<span class="keyword">fn</span> <span class="function declaration associated trait">calls_autoref</span><span class="parenthesis">(</span><span class="operator">&</span><span class="self_keyword declaration">self</span><span class="parenthesis">)</span><span class="semicolon">;</span>
65+
<span class="keyword">fn</span> <span class="function associated declaration trait">calls_autoref</span><span class="parenthesis">(</span><span class="operator">&</span><span class="self_keyword declaration">self</span><span class="parenthesis">)</span><span class="semicolon">;</span>
6666
<span class="brace">}</span>
6767

6868
<span class="keyword">impl</span> <span class="trait">DoTheAutoref</span> <span class="keyword">for</span> <span class="builtin_type">u16</span> <span class="brace">{</span>
69-
<span class="keyword">fn</span> <span class="function declaration associated trait">calls_autoref</span><span class="parenthesis">(</span><span class="operator">&</span><span class="self_keyword declaration">self</span><span class="parenthesis">)</span> <span class="brace">{</span><span class="brace">}</span>
69+
<span class="keyword">fn</span> <span class="function associated declaration trait">calls_autoref</span><span class="parenthesis">(</span><span class="operator">&</span><span class="self_keyword declaration">self</span><span class="parenthesis">)</span> <span class="brace">{</span><span class="brace">}</span>
7070
<span class="brace">}</span>
7171

7272
<span class="keyword">fn</span> <span class="function declaration">main</span><span class="parenthesis">(</span><span class="parenthesis">)</span> <span class="brace">{</span>

0 commit comments

Comments
 (0)