diff options
Diffstat (limited to 'crates')
-rw-r--r-- | crates/ide/src/syntax_highlighting/highlight.rs | 19 | ||||
-rw-r--r-- | crates/ide/src/syntax_highlighting/tags.rs | 4 | ||||
-rw-r--r-- | crates/rust-analyzer/src/semantic_tokens.rs | 1 | ||||
-rw-r--r-- | crates/rust-analyzer/src/to_proto.rs | 1 |
4 files changed, 24 insertions, 1 deletions
diff --git a/crates/ide/src/syntax_highlighting/highlight.rs b/crates/ide/src/syntax_highlighting/highlight.rs index b0cfdd8b7..26118929b 100644 --- a/crates/ide/src/syntax_highlighting/highlight.rs +++ b/crates/ide/src/syntax_highlighting/highlight.rs | |||
@@ -1,6 +1,6 @@ | |||
1 | //! Computes color for a single element. | 1 | //! Computes color for a single element. |
2 | 2 | ||
3 | use hir::{AsAssocItem, Semantics, VariantDef}; | 3 | use hir::{AsAssocItem, AssocItemContainer, Semantics, VariantDef}; |
4 | use ide_db::{ | 4 | use ide_db::{ |
5 | defs::{Definition, NameClass, NameRefClass}, | 5 | defs::{Definition, NameClass, NameRefClass}, |
6 | RootDatabase, SymbolKind, | 6 | RootDatabase, SymbolKind, |
@@ -275,6 +275,19 @@ fn highlight_def(db: &RootDatabase, def: Definition) -> Highlight { | |||
275 | hir::ModuleDef::Module(_) => HlTag::Symbol(SymbolKind::Module), | 275 | hir::ModuleDef::Module(_) => HlTag::Symbol(SymbolKind::Module), |
276 | hir::ModuleDef::Function(func) => { | 276 | hir::ModuleDef::Function(func) => { |
277 | let mut h = Highlight::new(HlTag::Symbol(SymbolKind::Function)); | 277 | let mut h = Highlight::new(HlTag::Symbol(SymbolKind::Function)); |
278 | if let Some(item) = func.as_assoc_item(db) { | ||
279 | match item.container(db) { | ||
280 | AssocItemContainer::Impl(i) => { | ||
281 | if i.target_trait(db).is_some() { | ||
282 | h |= HlMod::Trait; | ||
283 | } | ||
284 | } | ||
285 | AssocItemContainer::Trait(_t) => { | ||
286 | h |= HlMod::Trait; | ||
287 | } | ||
288 | } | ||
289 | } | ||
290 | |||
278 | if func.as_assoc_item(db).is_some() { | 291 | if func.as_assoc_item(db).is_some() { |
279 | h |= HlMod::Associated; | 292 | h |= HlMod::Associated; |
280 | if func.self_param(db).is_none() { | 293 | if func.self_param(db).is_none() { |
@@ -362,6 +375,10 @@ fn highlight_method_call( | |||
362 | if func.is_unsafe(sema.db) || sema.is_unsafe_method_call(&method_call) { | 375 | if func.is_unsafe(sema.db) || sema.is_unsafe_method_call(&method_call) { |
363 | h |= HlMod::Unsafe; | 376 | h |= HlMod::Unsafe; |
364 | } | 377 | } |
378 | if let Some(_t) = func.as_assoc_item(sema.db)?.containing_trait(sema.db) { | ||
379 | h |= HlMod::Trait | ||
380 | } | ||
381 | |||
365 | if let Some(self_param) = func.self_param(sema.db) { | 382 | if let Some(self_param) = func.self_param(sema.db) { |
366 | match self_param.access(sema.db) { | 383 | match self_param.access(sema.db) { |
367 | hir::Access::Shared => (), | 384 | hir::Access::Shared => (), |
diff --git a/crates/ide/src/syntax_highlighting/tags.rs b/crates/ide/src/syntax_highlighting/tags.rs index 93db79b89..04540813c 100644 --- a/crates/ide/src/syntax_highlighting/tags.rs +++ b/crates/ide/src/syntax_highlighting/tags.rs | |||
@@ -58,6 +58,8 @@ pub enum HlMod { | |||
58 | Associated, | 58 | Associated, |
59 | /// Used for intra doc links in doc injection. | 59 | /// Used for intra doc links in doc injection. |
60 | IntraDocLink, | 60 | IntraDocLink, |
61 | /// Used for trait items in impls. | ||
62 | Trait, | ||
61 | 63 | ||
62 | /// Keep this last! | 64 | /// Keep this last! |
63 | Unsafe, | 65 | Unsafe, |
@@ -158,6 +160,7 @@ impl HlMod { | |||
158 | HlMod::Callable, | 160 | HlMod::Callable, |
159 | HlMod::Static, | 161 | HlMod::Static, |
160 | HlMod::Associated, | 162 | HlMod::Associated, |
163 | HlMod::Trait, | ||
161 | HlMod::Unsafe, | 164 | HlMod::Unsafe, |
162 | ]; | 165 | ]; |
163 | 166 | ||
@@ -174,6 +177,7 @@ impl HlMod { | |||
174 | HlMod::IntraDocLink => "intra_doc_link", | 177 | HlMod::IntraDocLink => "intra_doc_link", |
175 | HlMod::Mutable => "mutable", | 178 | HlMod::Mutable => "mutable", |
176 | HlMod::Static => "static", | 179 | HlMod::Static => "static", |
180 | HlMod::Trait => "trait", | ||
177 | HlMod::Unsafe => "unsafe", | 181 | HlMod::Unsafe => "unsafe", |
178 | } | 182 | } |
179 | } | 183 | } |
diff --git a/crates/rust-analyzer/src/semantic_tokens.rs b/crates/rust-analyzer/src/semantic_tokens.rs index a3c5e9ccf..2dc8a42f1 100644 --- a/crates/rust-analyzer/src/semantic_tokens.rs +++ b/crates/rust-analyzer/src/semantic_tokens.rs | |||
@@ -88,6 +88,7 @@ define_semantic_token_modifiers![ | |||
88 | (CONSUMING, "consuming"), | 88 | (CONSUMING, "consuming"), |
89 | (UNSAFE, "unsafe"), | 89 | (UNSAFE, "unsafe"), |
90 | (ATTRIBUTE_MODIFIER, "attribute"), | 90 | (ATTRIBUTE_MODIFIER, "attribute"), |
91 | (TRAIT_MODIFIER, "trait"), | ||
91 | (CALLABLE, "callable"), | 92 | (CALLABLE, "callable"), |
92 | (INTRA_DOC_LINK, "intraDocLink"), | 93 | (INTRA_DOC_LINK, "intraDocLink"), |
93 | ]; | 94 | ]; |
diff --git a/crates/rust-analyzer/src/to_proto.rs b/crates/rust-analyzer/src/to_proto.rs index e297a72e6..c3820944b 100644 --- a/crates/rust-analyzer/src/to_proto.rs +++ b/crates/rust-analyzer/src/to_proto.rs | |||
@@ -474,6 +474,7 @@ fn semantic_token_type_and_modifiers( | |||
474 | HlMod::Callable => semantic_tokens::CALLABLE, | 474 | HlMod::Callable => semantic_tokens::CALLABLE, |
475 | HlMod::Static => lsp_types::SemanticTokenModifier::STATIC, | 475 | HlMod::Static => lsp_types::SemanticTokenModifier::STATIC, |
476 | HlMod::IntraDocLink => semantic_tokens::INTRA_DOC_LINK, | 476 | HlMod::IntraDocLink => semantic_tokens::INTRA_DOC_LINK, |
477 | HlMod::Trait => semantic_tokens::TRAIT_MODIFIER, | ||
477 | HlMod::Associated => continue, | 478 | HlMod::Associated => continue, |
478 | }; | 479 | }; |
479 | mods |= modifier; | 480 | mods |= modifier; |