aboutsummaryrefslogtreecommitdiff
path: root/crates/ide/src/syntax_highlighting.rs
diff options
context:
space:
mode:
authorLukas Wirth <[email protected]>2021-05-26 14:23:05 +0100
committerLukas Wirth <[email protected]>2021-05-26 14:23:05 +0100
commit7ebfc3d41008414a6d1698851eea70da77cd455e (patch)
tree5883b24b29b6cca7008e1059356ae32ec9ecf162 /crates/ide/src/syntax_highlighting.rs
parent5a1fd05760260be9a91f6fad2fd6463edffbcb13 (diff)
Document semantic token tags
Diffstat (limited to 'crates/ide/src/syntax_highlighting.rs')
-rw-r--r--crates/ide/src/syntax_highlighting.rs78
1 files changed, 74 insertions, 4 deletions
diff --git a/crates/ide/src/syntax_highlighting.rs b/crates/ide/src/syntax_highlighting.rs
index 7f7f4d38a..79c2f4a1e 100644
--- a/crates/ide/src/syntax_highlighting.rs
+++ b/crates/ide/src/syntax_highlighting.rs
@@ -42,13 +42,83 @@ pub struct HlRange {
42// Feature: Semantic Syntax Highlighting 42// Feature: Semantic Syntax Highlighting
43// 43//
44// rust-analyzer highlights the code semantically. 44// rust-analyzer highlights the code semantically.
45// For example, `bar` in `foo::Bar` might be colored differently depending on whether `Bar` is an enum or a trait. 45// For example, `Bar` in `foo::Bar` might be colored differently depending on whether `Bar` is an enum or a trait.
46// rust-analyzer does not specify colors directly, instead it assigns tag (like `struct`) and a set of modifiers (like `declaration`) to each token. 46// rust-analyzer does not specify colors directly, instead it assigns a tag (like `struct`) and a set of modifiers (like `declaration`) to each token.
47// It's up to the client to map those to specific colors. 47// It's up to the client to map those to specific colors.
48// 48//
49// The general rule is that a reference to an entity gets colored the same way as the entity itself. 49// The general rule is that a reference to an entity gets colored the same way as the entity itself.
50// We also give special modifier for `mut` and `&mut` local variables. 50// We also give special modifier for `mut` and `&mut` local variables.
51// 51//
52//
53// .Token Tags
54//
55// Rust-analyzer currently emits the following token tags:
56//
57// - For items:
58// +
59// [horizontal]
60// enum:: Emitted for enums.
61// function:: Emitted for free-standing functions.
62// macro:: Emitted for macros.
63// method:: Emitted for associated functions, also knowns as methods.
64// namespace:: Emitted for modules.
65// struct:: Emitted for structs.
66// trait:: Emitted for traits.
67// typeAlias:: Emitted for type aliases and `Self` in `impl`s.
68// union:: Emitted for unions.
69//
70// - For literals:
71// +
72// [horizontal]
73// boolean:: Emitted for the boolean literals `true` and `false`.
74// character:: Emitted for character literals.
75// number:: Emitted for numeric literals.
76// string:: Emitted for string literals.
77// escapeSequence:: Emitted for escaped sequences inside strings like `\n`.
78// formatSpecifier:: Emitted for format specifiers `{:?}` in `format!`-like macros.
79//
80// - For operators:
81// +
82// [horizontal]
83// operator:: Emitted for general operators.
84// arithmetic:: Emitted for the arithmetic operators `+`, `-`, `*`, `/`, `+=`, `-=`, `*=`, `/=`.
85// bitwise:: Emitted for the bitwise operators `|`, `&`, `!`, `^`, `|=`, `&=`, `^=`.
86// comparison:: Emitted for the comparison operators `>`, `<`, `==`, `>=`, `<=`, `!=`.
87// logical:: Emitted for the logical operators `||`, `&&`, `!`.
88//
89// - For punctuation:
90// +
91// [horizontal]
92// punctuation:: Emitted for general punctuation.
93// angle:: Emitted for `<>` angle brackets.
94// brace:: Emitted for `{}` braces.
95// bracket:: Emitted for `[]` brackets.
96// parenthesis:: Emitted for `()` parentheses.
97// colon:: Emitted for the `:` token.
98// comma:: Emitted for the `,` token.
99// dot:: Emitted for the `.` token.
100// Semi:: Emitted for the `;` token.
101//
102// //-
103//
104// [horizontal]
105// attribute:: Emitted for attributes.
106// builtinType:: Emitted for builtin types like `u32`, `str` and `f32`.
107// comment:: Emitted for comments.
108// constParameter:: Emitted for const parameters.
109// enumMember:: Emitted for enum variants.
110// generic:: Emitted for generic tokens that have no mapping.
111// keyword:: Emitted for keywords.
112// label:: Emitted for labels.
113// lifetime:: Emitted for lifetimes.
114// parameter:: Emitted for non-self function parameters.
115// property:: Emitted for struct and union fields.
116// selfKeyword:: Emitted for the self function parameter and self path-specifier.
117// typeParameter:: Emitted for type parameters.
118// unresolvedReference:: Emitted for unresolved references, names that rust-analyzer can't find the definition of.
119// variable:: Emitted for locals, constants and statics.
120//
121//
52// .Token Modifiers 122// .Token Modifiers
53// 123//
54// Token modifiers allow to style some elements in the source code more precisely. 124// Token modifiers allow to style some elements in the source code more precisely.
@@ -56,10 +126,10 @@ pub struct HlRange {
56// Rust-analyzer currently emits the following token modifiers: 126// Rust-analyzer currently emits the following token modifiers:
57// 127//
58// [horizontal] 128// [horizontal]
59// associated:: Emitted for associated items.
60// async:: Emitted for async functions and the `async` and `await` keywords. 129// async:: Emitted for async functions and the `async` and `await` keywords.
61// attribute:: Emitted for tokens inside attributes. 130// attribute:: Emitted for tokens inside attributes.
62// callable:: Emitted for locals whose types implements one of the `Fn*` traits. 131// callable:: Emitted for locals whose types implements one of the `Fn*` traits.
132// constant:: Emitted for consts.
63// consuming:: Emitted for locals that are being consumed when use in a function call. 133// consuming:: Emitted for locals that are being consumed when use in a function call.
64// controlFlow:: Emitted for control-flow related tokens, this includes the `?` operator. 134// controlFlow:: Emitted for control-flow related tokens, this includes the `?` operator.
65// declaration:: Emitted for names of definitions, like `foo` in `fn foo() {}`. 135// declaration:: Emitted for names of definitions, like `foo` in `fn foo() {}`.
@@ -68,7 +138,7 @@ pub struct HlRange {
68// intraDocLink:: Emitted for intra doc links in doc-strings. 138// intraDocLink:: Emitted for intra doc links in doc-strings.
69// library:: Emitted for items that are defined outside of the current crate. 139// library:: Emitted for items that are defined outside of the current crate.
70// mutable:: Emitted for mutable locals and statics. 140// mutable:: Emitted for mutable locals and statics.
71// static:: Emitted for "static" functions, also known as functions that do not take a `self` param. 141// static:: Emitted for "static" functions, also known as functions that do not take a `self` param, as well as statics and consts.
72// trait:: Emitted for associated trait items. 142// trait:: Emitted for associated trait items.
73// unsafe:: Emitted for unsafe operations, like unsafe function calls, as well as the `unsafe` token. 143// unsafe:: Emitted for unsafe operations, like unsafe function calls, as well as the `unsafe` token.
74// 144//