Skip to content

Commit a13947a

Browse files
committed
Use more Rustic highlighting specifiers
*Method* works for OO languages, but in rust we can also have associated constants & types, so let's move this to a modifier.
1 parent bd270cb commit a13947a

File tree

8 files changed

+69
-47
lines changed

8 files changed

+69
-47
lines changed

crates/ide/src/syntax_highlighting.rs

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -736,7 +736,8 @@ fn highlight_method_call(
736736
method_call: &ast::MethodCallExpr,
737737
) -> Option<Highlight> {
738738
let func = sema.resolve_method_call(&method_call)?;
739-
let mut h = HighlightTag::Method.into();
739+
let mut h = HighlightTag::Symbol(SymbolKind::Function).into();
740+
h |= HighlightModifier::Associated;
740741
if func.is_unsafe(sema.db) || sema.is_unsafe_method_call(&method_call) {
741742
h |= HighlightModifier::Unsafe;
742743
}
@@ -765,15 +766,13 @@ fn highlight_def(db: &RootDatabase, def: Definition) -> Highlight {
765766
Definition::ModuleDef(def) => match def {
766767
hir::ModuleDef::Module(_) => HighlightTag::Symbol(SymbolKind::Module),
767768
hir::ModuleDef::Function(func) => {
768-
let mut h = if func.as_assoc_item(db).is_some() {
769+
let mut h = Highlight::new(HighlightTag::Symbol(SymbolKind::Function));
770+
if func.as_assoc_item(db).is_some() {
771+
h |= HighlightModifier::Associated;
769772
if func.self_param(db).is_none() {
770-
Highlight::from(HighlightTag::Method) | HighlightModifier::Static
771-
} else {
772-
HighlightTag::Method.into()
773+
h |= HighlightModifier::Static
773774
}
774-
} else {
775-
HighlightTag::Symbol(SymbolKind::Function).into()
776-
};
775+
}
777776
if func.is_unsafe(db) {
778777
h |= HighlightModifier::Unsafe;
779778
}
@@ -783,9 +782,21 @@ fn highlight_def(db: &RootDatabase, def: Definition) -> Highlight {
783782
hir::ModuleDef::Adt(hir::Adt::Enum(_)) => HighlightTag::Symbol(SymbolKind::Enum),
784783
hir::ModuleDef::Adt(hir::Adt::Union(_)) => HighlightTag::Symbol(SymbolKind::Union),
785784
hir::ModuleDef::EnumVariant(_) => HighlightTag::Symbol(SymbolKind::Variant),
786-
hir::ModuleDef::Const(_) => HighlightTag::Symbol(SymbolKind::Const),
785+
hir::ModuleDef::Const(konst) => {
786+
let mut h = Highlight::new(HighlightTag::Symbol(SymbolKind::Const));
787+
if konst.as_assoc_item(db).is_some() {
788+
h |= HighlightModifier::Associated
789+
}
790+
return h;
791+
}
787792
hir::ModuleDef::Trait(_) => HighlightTag::Symbol(SymbolKind::Trait),
788-
hir::ModuleDef::TypeAlias(_) => HighlightTag::Symbol(SymbolKind::TypeAlias),
793+
hir::ModuleDef::TypeAlias(type_) => {
794+
let mut h = Highlight::new(HighlightTag::Symbol(SymbolKind::TypeAlias));
795+
if type_.as_assoc_item(db).is_some() {
796+
h |= HighlightModifier::Associated
797+
}
798+
return h;
799+
}
789800
hir::ModuleDef::BuiltinType(_) => HighlightTag::BuiltinType,
790801
hir::ModuleDef::Static(s) => {
791802
let mut h = Highlight::new(HighlightTag::Symbol(SymbolKind::Static));

crates/ide/src/syntax_highlighting/tags.rs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,7 @@ pub enum HighlightTag {
3333
Operator,
3434
UnresolvedReference,
3535

36-
// FIXME: this two are random and don't fit with the others
37-
Method,
36+
// FIXME: this one is random and don't fit with the others
3837
Generic,
3938
}
4039

@@ -56,6 +55,8 @@ pub enum HighlightModifier {
5655
Callable,
5756
/// Used for associated functions
5857
Static,
58+
/// Used for items in impls&traits.
59+
Associated,
5960
}
6061

6162
impl HighlightTag {
@@ -92,7 +93,6 @@ impl HighlightTag {
9293
HighlightTag::Generic => "generic",
9394
HighlightTag::Keyword => "keyword",
9495
HighlightTag::Punctuation => "punctuation",
95-
HighlightTag::Method => "method",
9696
HighlightTag::NumericLiteral => "numeric_literal",
9797
HighlightTag::Operator => "operator",
9898
HighlightTag::StringLiteral => "string_literal",
@@ -133,6 +133,7 @@ impl HighlightModifier {
133133
HighlightModifier::Unsafe => "unsafe",
134134
HighlightModifier::Callable => "callable",
135135
HighlightModifier::Static => "static",
136+
HighlightModifier::Associated => "associated",
136137
}
137138
}
138139

@@ -199,6 +200,10 @@ impl ops::BitOr<HighlightModifier> for Highlight {
199200
}
200201

201202
impl HighlightModifiers {
203+
pub fn contains(self, m: HighlightModifier) -> bool {
204+
self.0 & m.mask() == m.mask()
205+
}
206+
202207
pub fn iter(self) -> impl Iterator<Item = HighlightModifier> {
203208
HighlightModifier::ALL.iter().copied().filter(move |it| self.0 & it.mask() == it.mask())
204209
}

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
@@ -40,17 +40,17 @@
4040
<span class="keyword">struct</span> <span class="struct declaration">foo</span> <span class="punctuation">{</span><span class="punctuation">}</span>
4141

4242
<span class="keyword">impl</span> <span class="struct">foo</span> <span class="punctuation">{</span>
43-
<span class="keyword">pub</span> <span class="keyword">fn</span> <span class="method declaration static">is_static</span><span class="punctuation">(</span><span class="punctuation">)</span> <span class="punctuation">{</span><span class="punctuation">}</span>
44-
<span class="keyword">pub</span> <span class="keyword">fn</span> <span class="method declaration">is_not_static</span><span class="punctuation">(</span><span class="operator">&</span><span class="self_keyword">self</span><span class="punctuation">)</span> <span class="punctuation">{</span><span class="punctuation">}</span>
43+
<span class="keyword">pub</span> <span class="keyword">fn</span> <span class="function declaration static">is_static</span><span class="punctuation">(</span><span class="punctuation">)</span> <span class="punctuation">{</span><span class="punctuation">}</span>
44+
<span class="keyword">pub</span> <span class="keyword">fn</span> <span class="function declaration">is_not_static</span><span class="punctuation">(</span><span class="operator">&</span><span class="self_keyword">self</span><span class="punctuation">)</span> <span class="punctuation">{</span><span class="punctuation">}</span>
4545
<span class="punctuation">}</span>
4646

4747
<span class="keyword">trait</span> <span class="trait declaration">t</span> <span class="punctuation">{</span>
48-
<span class="keyword">fn</span> <span class="method declaration static">t_is_static</span><span class="punctuation">(</span><span class="punctuation">)</span> <span class="punctuation">{</span><span class="punctuation">}</span>
49-
<span class="keyword">fn</span> <span class="method declaration">t_is_not_static</span><span class="punctuation">(</span><span class="operator">&</span><span class="self_keyword">self</span><span class="punctuation">)</span> <span class="punctuation">{</span><span class="punctuation">}</span>
48+
<span class="keyword">fn</span> <span class="function declaration static">t_is_static</span><span class="punctuation">(</span><span class="punctuation">)</span> <span class="punctuation">{</span><span class="punctuation">}</span>
49+
<span class="keyword">fn</span> <span class="function declaration">t_is_not_static</span><span class="punctuation">(</span><span class="operator">&</span><span class="self_keyword">self</span><span class="punctuation">)</span> <span class="punctuation">{</span><span class="punctuation">}</span>
5050
<span class="punctuation">}</span>
5151

5252
<span class="keyword">impl</span> <span class="trait">t</span> <span class="keyword">for</span> <span class="struct">foo</span> <span class="punctuation">{</span>
53-
<span class="keyword">pub</span> <span class="keyword">fn</span> <span class="method declaration static">is_static</span><span class="punctuation">(</span><span class="punctuation">)</span> <span class="punctuation">{</span><span class="punctuation">}</span>
54-
<span class="keyword">pub</span> <span class="keyword">fn</span> <span class="method declaration">is_not_static</span><span class="punctuation">(</span><span class="operator">&</span><span class="self_keyword">self</span><span class="punctuation">)</span> <span class="punctuation">{</span><span class="punctuation">}</span>
53+
<span class="keyword">pub</span> <span class="keyword">fn</span> <span class="function declaration static">is_static</span><span class="punctuation">(</span><span class="punctuation">)</span> <span class="punctuation">{</span><span class="punctuation">}</span>
54+
<span class="keyword">pub</span> <span class="keyword">fn</span> <span class="function declaration">is_not_static</span><span class="punctuation">(</span><span class="operator">&</span><span class="self_keyword">self</span><span class="punctuation">)</span> <span class="punctuation">{</span><span class="punctuation">}</span>
5555
<span class="punctuation">}</span>
5656
</code></pre>

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@
5353
<span class="comment documentation">/// #</span><span class="generic 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="punctuation attribute injected">(</span><span class="attribute attribute injected">unused_mut</span><span class="punctuation attribute injected">)</span><span class="attribute attribute injected">]</span>
5454
<span class="comment documentation">/// </span><span class="keyword injected">let</span><span class="generic injected"> </span><span class="keyword injected">mut</span><span class="generic injected"> </span><span class="variable declaration injected mutable">foo</span><span class="punctuation injected">:</span><span class="generic injected"> </span><span class="struct injected">Foo</span><span class="generic injected"> </span><span class="operator injected">=</span><span class="generic injected"> </span><span class="struct injected">Foo</span><span class="operator injected">::</span><span class="function injected">new</span><span class="punctuation injected">(</span><span class="punctuation injected">)</span><span class="punctuation injected">;</span><span class="punctuation injected">
5555
</span> <span class="comment documentation">/// ```</span>
56-
<span class="keyword">pub</span> <span class="keyword">const</span> <span class="keyword">fn</span> <span class="method declaration static">new</span><span class="punctuation">(</span><span class="punctuation">)</span> <span class="operator">-&gt;</span> <span class="struct">Foo</span> <span class="punctuation">{</span>
56+
<span class="keyword">pub</span> <span class="keyword">const</span> <span class="keyword">fn</span> <span class="function declaration static">new</span><span class="punctuation">(</span><span class="punctuation">)</span> <span class="operator">-&gt;</span> <span class="struct">Foo</span> <span class="punctuation">{</span>
5757
<span class="struct">Foo</span> <span class="punctuation">{</span> <span class="field">bar</span><span class="punctuation">:</span> <span class="bool_literal">true</span> <span class="punctuation">}</span>
5858
<span class="punctuation">}</span>
5959

@@ -87,7 +87,7 @@
8787
<span class="comment documentation">/// ```sh</span>
8888
<span class="comment documentation">/// echo 1</span>
8989
<span class="comment documentation">/// ```</span>
90-
<span class="keyword">pub</span> <span class="keyword">fn</span> <span class="method declaration">foo</span><span class="punctuation">(</span><span class="operator">&</span><span class="self_keyword">self</span><span class="punctuation">)</span> <span class="operator">-&gt;</span> <span class="builtin_type">bool</span> <span class="punctuation">{</span>
90+
<span class="keyword">pub</span> <span class="keyword">fn</span> <span class="function declaration">foo</span><span class="punctuation">(</span><span class="operator">&</span><span class="self_keyword">self</span><span class="punctuation">)</span> <span class="operator">-&gt;</span> <span class="builtin_type">bool</span> <span class="punctuation">{</span>
9191
<span class="bool_literal">true</span>
9292
<span class="punctuation">}</span>
9393
<span class="punctuation">}</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
@@ -40,7 +40,7 @@
4040
<span class="keyword">fn</span> <span class="function declaration">main</span><span class="punctuation">(</span><span class="punctuation">)</span> <span class="punctuation">{</span>
4141
<span class="function">fixture</span><span class="punctuation">(</span><span class="string_literal">r#"</span>
4242
<span class="keyword">trait</span> <span class="trait declaration">Foo</span> <span class="punctuation">{</span>
43-
<span class="keyword">fn</span> <span class="method declaration static">foo</span><span class="punctuation">(</span><span class="punctuation">)</span> <span class="punctuation">{</span>
43+
<span class="keyword">fn</span> <span class="function declaration static">foo</span><span class="punctuation">(</span><span class="punctuation">)</span> <span class="punctuation">{</span>
4444
<span class="macro">println!</span><span class="punctuation">(</span><span class="string_literal">"2 + 2 = {}"</span><span class="punctuation">,</span> <span class="numeric_literal">4</span><span class="punctuation">)</span><span class="punctuation">;</span>
4545
<span class="punctuation">}</span>
4646
<span class="punctuation">}</span><span class="string_literal">"#</span>

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
<span class="keyword">struct</span> <span class="struct declaration">HasUnsafeFn</span><span class="punctuation">;</span>
4646

4747
<span class="keyword">impl</span> <span class="struct">HasUnsafeFn</span> <span class="punctuation">{</span>
48-
<span class="keyword unsafe">unsafe</span> <span class="keyword">fn</span> <span class="method declaration unsafe">unsafe_method</span><span class="punctuation">(</span><span class="operator">&</span><span class="self_keyword">self</span><span class="punctuation">)</span> <span class="punctuation">{</span><span class="punctuation">}</span>
48+
<span class="keyword unsafe">unsafe</span> <span class="keyword">fn</span> <span class="function declaration unsafe">unsafe_method</span><span class="punctuation">(</span><span class="operator">&</span><span class="self_keyword">self</span><span class="punctuation">)</span> <span class="punctuation">{</span><span class="punctuation">}</span>
4949
<span class="punctuation">}</span>
5050

5151
<span class="keyword">struct</span> <span class="struct declaration">TypeForStaticMut</span> <span class="punctuation">{</span>
@@ -60,11 +60,11 @@
6060
<span class="punctuation">}</span>
6161

6262
<span class="keyword">trait</span> <span class="trait declaration">DoTheAutoref</span> <span class="punctuation">{</span>
63-
<span class="keyword">fn</span> <span class="method declaration">calls_autoref</span><span class="punctuation">(</span><span class="operator">&</span><span class="self_keyword">self</span><span class="punctuation">)</span><span class="punctuation">;</span>
63+
<span class="keyword">fn</span> <span class="function declaration">calls_autoref</span><span class="punctuation">(</span><span class="operator">&</span><span class="self_keyword">self</span><span class="punctuation">)</span><span class="punctuation">;</span>
6464
<span class="punctuation">}</span>
6565

6666
<span class="keyword">impl</span> <span class="trait">DoTheAutoref</span> <span class="keyword">for</span> <span class="builtin_type">u16</span> <span class="punctuation">{</span>
67-
<span class="keyword">fn</span> <span class="method declaration">calls_autoref</span><span class="punctuation">(</span><span class="operator">&</span><span class="self_keyword">self</span><span class="punctuation">)</span> <span class="punctuation">{</span><span class="punctuation">}</span>
67+
<span class="keyword">fn</span> <span class="function declaration">calls_autoref</span><span class="punctuation">(</span><span class="operator">&</span><span class="self_keyword">self</span><span class="punctuation">)</span> <span class="punctuation">{</span><span class="punctuation">}</span>
6868
<span class="punctuation">}</span>
6969

7070
<span class="keyword">fn</span> <span class="function declaration">main</span><span class="punctuation">(</span><span class="punctuation">)</span> <span class="punctuation">{</span>
@@ -78,7 +78,7 @@
7878
<span class="union">Union</span> <span class="punctuation">{</span> <span class="field unsafe">b</span><span class="punctuation">:</span> <span class="numeric_literal">0</span> <span class="punctuation">}</span> <span class="operator">=&gt;</span> <span class="punctuation">(</span><span class="punctuation">)</span><span class="punctuation">,</span>
7979
<span class="union">Union</span> <span class="punctuation">{</span> <span class="field unsafe">a</span> <span class="punctuation">}</span> <span class="operator">=&gt;</span> <span class="punctuation">(</span><span class="punctuation">)</span><span class="punctuation">,</span>
8080
<span class="punctuation">}</span>
81-
<span class="struct">HasUnsafeFn</span><span class="operator">.</span><span class="method unsafe">unsafe_method</span><span class="punctuation">(</span><span class="punctuation">)</span><span class="punctuation">;</span>
81+
<span class="struct">HasUnsafeFn</span><span class="operator">.</span><span class="function unsafe">unsafe_method</span><span class="punctuation">(</span><span class="punctuation">)</span><span class="punctuation">;</span>
8282

8383
<span class="comment">// unsafe deref</span>
8484
<span class="keyword">let</span> <span class="variable declaration">y</span> <span class="operator">=</span> <span class="operator unsafe">*</span><span class="variable">x</span><span class="punctuation">;</span>
@@ -94,6 +94,6 @@
9494
<span class="keyword">let</span> <span class="struct">Packed</span> <span class="punctuation">{</span> <span class="field">a</span><span class="punctuation">:</span> <span class="keyword unsafe">ref</span> <span class="variable declaration">_a</span> <span class="punctuation">}</span> <span class="operator">=</span> <span class="variable">packed</span><span class="punctuation">;</span>
9595

9696
<span class="comment">// unsafe auto ref of packed field</span>
97-
<span class="variable">packed</span><span class="operator">.</span><span class="field">a</span><span class="operator">.</span><span class="method unsafe">calls_autoref</span><span class="punctuation">(</span><span class="punctuation">)</span><span class="punctuation">;</span>
97+
<span class="variable">packed</span><span class="operator">.</span><span class="field">a</span><span class="operator">.</span><span class="function unsafe">calls_autoref</span><span class="punctuation">(</span><span class="punctuation">)</span><span class="punctuation">;</span>
9898
<span class="punctuation">}</span>
9999
<span class="punctuation">}</span></code></pre>

0 commit comments

Comments
 (0)