diff options
Diffstat (limited to 'crates/ra_ide/src/syntax_highlighting.rs')
-rw-r--r-- | crates/ra_ide/src/syntax_highlighting.rs | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/crates/ra_ide/src/syntax_highlighting.rs b/crates/ra_ide/src/syntax_highlighting.rs index f06a8933e..fd422d07c 100644 --- a/crates/ra_ide/src/syntax_highlighting.rs +++ b/crates/ra_ide/src/syntax_highlighting.rs | |||
@@ -2,7 +2,7 @@ | |||
2 | 2 | ||
3 | use rustc_hash::{FxHashMap, FxHashSet}; | 3 | use rustc_hash::{FxHashMap, FxHashSet}; |
4 | 4 | ||
5 | use hir::{InFile, Name}; | 5 | use hir::{InFile, Name, SourceBinder}; |
6 | use ra_db::SourceDatabase; | 6 | use ra_db::SourceDatabase; |
7 | use ra_prof::profile; | 7 | use ra_prof::profile; |
8 | use ra_syntax::{ast, AstNode, Direction, SyntaxElement, SyntaxKind, SyntaxKind::*, TextRange, T}; | 8 | use ra_syntax::{ast, AstNode, Direction, SyntaxElement, SyntaxKind, SyntaxKind::*, TextRange, T}; |
@@ -10,7 +10,7 @@ use ra_syntax::{ast, AstNode, Direction, SyntaxElement, SyntaxKind, SyntaxKind:: | |||
10 | use crate::{ | 10 | use crate::{ |
11 | db::RootDatabase, | 11 | db::RootDatabase, |
12 | references::{ | 12 | references::{ |
13 | classify_name, classify_name_ref, | 13 | classify_name2, classify_name_ref2, |
14 | NameKind::{self, *}, | 14 | NameKind::{self, *}, |
15 | }, | 15 | }, |
16 | FileId, | 16 | FileId, |
@@ -84,6 +84,8 @@ pub(crate) fn highlight(db: &RootDatabase, file_id: FileId) -> Vec<HighlightedRa | |||
84 | hash((file_id, name, shadow_count)) | 84 | hash((file_id, name, shadow_count)) |
85 | } | 85 | } |
86 | 86 | ||
87 | let mut sb = SourceBinder::new(db); | ||
88 | |||
87 | // Visited nodes to handle highlighting priorities | 89 | // Visited nodes to handle highlighting priorities |
88 | // FIXME: retain only ranges here | 90 | // FIXME: retain only ranges here |
89 | let mut highlighted: FxHashSet<SyntaxElement> = FxHashSet::default(); | 91 | let mut highlighted: FxHashSet<SyntaxElement> = FxHashSet::default(); |
@@ -108,8 +110,8 @@ pub(crate) fn highlight(db: &RootDatabase, file_id: FileId) -> Vec<HighlightedRa | |||
108 | NAME_REF if node.ancestors().any(|it| it.kind() == ATTR) => continue, | 110 | NAME_REF if node.ancestors().any(|it| it.kind() == ATTR) => continue, |
109 | NAME_REF => { | 111 | NAME_REF => { |
110 | let name_ref = node.as_node().cloned().and_then(ast::NameRef::cast).unwrap(); | 112 | let name_ref = node.as_node().cloned().and_then(ast::NameRef::cast).unwrap(); |
111 | let name_kind = | 113 | let name_kind = classify_name_ref2(&mut sb, InFile::new(file_id.into(), &name_ref)) |
112 | classify_name_ref(db, InFile::new(file_id.into(), &name_ref)).map(|d| d.kind); | 114 | .map(|d| d.kind); |
113 | match name_kind { | 115 | match name_kind { |
114 | Some(name_kind) => { | 116 | Some(name_kind) => { |
115 | if let Local(local) = &name_kind { | 117 | if let Local(local) = &name_kind { |
@@ -129,7 +131,7 @@ pub(crate) fn highlight(db: &RootDatabase, file_id: FileId) -> Vec<HighlightedRa | |||
129 | NAME => { | 131 | NAME => { |
130 | let name = node.as_node().cloned().and_then(ast::Name::cast).unwrap(); | 132 | let name = node.as_node().cloned().and_then(ast::Name::cast).unwrap(); |
131 | let name_kind = | 133 | let name_kind = |
132 | classify_name(db, InFile::new(file_id.into(), &name)).map(|d| d.kind); | 134 | classify_name2(&mut sb, InFile::new(file_id.into(), &name)).map(|d| d.kind); |
133 | 135 | ||
134 | if let Some(Local(local)) = &name_kind { | 136 | if let Some(Local(local)) = &name_kind { |
135 | if let Some(name) = local.name(db) { | 137 | if let Some(name) = local.name(db) { |