Skip to content

Commit 372a7cf

Browse files
bors[bot]Veykril
andauthored
Merge #10929
10929: internal: Split up macro/attribute semantic tokens a bit more r=Veykril a=Veykril Fixes #9172 Co-authored-by: Lukas Wirth <[email protected]>
2 parents b327cf3 + 3472105 commit 372a7cf

File tree

19 files changed

+194
-173
lines changed

19 files changed

+194
-173
lines changed

crates/ide/src/navigation_target.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -363,7 +363,13 @@ impl TryToNav for hir::MacroDef {
363363
let mut res = NavigationTarget::from_named(
364364
db,
365365
src.as_ref().with_value(name_owner),
366-
SymbolKind::Macro,
366+
match self.kind() {
367+
hir::MacroKind::Declarative
368+
| hir::MacroKind::BuiltIn
369+
| hir::MacroKind::ProcMacro => SymbolKind::Macro,
370+
hir::MacroKind::Derive => SymbolKind::Derive,
371+
hir::MacroKind::Attr => SymbolKind::Attribute,
372+
},
367373
);
368374
res.docs = self.docs(db);
369375
Some(res)

crates/ide/src/syntax_highlighting.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,11 @@ pub struct HlRange {
5757
// - For items:
5858
// +
5959
// [horizontal]
60+
// attribute:: Emitted for attribute macros.
6061
// enum:: Emitted for enums.
6162
// function:: Emitted for free-standing functions.
62-
// macro:: Emitted for macros.
63+
// derive:: Emitted for derive macros.
64+
// macro:: Emitted for function-like macros.
6365
// method:: Emitted for associated functions, also knowns as methods.
6466
// namespace:: Emitted for modules.
6567
// struct:: Emitted for structs.
@@ -90,6 +92,7 @@ pub struct HlRange {
9092
// +
9193
// [horizontal]
9294
// punctuation:: Emitted for general punctuation.
95+
// attributeBracket:: Emitted for attribute invocation brackets, that is the `#[` and `]` tokens.
9396
// angle:: Emitted for `<>` angle brackets.
9497
// brace:: Emitted for `{}` braces.
9598
// bracket:: Emitted for `[]` brackets.
@@ -102,7 +105,6 @@ pub struct HlRange {
102105
// //-
103106
//
104107
// [horizontal]
105-
// attribute:: Emitted for the `#[` `]` tokens.
106108
// builtinAttribute:: Emitted for names to builtin attributes in attribute path, the `repr` in `#[repr(u8)]` for example.
107109
// builtinType:: Emitted for builtin types like `u32`, `str` and `f32`.
108110
// comment:: Emitted for comments.

crates/ide/src/syntax_highlighting/highlight.rs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ fn token(
133133
_ if parent_matches::<ast::RangeExpr>(&token) => HlOperator::Other.into(),
134134
_ if parent_matches::<ast::RangePat>(&token) => HlOperator::Other.into(),
135135
_ if parent_matches::<ast::RestPat>(&token) => HlOperator::Other.into(),
136-
_ if parent_matches::<ast::Attr>(&token) => HlTag::Attribute.into(),
136+
_ if parent_matches::<ast::Attr>(&token) => HlTag::AttributeBracket.into(),
137137
kind => match kind {
138138
T!['['] | T![']'] => HlPunct::Bracket,
139139
T!['{'] | T!['}'] => HlPunct::Brace,
@@ -200,7 +200,7 @@ fn node(
200200
return None;
201201
},
202202
ast::Attr(__) => {
203-
HlTag::Attribute.into()
203+
HlTag::AttributeBracket.into()
204204
},
205205
// Highlight definitions depending on the "type" of the definition.
206206
ast::Name(name) => {
@@ -374,7 +374,13 @@ fn highlight_def(
374374
) -> Highlight {
375375
let db = sema.db;
376376
let mut h = match def {
377-
Definition::Macro(_) => Highlight::new(HlTag::Symbol(SymbolKind::Macro)),
377+
Definition::Macro(m) => Highlight::new(HlTag::Symbol(match m.kind() {
378+
hir::MacroKind::Declarative | hir::MacroKind::BuiltIn | hir::MacroKind::ProcMacro => {
379+
SymbolKind::Macro
380+
}
381+
hir::MacroKind::Derive => SymbolKind::Derive,
382+
hir::MacroKind::Attr => SymbolKind::Attribute,
383+
})),
378384
Definition::Field(_) => Highlight::new(HlTag::Symbol(SymbolKind::Field)),
379385
Definition::Module(module) => {
380386
let mut h = Highlight::new(HlTag::Symbol(SymbolKind::Module));

crates/ide/src/syntax_highlighting/tags.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ pub struct HlMods(u32);
1818
pub enum HlTag {
1919
Symbol(SymbolKind),
2020

21-
Attribute,
21+
AttributeBracket,
2222
BoolLiteral,
2323
BuiltinType,
2424
ByteLiteral,
@@ -124,9 +124,11 @@ impl HlTag {
124124
fn as_str(self) -> &'static str {
125125
match self {
126126
HlTag::Symbol(symbol) => match symbol {
127+
SymbolKind::Attribute => "attribute",
127128
SymbolKind::BuiltinAttr => "builtin_attr",
128129
SymbolKind::Const => "constant",
129130
SymbolKind::ConstParam => "const_param",
131+
SymbolKind::Derive => "derive",
130132
SymbolKind::Enum => "enum",
131133
SymbolKind::Field => "field",
132134
SymbolKind::Function => "function",
@@ -147,7 +149,7 @@ impl HlTag {
147149
SymbolKind::ValueParam => "value_param",
148150
SymbolKind::Variant => "enum_variant",
149151
},
150-
HlTag::Attribute => "attribute",
152+
HlTag::AttributeBracket => "attribute_bracket",
151153
HlTag::BoolLiteral => "bool_literal",
152154
HlTag::BuiltinType => "builtin_type",
153155
HlTag::ByteLiteral => "byte_literal",

crates/ide/src/syntax_highlighting/test_data/highlight_doctest.html

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@
7272
<span class="comment documentation">/// # Examples</span>
7373
<span class="comment documentation">///</span>
7474
<span class="comment documentation">/// ```</span>
75-
<span class="comment documentation">/// #</span><span class="none injected"> </span><span class="attribute attribute injected">#</span><span class="attribute attribute injected">!</span><span class="attribute attribute injected">[</span><span class="builtin_attr attribute injected library">allow</span><span class="parenthesis attribute injected">(</span><span class="none attribute injected">unused_mut</span><span class="parenthesis attribute injected">)</span><span class="attribute attribute injected">]</span>
75+
<span class="comment documentation">/// #</span><span class="none injected"> </span><span class="attribute_bracket attribute injected">#</span><span class="attribute_bracket attribute injected">!</span><span class="attribute_bracket attribute injected">[</span><span class="builtin_attr attribute injected library">allow</span><span class="parenthesis attribute injected">(</span><span class="none attribute injected">unused_mut</span><span class="parenthesis attribute injected">)</span><span class="attribute_bracket attribute injected">]</span>
7676
<span class="comment documentation">/// </span><span class="keyword injected">let</span><span class="none injected"> </span><span class="keyword injected">mut</span><span class="none injected"> </span><span class="variable declaration injected mutable">foo</span><span class="colon injected">:</span><span class="none injected"> </span><span class="struct injected">Foo</span><span class="none injected"> </span><span class="operator injected">=</span><span class="none injected"> </span><span class="struct injected">Foo</span><span class="operator injected">::</span><span class="function injected">new</span><span class="parenthesis injected">(</span><span class="parenthesis injected">)</span><span class="semicolon injected">;</span>
7777
<span class="comment documentation">/// ```</span>
7878
<span class="keyword">pub</span> <span class="keyword">const</span> <span class="keyword">fn</span> <span class="function associated declaration public static">new</span><span class="parenthesis">(</span><span class="parenthesis">)</span> <span class="operator">-&gt;</span> <span class="struct">Foo</span> <span class="brace">{</span>
@@ -143,12 +143,12 @@
143143
<span class="comment documentation">///</span>
144144
<span class="comment documentation">/// ```</span>
145145
<span class="comment documentation">/// </span><span class="keyword control injected">loop</span><span class="none injected"> </span><span class="brace injected">{</span><span class="brace injected">}</span>
146-
<span class="attribute attribute">#</span><span class="attribute attribute">[</span><span class="builtin_attr attribute library">cfg_attr</span><span class="parenthesis attribute">(</span><span class="none attribute">not</span><span class="parenthesis attribute">(</span><span class="none attribute">feature</span><span class="attribute attribute"> </span><span class="operator attribute">=</span><span class="attribute attribute"> </span><span class="string_literal attribute">"false"</span><span class="parenthesis attribute">)</span><span class="comma attribute">,</span><span class="attribute attribute"> </span><span class="none attribute">doc</span><span class="attribute attribute"> </span><span class="operator attribute">=</span><span class="attribute attribute"> </span><span class="string_literal attribute">"</span><span class="keyword control injected">loop</span><span class="none injected"> </span><span class="brace injected">{</span><span class="brace injected">}</span><span class="string_literal attribute">"</span><span class="parenthesis attribute">)</span><span class="attribute attribute">]</span>
147-
<span class="attribute attribute">#</span><span class="attribute attribute">[</span><span class="builtin_attr attribute library">doc</span><span class="attribute attribute"> </span><span class="operator attribute">=</span><span class="attribute attribute"> </span><span class="string_literal attribute">"</span><span class="keyword control injected">loop</span><span class="none injected"> </span><span class="brace injected">{</span><span class="brace injected">}</span><span class="string_literal attribute">"</span><span class="attribute attribute">]</span>
146+
<span class="attribute_bracket attribute">#</span><span class="attribute_bracket attribute">[</span><span class="builtin_attr attribute library">cfg_attr</span><span class="parenthesis attribute">(</span><span class="none attribute">not</span><span class="parenthesis attribute">(</span><span class="none attribute">feature</span><span class="attribute_bracket attribute"> </span><span class="operator attribute">=</span><span class="attribute_bracket attribute"> </span><span class="string_literal attribute">"false"</span><span class="parenthesis attribute">)</span><span class="comma attribute">,</span><span class="attribute_bracket attribute"> </span><span class="none attribute">doc</span><span class="attribute_bracket attribute"> </span><span class="operator attribute">=</span><span class="attribute_bracket attribute"> </span><span class="string_literal attribute">"</span><span class="keyword control injected">loop</span><span class="none injected"> </span><span class="brace injected">{</span><span class="brace injected">}</span><span class="string_literal attribute">"</span><span class="parenthesis attribute">)</span><span class="attribute_bracket attribute">]</span>
147+
<span class="attribute_bracket attribute">#</span><span class="attribute_bracket attribute">[</span><span class="builtin_attr attribute library">doc</span><span class="attribute_bracket attribute"> </span><span class="operator attribute">=</span><span class="attribute_bracket attribute"> </span><span class="string_literal attribute">"</span><span class="keyword control injected">loop</span><span class="none injected"> </span><span class="brace injected">{</span><span class="brace injected">}</span><span class="string_literal attribute">"</span><span class="attribute_bracket attribute">]</span>
148148
<span class="comment documentation">/// ```</span>
149149
<span class="comment documentation">///</span>
150-
<span class="attribute attribute">#</span><span class="attribute attribute">[</span><span class="builtin_attr attribute library">cfg_attr</span><span class="parenthesis attribute">(</span><span class="none attribute">feature</span><span class="attribute attribute"> </span><span class="operator attribute">=</span><span class="attribute attribute"> </span><span class="string_literal attribute">"alloc"</span><span class="comma attribute">,</span><span class="attribute attribute"> </span><span class="none attribute">doc</span><span class="attribute attribute"> </span><span class="operator attribute">=</span><span class="attribute attribute"> </span><span class="string_literal attribute">"```rust"</span><span class="parenthesis attribute">)</span><span class="attribute attribute">]</span>
151-
<span class="attribute attribute">#</span><span class="attribute attribute">[</span><span class="builtin_attr attribute library">cfg_attr</span><span class="parenthesis attribute">(</span><span class="none attribute">not</span><span class="parenthesis attribute">(</span><span class="none attribute">feature</span><span class="attribute attribute"> </span><span class="operator attribute">=</span><span class="attribute attribute"> </span><span class="string_literal attribute">"alloc"</span><span class="parenthesis attribute">)</span><span class="comma attribute">,</span><span class="attribute attribute"> </span><span class="none attribute">doc</span><span class="attribute attribute"> </span><span class="operator attribute">=</span><span class="attribute attribute"> </span><span class="string_literal attribute">"```ignore"</span><span class="parenthesis attribute">)</span><span class="attribute attribute">]</span>
150+
<span class="attribute_bracket attribute">#</span><span class="attribute_bracket attribute">[</span><span class="builtin_attr attribute library">cfg_attr</span><span class="parenthesis attribute">(</span><span class="none attribute">feature</span><span class="attribute_bracket attribute"> </span><span class="operator attribute">=</span><span class="attribute_bracket attribute"> </span><span class="string_literal attribute">"alloc"</span><span class="comma attribute">,</span><span class="attribute_bracket attribute"> </span><span class="none attribute">doc</span><span class="attribute_bracket attribute"> </span><span class="operator attribute">=</span><span class="attribute_bracket attribute"> </span><span class="string_literal attribute">"```rust"</span><span class="parenthesis attribute">)</span><span class="attribute_bracket attribute">]</span>
151+
<span class="attribute_bracket attribute">#</span><span class="attribute_bracket attribute">[</span><span class="builtin_attr attribute library">cfg_attr</span><span class="parenthesis attribute">(</span><span class="none attribute">not</span><span class="parenthesis attribute">(</span><span class="none attribute">feature</span><span class="attribute_bracket attribute"> </span><span class="operator attribute">=</span><span class="attribute_bracket attribute"> </span><span class="string_literal attribute">"alloc"</span><span class="parenthesis attribute">)</span><span class="comma attribute">,</span><span class="attribute_bracket attribute"> </span><span class="none attribute">doc</span><span class="attribute_bracket attribute"> </span><span class="operator attribute">=</span><span class="attribute_bracket attribute"> </span><span class="string_literal attribute">"```ignore"</span><span class="parenthesis attribute">)</span><span class="attribute_bracket attribute">]</span>
152152
<span class="comment documentation">/// </span><span class="keyword injected">let</span><span class="none injected"> </span><span class="punctuation injected">_</span><span class="none injected"> </span><span class="operator injected">=</span><span class="none injected"> </span><span class="function injected">example</span><span class="parenthesis injected">(</span><span class="operator injected">&</span><span class="none injected">alloc::</span><span class="macro injected">vec!</span><span class="bracket injected">[</span><span class="numeric_literal injected">1</span><span class="comma injected">,</span><span class="none injected"> </span><span class="numeric_literal injected">2</span><span class="comma injected">,</span><span class="none injected"> </span><span class="numeric_literal injected">3</span><span class="bracket injected">]</span><span class="parenthesis injected">)</span><span class="semicolon injected">;</span>
153153
<span class="comment documentation">/// ```</span>
154154
<span class="keyword">pub</span> <span class="keyword">fn</span> <span class="function declaration public">mix_and_match</span><span class="parenthesis">(</span><span class="parenthesis">)</span> <span class="brace">{</span><span class="brace">}</span>

0 commit comments

Comments
 (0)