Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide/src/syntax_highlighting/highlight.rs')
| -rw-r--r-- | crates/ide/src/syntax_highlighting/highlight.rs | 64 |
1 files changed, 24 insertions, 40 deletions
diff --git a/crates/ide/src/syntax_highlighting/highlight.rs b/crates/ide/src/syntax_highlighting/highlight.rs index 43a3fb2d71..b98fa1ab39 100644 --- a/crates/ide/src/syntax_highlighting/highlight.rs +++ b/crates/ide/src/syntax_highlighting/highlight.rs @@ -2,7 +2,7 @@ use hir::{AsAssocItem, HasVisibility, Semantics}; use ide_db::{ - defs::{Definition, NameClass, NameRefClass}, + defs::{Definition, IdentClass, NameClass, NameRefClass}, helpers::FamousDefs, RootDatabase, SymbolKind, }; @@ -47,52 +47,36 @@ pub(super) fn token(sema: &Semantics<RootDatabase>, token: SyntaxToken) -> Optio Some(highlight) } -pub(super) fn node( +pub(super) fn name_like( sema: &Semantics<RootDatabase>, krate: Option<hir::Crate>, bindings_shadow_count: &mut FxHashMap<hir::Name, u32>, syntactic_name_ref_highlighting: bool, - node: SyntaxNode, + name_like: ast::NameLike, ) -> Option<(Highlight, Option<u64>)> { let mut binding_hash = None; - let highlight = match_ast! { - match node { - ast::NameRef(name_ref) => { - highlight_name_ref( - sema, - krate, - bindings_shadow_count, - &mut binding_hash, - syntactic_name_ref_highlighting, - name_ref, - ) - }, - ast::Name(name) => { - highlight_name(sema, bindings_shadow_count, &mut binding_hash, krate, name) - }, - ast::Lifetime(lifetime) => { - match NameClass::classify_lifetime(sema, &lifetime) { - Some(NameClass::Definition(def)) => { - highlight_def(sema, krate, def) | HlMod::Definition - } - None => match NameRefClass::classify_lifetime(sema, &lifetime) { - Some(NameRefClass::Definition(def)) => highlight_def(sema, krate, def), - _ => SymbolKind::LifetimeParam.into(), - }, - _ => Highlight::from(SymbolKind::LifetimeParam) | HlMod::Definition, - } - }, - ast::Fn(_) => { - bindings_shadow_count.clear(); - return None; - }, - _ => { - if [FN, CONST, STATIC].contains(&node.kind()) { - bindings_shadow_count.clear(); - } - return None - }, + let highlight = match name_like { + ast::NameLike::NameRef(name_ref) => highlight_name_ref( + sema, + krate, + bindings_shadow_count, + &mut binding_hash, + syntactic_name_ref_highlighting, + name_ref, + ), + ast::NameLike::Name(name) => { + highlight_name(sema, bindings_shadow_count, &mut binding_hash, krate, name) } + ast::NameLike::Lifetime(lifetime) => match IdentClass::classify_lifetime(sema, &lifetime) { + Some(IdentClass::NameClass(NameClass::Definition(def))) => { + highlight_def(sema, krate, def) | HlMod::Definition + } + Some(IdentClass::NameRefClass(NameRefClass::Definition(def))) => { + highlight_def(sema, krate, def) + } + // FIXME: Fallback for 'static and '_, as we do not resolve these yet + _ => SymbolKind::LifetimeParam.into(), + }, }; Some((highlight, binding_hash)) } |