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.rs64
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))
}