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.rs40
1 files changed, 8 insertions, 32 deletions
diff --git a/crates/ide/src/syntax_highlighting/highlight.rs b/crates/ide/src/syntax_highlighting/highlight.rs
index dcc9a8c0d5..a94bbc9f04 100644
--- a/crates/ide/src/syntax_highlighting/highlight.rs
+++ b/crates/ide/src/syntax_highlighting/highlight.rs
@@ -5,12 +5,11 @@ use std::ops::ControlFlow;
use either::Either;
use hir::{AsAssocItem, HasAttrs, HasVisibility, Semantics};
use ide_db::{
- FxHashMap, RootDatabase, SymbolKind,
+ RootDatabase, SymbolKind,
defs::{Definition, IdentClass, NameClass, NameRefClass},
syntax_helpers::node_ext::walk_pat,
};
use span::Edition;
-use stdx::hash_once;
use syntax::{
AstNode, AstPtr, AstToken, NodeOrToken,
SyntaxKind::{self, *},
@@ -64,7 +63,6 @@ pub(super) fn token(
pub(super) fn name_like(
sema: &Semantics<'_, RootDatabase>,
krate: Option<hir::Crate>,
- bindings_shadow_count: Option<&mut FxHashMap<hir::Name, u32>>,
is_unsafe_node: &impl Fn(AstPtr<Either<ast::Expr, ast::Pat>>) -> bool,
syntactic_name_ref_highlighting: bool,
name_like: ast::NameLike,
@@ -75,22 +73,15 @@ pub(super) fn name_like(
ast::NameLike::NameRef(name_ref) => highlight_name_ref(
sema,
krate,
- bindings_shadow_count,
&mut binding_hash,
is_unsafe_node,
syntactic_name_ref_highlighting,
name_ref,
edition,
),
- ast::NameLike::Name(name) => highlight_name(
- sema,
- bindings_shadow_count,
- &mut binding_hash,
- is_unsafe_node,
- krate,
- name,
- edition,
- ),
+ ast::NameLike::Name(name) => {
+ highlight_name(sema, &mut binding_hash, is_unsafe_node, krate, name, edition)
+ }
ast::NameLike::Lifetime(lifetime) => match IdentClass::classify_lifetime(sema, &lifetime) {
Some(IdentClass::NameClass(NameClass::Definition(def))) => {
highlight_def(sema, krate, def, edition, false) | HlMod::Definition
@@ -273,7 +264,6 @@ fn keyword(token: SyntaxToken, kind: SyntaxKind) -> Highlight {
fn highlight_name_ref(
sema: &Semantics<'_, RootDatabase>,
krate: Option<hir::Crate>,
- bindings_shadow_count: Option<&mut FxHashMap<hir::Name, u32>>,
binding_hash: &mut Option<u64>,
is_unsafe_node: &impl Fn(AstPtr<Either<ast::Expr, ast::Pat>>) -> bool,
syntactic_name_ref_highlighting: bool,
@@ -306,12 +296,8 @@ fn highlight_name_ref(
};
let mut h = match name_class {
NameRefClass::Definition(def, _) => {
- if let Definition::Local(local) = &def
- && let Some(bindings_shadow_count) = bindings_shadow_count
- {
- let name = local.name(sema.db);
- let shadow_count = bindings_shadow_count.entry(name.clone()).or_default();
- *binding_hash = Some(calc_binding_hash(&name, *shadow_count))
+ if let Definition::Local(local) = &def {
+ *binding_hash = Some(local.as_id() as u64);
};
let mut h = highlight_def(sema, krate, def, edition, true);
@@ -432,7 +418,6 @@ fn highlight_name_ref(
fn highlight_name(
sema: &Semantics<'_, RootDatabase>,
- bindings_shadow_count: Option<&mut FxHashMap<hir::Name, u32>>,
binding_hash: &mut Option<u64>,
is_unsafe_node: &impl Fn(AstPtr<Either<ast::Expr, ast::Pat>>) -> bool,
krate: Option<hir::Crate>,
@@ -440,13 +425,8 @@ fn highlight_name(
edition: Edition,
) -> Highlight {
let name_kind = NameClass::classify(sema, &name);
- if let Some(NameClass::Definition(Definition::Local(local))) = &name_kind
- && let Some(bindings_shadow_count) = bindings_shadow_count
- {
- let name = local.name(sema.db);
- let shadow_count = bindings_shadow_count.entry(name.clone()).or_default();
- *shadow_count += 1;
- *binding_hash = Some(calc_binding_hash(&name, *shadow_count))
+ if let Some(NameClass::Definition(Definition::Local(local))) = &name_kind {
+ *binding_hash = Some(local.as_id() as u64);
};
match name_kind {
Some(NameClass::Definition(def)) => {
@@ -474,10 +454,6 @@ fn highlight_name(
}
}
-fn calc_binding_hash(name: &hir::Name, shadow_count: u32) -> u64 {
- hash_once::<ide_db::FxHasher>((name.as_str(), shadow_count))
-}
-
pub(super) fn highlight_def(
sema: &Semantics<'_, RootDatabase>,
krate: Option<hir::Crate>,