@@ -895,7 +895,7 @@ impl<'src> Classifier<'src> {
895
895
/// The general structure for this method is to iterate over each token,
896
896
/// possibly giving it an HTML span with a class specifying what flavor of
897
897
/// token is used.
898
- fn highlight ( mut self , sink : & mut dyn FnMut ( Span , Highlight < ' src > ) ) {
898
+ fn highlight ( mut self , mut sink : impl FnMut ( Span , Highlight < ' src > ) ) {
899
899
loop {
900
900
if let Some ( decs) = self . decorations . as_mut ( ) {
901
901
let byte_pos = self . byte_pos ;
@@ -918,15 +918,15 @@ impl<'src> Classifier<'src> {
918
918
let tokens = self . get_full_ident_path ( ) ;
919
919
for ( token, start, end) in & tokens {
920
920
let text = & self . src [ * start..* end] ;
921
- self . advance ( * token, text, sink, * start as u32 ) ;
921
+ self . advance ( * token, text, & mut sink, * start as u32 ) ;
922
922
self . byte_pos += text. len ( ) as u32 ;
923
923
}
924
924
if !tokens. is_empty ( ) {
925
925
continue ;
926
926
}
927
927
}
928
928
if let Some ( ( token, text, before) ) = self . next ( ) {
929
- self . advance ( token, text, sink, before) ;
929
+ self . advance ( token, text, & mut sink, before) ;
930
930
} else {
931
931
break ;
932
932
}
@@ -943,15 +943,14 @@ impl<'src> Classifier<'src> {
943
943
& mut self ,
944
944
token : TokenKind ,
945
945
text : & ' src str ,
946
- sink : & mut dyn FnMut ( Span , Highlight < ' src > ) ,
946
+ mut sink : impl FnMut ( Span , Highlight < ' src > ) ,
947
947
before : u32 ,
948
948
) {
949
949
let lookahead = self . peek ( ) ;
950
950
let file_span = self . file_span ;
951
- let no_highlight = |sink : & mut dyn FnMut ( _, _) | {
952
- sink ( new_span ( before, text, file_span) , Highlight :: Token { text, class : None } )
953
- } ;
954
- let whitespace = |sink : & mut dyn FnMut ( _, _) | {
951
+ let no_highlight =
952
+ || ( new_span ( before, text, file_span) , Highlight :: Token { text, class : None } ) ;
953
+ let mut whitespace = || {
955
954
let mut start = 0u32 ;
956
955
for part in text. split ( '\n' ) . intersperse ( "\n " ) . filter ( |s| !s. is_empty ( ) ) {
957
956
sink (
@@ -962,7 +961,10 @@ impl<'src> Classifier<'src> {
962
961
}
963
962
} ;
964
963
let class = match token {
965
- TokenKind :: Whitespace => return whitespace ( sink) ,
964
+ TokenKind :: Whitespace => {
965
+ whitespace ( ) ;
966
+ return ;
967
+ }
966
968
TokenKind :: LineComment { doc_style } | TokenKind :: BlockComment { doc_style, .. } => {
967
969
if doc_style. is_some ( ) {
968
970
Class :: DocComment
@@ -983,7 +985,10 @@ impl<'src> Classifier<'src> {
983
985
// or a reference or pointer type. Unless, of course, it looks like
984
986
// a logical and or a multiplication operator: `&&` or `* `.
985
987
TokenKind :: Star => match self . tokens . peek ( ) {
986
- Some ( ( TokenKind :: Whitespace , _) ) => return whitespace ( sink) ,
988
+ Some ( ( TokenKind :: Whitespace , _) ) => {
989
+ whitespace ( ) ;
990
+ return ;
991
+ }
987
992
Some ( ( TokenKind :: Ident , "mut" ) ) => {
988
993
self . next ( ) ;
989
994
sink (
@@ -1013,7 +1018,10 @@ impl<'src> Classifier<'src> {
1013
1018
sink ( DUMMY_SP , Highlight :: Token { text : "&=" , class : None } ) ;
1014
1019
return ;
1015
1020
}
1016
- Some ( ( TokenKind :: Whitespace , _) ) => return whitespace ( sink) ,
1021
+ Some ( ( TokenKind :: Whitespace , _) ) => {
1022
+ whitespace ( ) ;
1023
+ return ;
1024
+ }
1017
1025
Some ( ( TokenKind :: Ident , "mut" ) ) => {
1018
1026
self . next ( ) ;
1019
1027
sink (
@@ -1037,7 +1045,11 @@ impl<'src> Classifier<'src> {
1037
1045
sink ( DUMMY_SP , Highlight :: Token { text : "=>" , class : None } ) ;
1038
1046
return ;
1039
1047
}
1040
- _ => return no_highlight ( sink) ,
1048
+ _ => {
1049
+ let ( span, highlight) = no_highlight ( ) ;
1050
+ sink ( span, highlight) ;
1051
+ return ;
1052
+ }
1041
1053
} ,
1042
1054
TokenKind :: Minus if lookahead == Some ( TokenKind :: Gt ) => {
1043
1055
self . next ( ) ;
@@ -1054,7 +1066,11 @@ impl<'src> Classifier<'src> {
1054
1066
| TokenKind :: Percent
1055
1067
| TokenKind :: Bang
1056
1068
| TokenKind :: Lt
1057
- | TokenKind :: Gt => return no_highlight ( sink) ,
1069
+ | TokenKind :: Gt => {
1070
+ let ( span, highlight) = no_highlight ( ) ;
1071
+ sink ( span, highlight) ;
1072
+ return ;
1073
+ }
1058
1074
1059
1075
// Miscellaneous, no highlighting.
1060
1076
TokenKind :: Dot
@@ -1069,7 +1085,11 @@ impl<'src> Classifier<'src> {
1069
1085
| TokenKind :: Tilde
1070
1086
| TokenKind :: Colon
1071
1087
| TokenKind :: Frontmatter { .. }
1072
- | TokenKind :: Unknown => return no_highlight ( sink) ,
1088
+ | TokenKind :: Unknown => {
1089
+ let ( span, highlight) = no_highlight ( ) ;
1090
+ sink ( span, highlight) ;
1091
+ return ;
1092
+ }
1073
1093
1074
1094
TokenKind :: Question => Class :: QuestionMark ,
1075
1095
@@ -1078,7 +1098,11 @@ impl<'src> Classifier<'src> {
1078
1098
self . in_macro_nonterminal = true ;
1079
1099
Class :: MacroNonTerminal
1080
1100
}
1081
- _ => return no_highlight ( sink) ,
1101
+ _ => {
1102
+ let ( span, highlight) = no_highlight ( ) ;
1103
+ sink ( span, highlight) ;
1104
+ return ;
1105
+ }
1082
1106
} ,
1083
1107
1084
1108
// This might be the start of an attribute. We're going to want to
@@ -1109,9 +1133,11 @@ impl<'src> Classifier<'src> {
1109
1133
Highlight :: EnterSpan { class : Class :: Attribute } ,
1110
1134
) ;
1111
1135
}
1112
- _ => ( ) ,
1136
+ _ => { }
1113
1137
}
1114
- return no_highlight ( sink) ;
1138
+ let ( span, highlight) = no_highlight ( ) ;
1139
+ sink ( span, highlight) ;
1140
+ return ;
1115
1141
}
1116
1142
TokenKind :: CloseBracket => {
1117
1143
if self . in_attribute {
@@ -1123,7 +1149,9 @@ impl<'src> Classifier<'src> {
1123
1149
sink ( DUMMY_SP , Highlight :: ExitSpan ) ;
1124
1150
return ;
1125
1151
}
1126
- return no_highlight ( sink) ;
1152
+ let ( span, highlight) = no_highlight ( ) ;
1153
+ sink ( span, highlight) ;
1154
+ return ;
1127
1155
}
1128
1156
TokenKind :: Literal { kind, .. } => match kind {
1129
1157
// Text literals.
@@ -1138,7 +1166,11 @@ impl<'src> Classifier<'src> {
1138
1166
// Number literals.
1139
1167
LiteralKind :: Float { .. } | LiteralKind :: Int { .. } => Class :: Number ,
1140
1168
} ,
1141
- TokenKind :: GuardedStrPrefix => return no_highlight ( sink) ,
1169
+ TokenKind :: GuardedStrPrefix => {
1170
+ let ( span, highlight) = no_highlight ( ) ;
1171
+ sink ( span, highlight) ;
1172
+ return ;
1173
+ }
1142
1174
TokenKind :: Ident | TokenKind :: RawIdent if lookahead == Some ( TokenKind :: Bang ) => {
1143
1175
self . in_macro = true ;
1144
1176
let span = new_span ( before, text, file_span) ;
0 commit comments