diff options
author | Aleksey Kladov <[email protected]> | 2020-04-18 19:59:22 +0100 |
---|---|---|
committer | Aleksey Kladov <[email protected]> | 2020-04-18 20:28:51 +0100 |
commit | ca61356b01c8f0919443b3ccd5e543e06694466a (patch) | |
tree | 1d0f3ddc89d96d879ca5366928073ff9470ec9bc /crates/ra_ide/src/syntax_highlighting.rs | |
parent | 9b16ae5149b7b01c8b2ec4bfb87182c993997b44 (diff) |
Add semantic tag for unresolved references
This is a quick way to implement unresolved reference diagnostics.
For example, adding to VS Code config
"editor.tokenColorCustomizationsExperimental": {
"unresolvedReference": "#FF0000"
},
will highlight all unresolved refs in red.
Diffstat (limited to 'crates/ra_ide/src/syntax_highlighting.rs')
-rw-r--r-- | crates/ra_ide/src/syntax_highlighting.rs | 29 |
1 files changed, 15 insertions, 14 deletions
diff --git a/crates/ra_ide/src/syntax_highlighting.rs b/crates/ra_ide/src/syntax_highlighting.rs index 7b15b82bd..93d502875 100644 --- a/crates/ra_ide/src/syntax_highlighting.rs +++ b/crates/ra_ide/src/syntax_highlighting.rs | |||
@@ -239,20 +239,21 @@ fn highlight_element( | |||
239 | NAME_REF if element.ancestors().any(|it| it.kind() == ATTR) => return None, | 239 | NAME_REF if element.ancestors().any(|it| it.kind() == ATTR) => return None, |
240 | NAME_REF => { | 240 | NAME_REF => { |
241 | let name_ref = element.into_node().and_then(ast::NameRef::cast).unwrap(); | 241 | let name_ref = element.into_node().and_then(ast::NameRef::cast).unwrap(); |
242 | let name_kind = classify_name_ref(sema, &name_ref)?; | 242 | match classify_name_ref(sema, &name_ref) { |
243 | 243 | Some(name_kind) => match name_kind { | |
244 | match name_kind { | 244 | NameRefClass::Definition(def) => { |
245 | NameRefClass::Definition(def) => { | 245 | if let Definition::Local(local) = &def { |
246 | if let Definition::Local(local) = &def { | 246 | if let Some(name) = local.name(db) { |
247 | if let Some(name) = local.name(db) { | 247 | let shadow_count = |
248 | let shadow_count = | 248 | bindings_shadow_count.entry(name.clone()).or_default(); |
249 | bindings_shadow_count.entry(name.clone()).or_default(); | 249 | binding_hash = Some(calc_binding_hash(&name, *shadow_count)) |
250 | binding_hash = Some(calc_binding_hash(&name, *shadow_count)) | 250 | } |
251 | } | 251 | }; |
252 | }; | 252 | highlight_name(db, def) |
253 | highlight_name(db, def) | 253 | } |
254 | } | 254 | NameRefClass::FieldShorthand { .. } => HighlightTag::Field.into(), |
255 | NameRefClass::FieldShorthand { .. } => HighlightTag::Field.into(), | 255 | }, |
256 | None => HighlightTag::UnresolvedReference.into(), | ||
256 | } | 257 | } |
257 | } | 258 | } |
258 | 259 | ||