diff options
author | Lukas Wirth <[email protected]> | 2021-05-26 14:23:05 +0100 |
---|---|---|
committer | Lukas Wirth <[email protected]> | 2021-05-26 14:23:05 +0100 |
commit | 7ebfc3d41008414a6d1698851eea70da77cd455e (patch) | |
tree | 5883b24b29b6cca7008e1059356ae32ec9ecf162 /crates/ide | |
parent | 5a1fd05760260be9a91f6fad2fd6463edffbcb13 (diff) |
Document semantic token tags
Diffstat (limited to 'crates/ide')
-rw-r--r-- | crates/ide/src/syntax_highlighting.rs | 78 |
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 | // |