From 56f624532aec04a3a1cccf48ff62c490f52826a0 Mon Sep 17 00:00:00 2001 From: Chetan Khilosiya Date: Wed, 31 Mar 2021 00:03:01 +0530 Subject: 8024: Updated the implementation for trait modifier. Fixed the test cases. --- crates/ide/src/syntax_highlighting/highlight.rs | 28 +++++++++++++++++-------- 1 file changed, 19 insertions(+), 9 deletions(-) (limited to 'crates/ide/src/syntax_highlighting/highlight.rs') diff --git a/crates/ide/src/syntax_highlighting/highlight.rs b/crates/ide/src/syntax_highlighting/highlight.rs index 26118929b..e218b3dc8 100644 --- a/crates/ide/src/syntax_highlighting/highlight.rs +++ b/crates/ide/src/syntax_highlighting/highlight.rs @@ -276,6 +276,11 @@ fn highlight_def(db: &RootDatabase, def: Definition) -> Highlight { hir::ModuleDef::Function(func) => { let mut h = Highlight::new(HlTag::Symbol(SymbolKind::Function)); if let Some(item) = func.as_assoc_item(db) { + h |= HlMod::Associated; + if func.self_param(db).is_none() { + h |= HlMod::Static + } + match item.container(db) { AssocItemContainer::Impl(i) => { if i.target_trait(db).is_some() { @@ -288,12 +293,6 @@ fn highlight_def(db: &RootDatabase, def: Definition) -> Highlight { } } - if func.as_assoc_item(db).is_some() { - h |= HlMod::Associated; - if func.self_param(db).is_none() { - h |= HlMod::Static - } - } if func.is_unsafe(db) { h |= HlMod::Unsafe; } @@ -305,9 +304,20 @@ fn highlight_def(db: &RootDatabase, def: Definition) -> Highlight { hir::ModuleDef::Variant(_) => HlTag::Symbol(SymbolKind::Variant), hir::ModuleDef::Const(konst) => { let mut h = Highlight::new(HlTag::Symbol(SymbolKind::Const)); - if konst.as_assoc_item(db).is_some() { - h |= HlMod::Associated + if let Some(item) = konst.as_assoc_item(db) { + h |= HlMod::Associated; + match item.container(db) { + AssocItemContainer::Impl(i) => { + if i.target_trait(db).is_some() { + h |= HlMod::Trait; + } + } + AssocItemContainer::Trait(_t) => { + h |= HlMod::Trait; + } + } } + return h; } hir::ModuleDef::Trait(_) => HlTag::Symbol(SymbolKind::Trait), @@ -375,7 +385,7 @@ fn highlight_method_call( if func.is_unsafe(sema.db) || sema.is_unsafe_method_call(&method_call) { h |= HlMod::Unsafe; } - if let Some(_t) = func.as_assoc_item(sema.db)?.containing_trait(sema.db) { + if func.as_assoc_item(sema.db).and_then(|it| it.containing_trait(sema.db)).is_some() { h |= HlMod::Trait } -- cgit v1.2.3