@@ -12,7 +12,10 @@ use syntax::{
12
12
SyntaxNode , SyntaxToken , T ,
13
13
} ;
14
14
15
- use crate :: { syntax_highlighting:: tags:: HlPunct , Highlight , HlMod , HlTag } ;
15
+ use crate :: {
16
+ syntax_highlighting:: tags:: { HlOperator , HlPunct } ,
17
+ Highlight , HlMod , HlTag ,
18
+ } ;
16
19
17
20
pub ( super ) fn element (
18
21
sema : & Semantics < RootDatabase > ,
@@ -132,7 +135,7 @@ pub(super) fn element(
132
135
INT_NUMBER | FLOAT_NUMBER => HlTag :: NumericLiteral . into ( ) ,
133
136
BYTE => HlTag :: ByteLiteral . into ( ) ,
134
137
CHAR => HlTag :: CharLiteral . into ( ) ,
135
- QUESTION => Highlight :: new ( HlTag :: Operator ) | HlMod :: ControlFlow ,
138
+ QUESTION => Highlight :: new ( HlTag :: Operator ( HlOperator :: Other ) ) | HlMod :: ControlFlow ,
136
139
LIFETIME => {
137
140
let lifetime = element. into_node ( ) . and_then ( ast:: Lifetime :: cast) . unwrap ( ) ;
138
141
@@ -146,8 +149,11 @@ pub(super) fn element(
146
149
}
147
150
}
148
151
p if p. is_punct ( ) => match p {
152
+ T ! [ & ] if element. parent ( ) . and_then ( ast:: BinExpr :: cast) . is_some ( ) => {
153
+ HlTag :: Operator ( HlOperator :: Bitwise ) . into ( )
154
+ }
149
155
T ! [ & ] => {
150
- let h = HlTag :: Operator . into ( ) ;
156
+ let h = HlTag :: Operator ( HlOperator :: Other ) . into ( ) ;
151
157
let is_unsafe = element
152
158
. parent ( )
153
159
. and_then ( ast:: RefExpr :: cast)
@@ -159,13 +165,18 @@ pub(super) fn element(
159
165
h
160
166
}
161
167
}
162
- T ! [ :: ] | T ! [ ->] | T ! [ =>] | T ! [ ..] | T ! [ =] | T ! [ @] | T ! [ . ] => HlTag :: Operator . into ( ) ,
168
+ T ! [ :: ] | T ! [ ->] | T ! [ =>] | T ! [ ..] | T ! [ =] | T ! [ @] | T ! [ . ] => {
169
+ HlTag :: Operator ( HlOperator :: Other ) . into ( )
170
+ }
163
171
T ! [ !] if element. parent ( ) . and_then ( ast:: MacroCall :: cast) . is_some ( ) => {
164
172
HlTag :: Symbol ( SymbolKind :: Macro ) . into ( )
165
173
}
166
174
T ! [ !] if element. parent ( ) . and_then ( ast:: NeverType :: cast) . is_some ( ) => {
167
175
HlTag :: BuiltinType . into ( )
168
176
}
177
+ T ! [ !] if element. parent ( ) . and_then ( ast:: PrefixExpr :: cast) . is_some ( ) => {
178
+ HlTag :: Operator ( HlOperator :: Logical ) . into ( )
179
+ }
169
180
T ! [ * ] if element. parent ( ) . and_then ( ast:: PtrType :: cast) . is_some ( ) => {
170
181
HlTag :: Keyword . into ( )
171
182
}
@@ -175,9 +186,9 @@ pub(super) fn element(
175
186
let expr = prefix_expr. expr ( ) ?;
176
187
let ty = sema. type_of_expr ( & expr) ?;
177
188
if ty. is_raw_ptr ( ) {
178
- HlTag :: Operator | HlMod :: Unsafe
189
+ HlTag :: Operator ( HlOperator :: Other ) | HlMod :: Unsafe
179
190
} else if let Some ( ast:: PrefixOp :: Deref ) = prefix_expr. op_kind ( ) {
180
- HlTag :: Operator . into ( )
191
+ HlTag :: Operator ( HlOperator :: Other ) . into ( )
181
192
} else {
182
193
HlTag :: Punctuation ( HlPunct :: Other ) . into ( )
183
194
}
@@ -188,19 +199,43 @@ pub(super) fn element(
188
199
let expr = prefix_expr. expr ( ) ?;
189
200
match expr {
190
201
ast:: Expr :: Literal ( _) => HlTag :: NumericLiteral ,
191
- _ => HlTag :: Operator ,
202
+ _ => HlTag :: Operator ( HlOperator :: Other ) ,
192
203
}
193
204
. into ( )
194
205
}
195
206
_ if element. parent ( ) . and_then ( ast:: PrefixExpr :: cast) . is_some ( ) => {
196
- HlTag :: Operator . into ( )
207
+ HlTag :: Operator ( HlOperator :: Other ) . into ( )
208
+ }
209
+ T ! [ +] | T ! [ -] | T ! [ * ] | T ! [ /] | T ! [ +=] | T ! [ -=] | T ! [ *=] | T ! [ /=]
210
+ if element. parent ( ) . and_then ( ast:: BinExpr :: cast) . is_some ( ) =>
211
+ {
212
+ HlTag :: Operator ( HlOperator :: Arithmetic ) . into ( )
213
+ }
214
+ T ! [ |] | T ! [ & ] | T ! [ !] | T ! [ ^] | T ! [ |=] | T ! [ &=] | T ! [ ^=]
215
+ if element. parent ( ) . and_then ( ast:: BinExpr :: cast) . is_some ( ) =>
216
+ {
217
+ HlTag :: Operator ( HlOperator :: Bitwise ) . into ( )
218
+ }
219
+ T ! [ &&] | T ! [ ||] if element. parent ( ) . and_then ( ast:: BinExpr :: cast) . is_some ( ) => {
220
+ HlTag :: Operator ( HlOperator :: Logical ) . into ( )
221
+ }
222
+ T ! [ >] | T ! [ <] | T ! [ ==] | T ! [ >=] | T ! [ <=] | T ! [ !=]
223
+ if element. parent ( ) . and_then ( ast:: BinExpr :: cast) . is_some ( ) =>
224
+ {
225
+ HlTag :: Operator ( HlOperator :: Comparision ) . into ( )
226
+ }
227
+ _ if element. parent ( ) . and_then ( ast:: BinExpr :: cast) . is_some ( ) => {
228
+ HlTag :: Operator ( HlOperator :: Other ) . into ( )
197
229
}
198
- _ if element. parent ( ) . and_then ( ast:: BinExpr :: cast) . is_some ( ) => HlTag :: Operator . into ( ) ,
199
230
_ if element. parent ( ) . and_then ( ast:: RangeExpr :: cast) . is_some ( ) => {
200
- HlTag :: Operator . into ( )
231
+ HlTag :: Operator ( HlOperator :: Other ) . into ( )
232
+ }
233
+ _ if element. parent ( ) . and_then ( ast:: RangePat :: cast) . is_some ( ) => {
234
+ HlTag :: Operator ( HlOperator :: Other ) . into ( )
235
+ }
236
+ _ if element. parent ( ) . and_then ( ast:: RestPat :: cast) . is_some ( ) => {
237
+ HlTag :: Operator ( HlOperator :: Other ) . into ( )
201
238
}
202
- _ if element. parent ( ) . and_then ( ast:: RangePat :: cast) . is_some ( ) => HlTag :: Operator . into ( ) ,
203
- _ if element. parent ( ) . and_then ( ast:: RestPat :: cast) . is_some ( ) => HlTag :: Operator . into ( ) ,
204
239
_ if element. parent ( ) . and_then ( ast:: Attr :: cast) . is_some ( ) => HlTag :: Attribute . into ( ) ,
205
240
kind => HlTag :: Punctuation ( match kind {
206
241
T ! [ '[' ] | T ! [ ']' ] => HlPunct :: Bracket ,
0 commit comments