@@ -469,22 +469,37 @@ impl<'a> Classifier<'a> {
469469 // Assume that '&' or '*' is the reference or dereference operator
470470 // or a reference or pointer type. Unless, of course, it looks like
471471 // a logical and or a multiplication operator: `&&` or `* `.
472- TokenKind :: Star => match self . peek ( ) {
473- Some ( TokenKind :: Whitespace ) => Class :: Op ,
472+ TokenKind :: Star => match self . tokens . peek ( ) {
473+ Some ( ( TokenKind :: Whitespace , _) ) => Class :: Op ,
474+ Some ( ( TokenKind :: Ident , "mut" ) ) => {
475+ self . next ( ) ;
476+ sink ( Highlight :: Token { text : "*mut" , class : Some ( Class :: RefKeyWord ) } ) ;
477+ return ;
478+ }
479+ Some ( ( TokenKind :: Ident , "const" ) ) => {
480+ self . next ( ) ;
481+ sink ( Highlight :: Token { text : "*const" , class : Some ( Class :: RefKeyWord ) } ) ;
482+ return ;
483+ }
474484 _ => Class :: RefKeyWord ,
475485 } ,
476- TokenKind :: And => match lookahead {
477- Some ( TokenKind :: And ) => {
486+ TokenKind :: And => match self . tokens . peek ( ) {
487+ Some ( ( TokenKind :: And , _ ) ) => {
478488 self . next ( ) ;
479489 sink ( Highlight :: Token { text : "&&" , class : Some ( Class :: Op ) } ) ;
480490 return ;
481491 }
482- Some ( TokenKind :: Eq ) => {
492+ Some ( ( TokenKind :: Eq , _ ) ) => {
483493 self . next ( ) ;
484494 sink ( Highlight :: Token { text : "&=" , class : Some ( Class :: Op ) } ) ;
485495 return ;
486496 }
487- Some ( TokenKind :: Whitespace ) => Class :: Op ,
497+ Some ( ( TokenKind :: Whitespace , _) ) => Class :: Op ,
498+ Some ( ( TokenKind :: Ident , "mut" ) ) => {
499+ self . next ( ) ;
500+ sink ( Highlight :: Token { text : "&mut" , class : Some ( Class :: RefKeyWord ) } ) ;
501+ return ;
502+ }
488503 _ => Class :: RefKeyWord ,
489504 } ,
490505
0 commit comments