diff options
-rw-r--r-- | crates/ra_ide/src/snapshots/highlighting.html | 6 | ||||
-rw-r--r-- | crates/ra_ide/src/snapshots/rainbow_highlighting.html | 6 | ||||
-rw-r--r-- | crates/ra_ide/src/syntax_highlighting.rs | 29 | ||||
-rw-r--r-- | crates/ra_ide/src/syntax_highlighting/tags.rs | 2 | ||||
-rw-r--r-- | crates/rust-analyzer/src/conv.rs | 5 | ||||
-rw-r--r-- | crates/rust-analyzer/src/semantic_tokens.rs | 3 | ||||
-rw-r--r-- | editors/code/package.json | 4 |
7 files changed, 34 insertions, 21 deletions
diff --git a/crates/ra_ide/src/snapshots/highlighting.html b/crates/ra_ide/src/snapshots/highlighting.html index 214dcbb62..ccb1fc751 100644 --- a/crates/ra_ide/src/snapshots/highlighting.html +++ b/crates/ra_ide/src/snapshots/highlighting.html | |||
@@ -50,12 +50,12 @@ pre { color: #DCDCCC; background: #3F3F3F; font-size: 22px; padd | |||
50 | <span class="keyword">fn</span> <span class="function declaration">main</span>() { | 50 | <span class="keyword">fn</span> <span class="function declaration">main</span>() { |
51 | <span class="macro">println!</span>(<span class="string_literal">"Hello, {}!"</span>, <span class="numeric_literal">92</span>); | 51 | <span class="macro">println!</span>(<span class="string_literal">"Hello, {}!"</span>, <span class="numeric_literal">92</span>); |
52 | 52 | ||
53 | <span class="keyword">let</span> <span class="keyword">mut</span> <span class="variable declaration mutable">vec</span> = Vec::new(); | 53 | <span class="keyword">let</span> <span class="keyword">mut</span> <span class="variable declaration mutable">vec</span> = <span class="unresolved_reference">Vec</span>::<span class="unresolved_reference">new</span>(); |
54 | <span class="keyword control">if</span> <span class="keyword">true</span> { | 54 | <span class="keyword control">if</span> <span class="keyword">true</span> { |
55 | <span class="keyword">let</span> <span class="variable declaration">x</span> = <span class="numeric_literal">92</span>; | 55 | <span class="keyword">let</span> <span class="variable declaration">x</span> = <span class="numeric_literal">92</span>; |
56 | <span class="variable mutable">vec</span>.push(<span class="struct">Foo</span> { <span class="field">x</span>, <span class="field">y</span>: <span class="numeric_literal">1</span> }); | 56 | <span class="variable mutable">vec</span>.<span class="unresolved_reference">push</span>(<span class="struct">Foo</span> { <span class="field">x</span>, <span class="field">y</span>: <span class="numeric_literal">1</span> }); |
57 | } | 57 | } |
58 | <span class="keyword unsafe">unsafe</span> { <span class="variable mutable">vec</span>.set_len(<span class="numeric_literal">0</span>); } | 58 | <span class="keyword unsafe">unsafe</span> { <span class="variable mutable">vec</span>.<span class="unresolved_reference">set_len</span>(<span class="numeric_literal">0</span>); } |
59 | 59 | ||
60 | <span class="keyword">let</span> <span class="keyword">mut</span> <span class="variable declaration mutable">x</span> = <span class="numeric_literal">42</span>; | 60 | <span class="keyword">let</span> <span class="keyword">mut</span> <span class="variable declaration mutable">x</span> = <span class="numeric_literal">42</span>; |
61 | <span class="keyword">let</span> <span class="variable declaration mutable">y</span> = &<span class="keyword">mut</span> <span class="variable mutable">x</span>; | 61 | <span class="keyword">let</span> <span class="variable declaration mutable">y</span> = &<span class="keyword">mut</span> <span class="variable mutable">x</span>; |
diff --git a/crates/ra_ide/src/snapshots/rainbow_highlighting.html b/crates/ra_ide/src/snapshots/rainbow_highlighting.html index dddbfc0dd..3df82c45f 100644 --- a/crates/ra_ide/src/snapshots/rainbow_highlighting.html +++ b/crates/ra_ide/src/snapshots/rainbow_highlighting.html | |||
@@ -28,11 +28,11 @@ pre { color: #DCDCCC; background: #3F3F3F; font-size: 22px; padd | |||
28 | </style> | 28 | </style> |
29 | <pre><code><span class="keyword">fn</span> <span class="function declaration">main</span>() { | 29 | <pre><code><span class="keyword">fn</span> <span class="function declaration">main</span>() { |
30 | <span class="keyword">let</span> <span class="variable declaration" data-binding-hash="8121853618659664005" style="color: hsl(261,57%,61%);">hello</span> = <span class="string_literal">"hello"</span>; | 30 | <span class="keyword">let</span> <span class="variable declaration" data-binding-hash="8121853618659664005" style="color: hsl(261,57%,61%);">hello</span> = <span class="string_literal">"hello"</span>; |
31 | <span class="keyword">let</span> <span class="variable declaration" data-binding-hash="2705725358298919760" style="color: hsl(17,51%,74%);">x</span> = <span class="variable" data-binding-hash="8121853618659664005" style="color: hsl(261,57%,61%);">hello</span>.to_string(); | 31 | <span class="keyword">let</span> <span class="variable declaration" data-binding-hash="2705725358298919760" style="color: hsl(17,51%,74%);">x</span> = <span class="variable" data-binding-hash="8121853618659664005" style="color: hsl(261,57%,61%);">hello</span>.<span class="unresolved_reference">to_string</span>(); |
32 | <span class="keyword">let</span> <span class="variable declaration" data-binding-hash="3365759661443752373" style="color: hsl(127,76%,66%);">y</span> = <span class="variable" data-binding-hash="8121853618659664005" style="color: hsl(261,57%,61%);">hello</span>.to_string(); | 32 | <span class="keyword">let</span> <span class="variable declaration" data-binding-hash="3365759661443752373" style="color: hsl(127,76%,66%);">y</span> = <span class="variable" data-binding-hash="8121853618659664005" style="color: hsl(261,57%,61%);">hello</span>.<span class="unresolved_reference">to_string</span>(); |
33 | 33 | ||
34 | <span class="keyword">let</span> <span class="variable declaration" data-binding-hash="794745962933817518" style="color: hsl(19,74%,76%);">x</span> = <span class="string_literal">"other color please!"</span>; | 34 | <span class="keyword">let</span> <span class="variable declaration" data-binding-hash="794745962933817518" style="color: hsl(19,74%,76%);">x</span> = <span class="string_literal">"other color please!"</span>; |
35 | <span class="keyword">let</span> <span class="variable declaration" data-binding-hash="6717528807933952652" style="color: hsl(85,49%,84%);">y</span> = <span class="variable" data-binding-hash="794745962933817518" style="color: hsl(19,74%,76%);">x</span>.to_string(); | 35 | <span class="keyword">let</span> <span class="variable declaration" data-binding-hash="6717528807933952652" style="color: hsl(85,49%,84%);">y</span> = <span class="variable" data-binding-hash="794745962933817518" style="color: hsl(19,74%,76%);">x</span>.<span class="unresolved_reference">to_string</span>(); |
36 | } | 36 | } |
37 | 37 | ||
38 | <span class="keyword">fn</span> <span class="function declaration">bar</span>() { | 38 | <span class="keyword">fn</span> <span class="function declaration">bar</span>() { |
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 | ||
diff --git a/crates/ra_ide/src/syntax_highlighting/tags.rs b/crates/ra_ide/src/syntax_highlighting/tags.rs index e8b138e1a..f2c421654 100644 --- a/crates/ra_ide/src/syntax_highlighting/tags.rs +++ b/crates/ra_ide/src/syntax_highlighting/tags.rs | |||
@@ -38,6 +38,7 @@ pub enum HighlightTag { | |||
38 | TypeParam, | 38 | TypeParam, |
39 | Union, | 39 | Union, |
40 | Local, | 40 | Local, |
41 | UnresolvedReference, | ||
41 | } | 42 | } |
42 | 43 | ||
43 | #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)] | 44 | #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)] |
@@ -79,6 +80,7 @@ impl HighlightTag { | |||
79 | HighlightTag::TypeParam => "type_param", | 80 | HighlightTag::TypeParam => "type_param", |
80 | HighlightTag::Union => "union", | 81 | HighlightTag::Union => "union", |
81 | HighlightTag::Local => "variable", | 82 | HighlightTag::Local => "variable", |
83 | HighlightTag::UnresolvedReference => "unresolved_reference", | ||
82 | } | 84 | } |
83 | } | 85 | } |
84 | } | 86 | } |
diff --git a/crates/rust-analyzer/src/conv.rs b/crates/rust-analyzer/src/conv.rs index b2b1cb625..8d2360cc8 100644 --- a/crates/rust-analyzer/src/conv.rs +++ b/crates/rust-analyzer/src/conv.rs | |||
@@ -24,7 +24,9 @@ use crate::{ | |||
24 | world::WorldSnapshot, | 24 | world::WorldSnapshot, |
25 | Result, | 25 | Result, |
26 | }; | 26 | }; |
27 | use semantic_tokens::{ATTRIBUTE, BUILTIN_TYPE, ENUM_MEMBER, LIFETIME, TYPE_ALIAS, UNION}; | 27 | use semantic_tokens::{ |
28 | ATTRIBUTE, BUILTIN_TYPE, ENUM_MEMBER, LIFETIME, TYPE_ALIAS, UNION, UNRESOLVED_REFERENCE, | ||
29 | }; | ||
28 | 30 | ||
29 | pub trait Conv { | 31 | pub trait Conv { |
30 | type Output; | 32 | type Output; |
@@ -373,6 +375,7 @@ impl Conv for Highlight { | |||
373 | HighlightTag::Comment => SemanticTokenType::COMMENT, | 375 | HighlightTag::Comment => SemanticTokenType::COMMENT, |
374 | HighlightTag::Attribute => ATTRIBUTE, | 376 | HighlightTag::Attribute => ATTRIBUTE, |
375 | HighlightTag::Keyword => SemanticTokenType::KEYWORD, | 377 | HighlightTag::Keyword => SemanticTokenType::KEYWORD, |
378 | HighlightTag::UnresolvedReference => UNRESOLVED_REFERENCE, | ||
376 | }; | 379 | }; |
377 | 380 | ||
378 | for modifier in self.modifiers.iter() { | 381 | for modifier in self.modifiers.iter() { |
diff --git a/crates/rust-analyzer/src/semantic_tokens.rs b/crates/rust-analyzer/src/semantic_tokens.rs index 865fa3b1c..10fe696f6 100644 --- a/crates/rust-analyzer/src/semantic_tokens.rs +++ b/crates/rust-analyzer/src/semantic_tokens.rs | |||
@@ -10,6 +10,8 @@ pub(crate) const ENUM_MEMBER: SemanticTokenType = SemanticTokenType::new("enumMe | |||
10 | pub(crate) const LIFETIME: SemanticTokenType = SemanticTokenType::new("lifetime"); | 10 | pub(crate) const LIFETIME: SemanticTokenType = SemanticTokenType::new("lifetime"); |
11 | pub(crate) const TYPE_ALIAS: SemanticTokenType = SemanticTokenType::new("typeAlias"); | 11 | pub(crate) const TYPE_ALIAS: SemanticTokenType = SemanticTokenType::new("typeAlias"); |
12 | pub(crate) const UNION: SemanticTokenType = SemanticTokenType::new("union"); | 12 | pub(crate) const UNION: SemanticTokenType = SemanticTokenType::new("union"); |
13 | pub(crate) const UNRESOLVED_REFERENCE: SemanticTokenType = | ||
14 | SemanticTokenType::new("unresolvedReference"); | ||
13 | 15 | ||
14 | pub(crate) const CONSTANT: SemanticTokenModifier = SemanticTokenModifier::new("constant"); | 16 | pub(crate) const CONSTANT: SemanticTokenModifier = SemanticTokenModifier::new("constant"); |
15 | pub(crate) const CONTROL_FLOW: SemanticTokenModifier = SemanticTokenModifier::new("controlFlow"); | 17 | pub(crate) const CONTROL_FLOW: SemanticTokenModifier = SemanticTokenModifier::new("controlFlow"); |
@@ -43,6 +45,7 @@ pub(crate) const SUPPORTED_TYPES: &[SemanticTokenType] = &[ | |||
43 | LIFETIME, | 45 | LIFETIME, |
44 | TYPE_ALIAS, | 46 | TYPE_ALIAS, |
45 | UNION, | 47 | UNION, |
48 | UNRESOLVED_REFERENCE, | ||
46 | ]; | 49 | ]; |
47 | 50 | ||
48 | pub(crate) const SUPPORTED_MODIFIERS: &[SemanticTokenModifier] = &[ | 51 | pub(crate) const SUPPORTED_MODIFIERS: &[SemanticTokenModifier] = &[ |
diff --git a/editors/code/package.json b/editors/code/package.json index 5ce59e54a..79410ad10 100644 --- a/editors/code/package.json +++ b/editors/code/package.json | |||
@@ -517,6 +517,10 @@ | |||
517 | "id": "union", | 517 | "id": "union", |
518 | "description": "Style for C-style untagged unions", | 518 | "description": "Style for C-style untagged unions", |
519 | "superType": "type" | 519 | "superType": "type" |
520 | }, | ||
521 | { | ||
522 | "id": "unresolvedReference", | ||
523 | "description": "Style for names which can not be resolved due to compilation errors" | ||
520 | } | 524 | } |
521 | ], | 525 | ], |
522 | "semanticTokenModifiers": [ | 526 | "semanticTokenModifiers": [ |