aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--crates/ra_ide/src/snapshots/highlighting.html2
-rw-r--r--crates/ra_ide/src/syntax_highlighting.rs4
-rw-r--r--crates/ra_ide/src/syntax_highlighting/tags.rs6
-rw-r--r--crates/rust-analyzer/src/semantic_tokens.rs1
-rw-r--r--crates/rust-analyzer/src/to_proto.rs1
-rw-r--r--editors/code/package.json7
-rw-r--r--editors/code/rust.tmGrammar.json7
7 files changed, 24 insertions, 4 deletions
diff --git a/crates/ra_ide/src/snapshots/highlighting.html b/crates/ra_ide/src/snapshots/highlighting.html
index 635fe5cf9..2ceadf2fc 100644
--- a/crates/ra_ide/src/snapshots/highlighting.html
+++ b/crates/ra_ide/src/snapshots/highlighting.html
@@ -27,7 +27,7 @@ pre { color: #DCDCCC; background: #3F3F3F; font-size: 22px; padd
27.keyword.unsafe { color: #BC8383; font-weight: bold; } 27.keyword.unsafe { color: #BC8383; font-weight: bold; }
28.control { font-style: italic; } 28.control { font-style: italic; }
29</style> 29</style>
30<pre><code><span class="attribute">#[derive(Clone, Debug)]</span> 30<pre><code><span class="attribute">#[</span><span class="function attribute">derive</span><span class="attribute">(Clone, Debug)]</span>
31<span class="keyword">struct</span> <span class="struct declaration">Foo</span> { 31<span class="keyword">struct</span> <span class="struct declaration">Foo</span> {
32 <span class="keyword">pub</span> <span class="field declaration">x</span>: <span class="builtin_type">i32</span>, 32 <span class="keyword">pub</span> <span class="field declaration">x</span>: <span class="builtin_type">i32</span>,
33 <span class="keyword">pub</span> <span class="field declaration">y</span>: <span class="builtin_type">i32</span>, 33 <span class="keyword">pub</span> <span class="field declaration">y</span>: <span class="builtin_type">i32</span>,
diff --git a/crates/ra_ide/src/syntax_highlighting.rs b/crates/ra_ide/src/syntax_highlighting.rs
index be57eeb0a..b55cf748d 100644
--- a/crates/ra_ide/src/syntax_highlighting.rs
+++ b/crates/ra_ide/src/syntax_highlighting.rs
@@ -361,7 +361,9 @@ fn highlight_element(
361 } 361 }
362 362
363 // Highlight references like the definitions they resolve to 363 // Highlight references like the definitions they resolve to
364 NAME_REF if element.ancestors().any(|it| it.kind() == ATTR) => return None, 364 NAME_REF if element.ancestors().any(|it| it.kind() == ATTR) => {
365 Highlight::from(HighlightTag::Function) | HighlightModifier::Attribute
366 }
365 NAME_REF => { 367 NAME_REF => {
366 let name_ref = element.into_node().and_then(ast::NameRef::cast).unwrap(); 368 let name_ref = element.into_node().and_then(ast::NameRef::cast).unwrap();
367 match classify_name_ref(sema, &name_ref) { 369 match classify_name_ref(sema, &name_ref) {
diff --git a/crates/ra_ide/src/syntax_highlighting/tags.rs b/crates/ra_ide/src/syntax_highlighting/tags.rs
index be1a0f12b..33e6619ec 100644
--- a/crates/ra_ide/src/syntax_highlighting/tags.rs
+++ b/crates/ra_ide/src/syntax_highlighting/tags.rs
@@ -45,8 +45,10 @@ pub enum HighlightTag {
45#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)] 45#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
46#[repr(u8)] 46#[repr(u8)]
47pub enum HighlightModifier { 47pub enum HighlightModifier {
48 /// Used to differentiate individual elements within attributes.
49 Attribute = 0,
48 /// Used with keywords like `if` and `break`. 50 /// Used with keywords like `if` and `break`.
49 ControlFlow = 0, 51 ControlFlow,
50 /// `foo` in `fn foo(x: i32)` is a definition, `foo` in `foo(90 + 2)` is 52 /// `foo` in `fn foo(x: i32)` is a definition, `foo` in `foo(90 + 2)` is
51 /// not. 53 /// not.
52 Definition, 54 Definition,
@@ -95,6 +97,7 @@ impl fmt::Display for HighlightTag {
95 97
96impl HighlightModifier { 98impl HighlightModifier {
97 const ALL: &'static [HighlightModifier] = &[ 99 const ALL: &'static [HighlightModifier] = &[
100 HighlightModifier::Attribute,
98 HighlightModifier::ControlFlow, 101 HighlightModifier::ControlFlow,
99 HighlightModifier::Definition, 102 HighlightModifier::Definition,
100 HighlightModifier::Mutable, 103 HighlightModifier::Mutable,
@@ -103,6 +106,7 @@ impl HighlightModifier {
103 106
104 fn as_str(self) -> &'static str { 107 fn as_str(self) -> &'static str {
105 match self { 108 match self {
109 HighlightModifier::Attribute => "attribute",
106 HighlightModifier::ControlFlow => "control", 110 HighlightModifier::ControlFlow => "control",
107 HighlightModifier::Definition => "declaration", 111 HighlightModifier::Definition => "declaration",
108 HighlightModifier::Mutable => "mutable", 112 HighlightModifier::Mutable => "mutable",
diff --git a/crates/rust-analyzer/src/semantic_tokens.rs b/crates/rust-analyzer/src/semantic_tokens.rs
index 2dc5cb119..90a6257ee 100644
--- a/crates/rust-analyzer/src/semantic_tokens.rs
+++ b/crates/rust-analyzer/src/semantic_tokens.rs
@@ -67,6 +67,7 @@ define_semantic_token_modifiers![
67 (CONTROL_FLOW, "controlFlow"), 67 (CONTROL_FLOW, "controlFlow"),
68 (MUTABLE, "mutable"), 68 (MUTABLE, "mutable"),
69 (UNSAFE, "unsafe"), 69 (UNSAFE, "unsafe"),
70 (ATTRIBUTE_MODIFIER, "attribute"),
70]; 71];
71 72
72#[derive(Default)] 73#[derive(Default)]
diff --git a/crates/rust-analyzer/src/to_proto.rs b/crates/rust-analyzer/src/to_proto.rs
index 7dd7d9416..672e47e41 100644
--- a/crates/rust-analyzer/src/to_proto.rs
+++ b/crates/rust-analyzer/src/to_proto.rs
@@ -307,6 +307,7 @@ fn semantic_token_type_and_modifiers(
307 307
308 for modifier in highlight.modifiers.iter() { 308 for modifier in highlight.modifiers.iter() {
309 let modifier = match modifier { 309 let modifier = match modifier {
310 HighlightModifier::Attribute => semantic_tokens::ATTRIBUTE_MODIFIER,
310 HighlightModifier::Definition => lsp_types::SemanticTokenModifier::DECLARATION, 311 HighlightModifier::Definition => lsp_types::SemanticTokenModifier::DECLARATION,
311 HighlightModifier::ControlFlow => semantic_tokens::CONTROL_FLOW, 312 HighlightModifier::ControlFlow => semantic_tokens::CONTROL_FLOW,
312 HighlightModifier::Mutable => semantic_tokens::MUTABLE, 313 HighlightModifier::Mutable => semantic_tokens::MUTABLE,
diff --git a/editors/code/package.json b/editors/code/package.json
index 1eebe0608..3aa90cd66 100644
--- a/editors/code/package.json
+++ b/editors/code/package.json
@@ -611,6 +611,10 @@
611 ], 611 ],
612 "semanticTokenModifiers": [ 612 "semanticTokenModifiers": [
613 { 613 {
614 "id": "attribute",
615 "description": "Style for elements within attributes"
616 },
617 {
614 "id": "constant", 618 "id": "constant",
615 "description": "Style for compile-time constants" 619 "description": "Style for compile-time constants"
616 }, 620 },
@@ -637,6 +641,9 @@
637 "attribute": [ 641 "attribute": [
638 "meta.attribute.rust" 642 "meta.attribute.rust"
639 ], 643 ],
644 "function.attribute": [
645 "entity.name.function.attribute.rust"
646 ],
640 "builtinType": [ 647 "builtinType": [
641 "support.type.primitive.rust" 648 "support.type.primitive.rust"
642 ], 649 ],
diff --git a/editors/code/rust.tmGrammar.json b/editors/code/rust.tmGrammar.json
index aa0811326..cdcd557dc 100644
--- a/editors/code/rust.tmGrammar.json
+++ b/editors/code/rust.tmGrammar.json
@@ -75,8 +75,13 @@
75 { 75 {
76 "comment": "Attribute", 76 "comment": "Attribute",
77 "name": "meta.attribute.rust", 77 "name": "meta.attribute.rust",
78 "begin": "#\\!?\\[", 78 "begin": "#\\!?\\[(\\w*)",
79 "end": "\\]", 79 "end": "\\]",
80 "captures": {
81 "1": {
82 "name": "entity.name.function.attribute.rust"
83 }
84 },
80 "patterns": [ 85 "patterns": [
81 { 86 {
82 "include": "#string_literal" 87 "include": "#string_literal"