@@ -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,21 @@ 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 ( ) => {
172
+ eprintln ! ( "in macro call: {}" , element) ;
164
173
HlTag :: Symbol ( SymbolKind :: Macro ) . into ( )
165
174
}
166
175
T ! [ !] if element. parent ( ) . and_then ( ast:: NeverType :: cast) . is_some ( ) => {
176
+ eprintln ! ( "in never type : {}" , element) ;
167
177
HlTag :: BuiltinType . into ( )
168
178
}
179
+ T ! [ !] if element. parent ( ) . and_then ( ast:: PrefixExpr :: cast) . is_some ( ) => {
180
+ eprintln ! ( "pre expr for : {}" , element) ;
181
+ HlTag :: Operator ( HlOperator :: Bitwise ) . into ( )
182
+ }
169
183
T ! [ * ] if element. parent ( ) . and_then ( ast:: PtrType :: cast) . is_some ( ) => {
170
184
HlTag :: Keyword . into ( )
171
185
}
@@ -175,32 +189,60 @@ pub(super) fn element(
175
189
let expr = prefix_expr. expr ( ) ?;
176
190
let ty = sema. type_of_expr ( & expr) ?;
177
191
if ty. is_raw_ptr ( ) {
178
- HlTag :: Operator | HlMod :: Unsafe
192
+ HlTag :: Operator ( HlOperator :: Other ) | HlMod :: Unsafe
179
193
} else if let Some ( ast:: PrefixOp :: Deref ) = prefix_expr. op_kind ( ) {
180
- HlTag :: Operator . into ( )
194
+ HlTag :: Operator ( HlOperator :: Other ) . into ( )
181
195
} else {
182
196
HlTag :: Punctuation ( HlPunct :: Other ) . into ( )
183
197
}
184
198
}
185
199
T ! [ -] if element. parent ( ) . and_then ( ast:: PrefixExpr :: cast) . is_some ( ) => {
200
+ eprintln ! ( "the - operator: {}" , element) ;
186
201
let prefix_expr = element. parent ( ) . and_then ( ast:: PrefixExpr :: cast) ?;
187
202
188
203
let expr = prefix_expr. expr ( ) ?;
189
204
match expr {
190
205
ast:: Expr :: Literal ( _) => HlTag :: NumericLiteral ,
191
- _ => HlTag :: Operator ,
206
+ _ => HlTag :: Operator ( HlOperator :: Other ) ,
192
207
}
193
208
. into ( )
194
209
}
195
210
_ if element. parent ( ) . and_then ( ast:: PrefixExpr :: cast) . is_some ( ) => {
196
- HlTag :: Operator . into ( )
211
+ eprintln ! ( "the prefix expr block: {}" , element) ;
212
+ HlTag :: Operator ( HlOperator :: Other ) . into ( )
213
+ }
214
+ T ! [ +] | T ! [ -] | T ! [ * ] | T ! [ /] | T ! [ +=] | T ! [ -=] | T ! [ *=] | T ! [ /=]
215
+ if element. parent ( ) . and_then ( ast:: BinExpr :: cast) . is_some ( ) =>
216
+ {
217
+ HlTag :: Operator ( HlOperator :: Arithmetic ) . into ( )
218
+ }
219
+ T ! [ |] | T ! [ & ] | T ! [ !] | T ! [ ^] | T ! [ |=] | T ! [ &=] | T ! [ ^=]
220
+ if element. parent ( ) . and_then ( ast:: BinExpr :: cast) . is_some ( ) =>
221
+ {
222
+ HlTag :: Operator ( HlOperator :: Bitwise ) . into ( )
223
+ }
224
+ T ! [ &&] | T ! [ ||] if element. parent ( ) . and_then ( ast:: BinExpr :: cast) . is_some ( ) => {
225
+ HlTag :: Operator ( HlOperator :: Logical ) . into ( )
226
+ }
227
+ T ! [ >] | T ! [ <] | T ! [ ==] | T ! [ >=] | T ! [ <=] | T ! [ !=]
228
+ if element. parent ( ) . and_then ( ast:: BinExpr :: cast) . is_some ( ) =>
229
+ {
230
+ HlTag :: Operator ( HlOperator :: Comparision ) . into ( )
231
+ }
232
+ _ if element. parent ( ) . and_then ( ast:: BinExpr :: cast) . is_some ( ) => {
233
+ eprintln ! ( "the bin expr : {}" , element) ;
234
+ HlTag :: Operator ( HlOperator :: Other ) . into ( )
197
235
}
198
- _ if element. parent ( ) . and_then ( ast:: BinExpr :: cast) . is_some ( ) => HlTag :: Operator . into ( ) ,
199
236
_ if element. parent ( ) . and_then ( ast:: RangeExpr :: cast) . is_some ( ) => {
200
- HlTag :: Operator . into ( )
237
+ eprintln ! ( "the range expr block: {}" , element) ;
238
+ HlTag :: Operator ( HlOperator :: Other ) . into ( )
239
+ }
240
+ _ if element. parent ( ) . and_then ( ast:: RangePat :: cast) . is_some ( ) => {
241
+ HlTag :: Operator ( HlOperator :: Other ) . into ( )
242
+ }
243
+ _ if element. parent ( ) . and_then ( ast:: RestPat :: cast) . is_some ( ) => {
244
+ HlTag :: Operator ( HlOperator :: Other ) . into ( )
201
245
}
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
246
_ if element. parent ( ) . and_then ( ast:: Attr :: cast) . is_some ( ) => HlTag :: Attribute . into ( ) ,
205
247
kind => HlTag :: Punctuation ( match kind {
206
248
T ! [ '[' ] | T ! [ ']' ] => HlPunct :: Bracket ,
0 commit comments