Skip to content

Commit 2436621

Browse files
Merge #8240
8240: 8024: Added the trait modifier for methods r=Veykril a=chetankhilosiya method in impls and method calls will have trait modifier. Trait modifier for constants is remaining. Co-authored-by: Chetan Khilosiya <[email protected]>
2 parents fd7c454 + 518c9c7 commit 2436621

File tree

8 files changed

+47
-14
lines changed

8 files changed

+47
-14
lines changed

crates/ide/src/syntax_highlighting/highlight.rs

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
//! Computes color for a single element.
22
3-
use hir::{AsAssocItem, Semantics, VariantDef};
3+
use hir::{AsAssocItem, AssocItemContainer, Semantics, VariantDef};
44
use ide_db::{
55
defs::{Definition, NameClass, NameRefClass},
66
RootDatabase, SymbolKind,
@@ -275,12 +275,24 @@ fn highlight_def(db: &RootDatabase, def: Definition) -> Highlight {
275275
hir::ModuleDef::Module(_) => HlTag::Symbol(SymbolKind::Module),
276276
hir::ModuleDef::Function(func) => {
277277
let mut h = Highlight::new(HlTag::Symbol(SymbolKind::Function));
278-
if func.as_assoc_item(db).is_some() {
278+
if let Some(item) = func.as_assoc_item(db) {
279279
h |= HlMod::Associated;
280280
if func.self_param(db).is_none() {
281281
h |= HlMod::Static
282282
}
283+
284+
match item.container(db) {
285+
AssocItemContainer::Impl(i) => {
286+
if i.trait_(db).is_some() {
287+
h |= HlMod::Trait;
288+
}
289+
}
290+
AssocItemContainer::Trait(_t) => {
291+
h |= HlMod::Trait;
292+
}
293+
}
283294
}
295+
284296
if func.is_unsafe(db) {
285297
h |= HlMod::Unsafe;
286298
}
@@ -292,9 +304,20 @@ fn highlight_def(db: &RootDatabase, def: Definition) -> Highlight {
292304
hir::ModuleDef::Variant(_) => HlTag::Symbol(SymbolKind::Variant),
293305
hir::ModuleDef::Const(konst) => {
294306
let mut h = Highlight::new(HlTag::Symbol(SymbolKind::Const));
295-
if konst.as_assoc_item(db).is_some() {
296-
h |= HlMod::Associated
307+
if let Some(item) = konst.as_assoc_item(db) {
308+
h |= HlMod::Associated;
309+
match item.container(db) {
310+
AssocItemContainer::Impl(i) => {
311+
if i.trait_(db).is_some() {
312+
h |= HlMod::Trait;
313+
}
314+
}
315+
AssocItemContainer::Trait(_t) => {
316+
h |= HlMod::Trait;
317+
}
318+
}
297319
}
320+
298321
return h;
299322
}
300323
hir::ModuleDef::Trait(_) => HlTag::Symbol(SymbolKind::Trait),
@@ -362,6 +385,10 @@ fn highlight_method_call(
362385
if func.is_unsafe(sema.db) || sema.is_unsafe_method_call(&method_call) {
363386
h |= HlMod::Unsafe;
364387
}
388+
if func.as_assoc_item(sema.db).and_then(|it| it.containing_trait(sema.db)).is_some() {
389+
h |= HlMod::Trait
390+
}
391+
365392
if let Some(self_param) = func.self_param(sema.db) {
366393
match self_param.access(sema.db) {
367394
hir::Access::Shared => (),

crates/ide/src/syntax_highlighting/tags.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ pub enum HlMod {
5858
Associated,
5959
/// Used for intra doc links in doc injection.
6060
IntraDocLink,
61+
/// Used for items in traits and trait impls.
62+
Trait,
6163

6264
/// Keep this last!
6365
Unsafe,
@@ -158,6 +160,7 @@ impl HlMod {
158160
HlMod::Callable,
159161
HlMod::Static,
160162
HlMod::Associated,
163+
HlMod::Trait,
161164
HlMod::Unsafe,
162165
];
163166

@@ -174,6 +177,7 @@ impl HlMod {
174177
HlMod::IntraDocLink => "intra_doc_link",
175178
HlMod::Mutable => "mutable",
176179
HlMod::Static => "static",
180+
HlMod::Trait => "trait",
177181
HlMod::Unsafe => "unsafe",
178182
}
179183
}

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,12 @@
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">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">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 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>
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">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">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 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>
5757
<span class="brace">}</span>
5858
</code></pre>

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">foo</span><span class="parenthesis">(</span><span class="parenthesis">)</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>
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
@@ -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">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 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>
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">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 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>
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>
@@ -96,6 +96,6 @@
9696
<span class="keyword">let</span> <span class="struct">Packed</span> <span class="brace">{</span> <span class="field">a</span><span class="colon">:</span> <span class="keyword unsafe">ref</span> <span class="variable declaration">_a</span> <span class="brace">}</span> <span class="operator">=</span> <span class="variable">packed</span><span class="semicolon">;</span>
9797

9898
<span class="comment">// unsafe auto ref of packed field</span>
99-
<span class="variable">packed</span><span class="operator">.</span><span class="field">a</span><span class="operator">.</span><span class="function associated unsafe">calls_autoref</span><span class="parenthesis">(</span><span class="parenthesis">)</span><span class="semicolon">;</span>
99+
<span class="variable">packed</span><span class="operator">.</span><span class="field">a</span><span class="operator">.</span><span class="function associated trait unsafe">calls_autoref</span><span class="parenthesis">(</span><span class="parenthesis">)</span><span class="semicolon">;</span>
100100
<span class="brace">}</span>
101101
<span class="brace">}</span></code></pre>

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,11 +67,11 @@
6767
<span class="brace">}</span>
6868

6969
<span class="keyword">trait</span> <span class="trait declaration">Bar</span> <span class="brace">{</span>
70-
<span class="keyword">fn</span> <span class="function declaration associated">bar</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">i32</span><span class="semicolon">;</span>
70+
<span class="keyword">fn</span> <span class="function declaration associated trait">bar</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">i32</span><span class="semicolon">;</span>
7171
<span class="brace">}</span>
7272

7373
<span class="keyword">impl</span> <span class="trait">Bar</span> <span class="keyword">for</span> <span class="struct">Foo</span> <span class="brace">{</span>
74-
<span class="keyword">fn</span> <span class="function declaration associated">bar</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">i32</span> <span class="brace">{</span>
74+
<span class="keyword">fn</span> <span class="function declaration associated trait">bar</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">i32</span> <span class="brace">{</span>
7575
<span class="self_keyword">self</span><span class="operator">.</span><span class="field">x</span>
7676
<span class="brace">}</span>
7777
<span class="brace">}</span>

crates/rust-analyzer/src/semantic_tokens.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ define_semantic_token_modifiers![
8888
(CONSUMING, "consuming"),
8989
(UNSAFE, "unsafe"),
9090
(ATTRIBUTE_MODIFIER, "attribute"),
91+
(TRAIT_MODIFIER, "trait"),
9192
(CALLABLE, "callable"),
9293
(INTRA_DOC_LINK, "intraDocLink"),
9394
];

crates/rust-analyzer/src/to_proto.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -474,6 +474,7 @@ fn semantic_token_type_and_modifiers(
474474
HlMod::Callable => semantic_tokens::CALLABLE,
475475
HlMod::Static => lsp_types::SemanticTokenModifier::STATIC,
476476
HlMod::IntraDocLink => semantic_tokens::INTRA_DOC_LINK,
477+
HlMod::Trait => semantic_tokens::TRAIT_MODIFIER,
477478
HlMod::Associated => continue,
478479
};
479480
mods |= modifier;

0 commit comments

Comments
 (0)