@@ -895,7 +895,7 @@ impl<'src> Classifier<'src> {
895895 /// The general structure for this method is to iterate over each token,
896896 /// possibly giving it an HTML span with a class specifying what flavor of
897897 /// 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 > ) ) {
899899 loop {
900900 if let Some ( decs) = self . decorations . as_mut ( ) {
901901 let byte_pos = self . byte_pos ;
@@ -918,15 +918,15 @@ impl<'src> Classifier<'src> {
918918 let tokens = self . get_full_ident_path ( ) ;
919919 for ( token, start, end) in & tokens {
920920 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 ) ;
922922 self . byte_pos += text. len ( ) as u32 ;
923923 }
924924 if !tokens. is_empty ( ) {
925925 continue ;
926926 }
927927 }
928928 if let Some ( ( token, text, before) ) = self . next ( ) {
929- self . advance ( token, text, sink, before) ;
929+ self . advance ( token, text, & mut sink, before) ;
930930 } else {
931931 break ;
932932 }
@@ -943,15 +943,14 @@ impl<'src> Classifier<'src> {
943943 & mut self ,
944944 token : TokenKind ,
945945 text : & ' src str ,
946- sink : & mut dyn FnMut ( Span , Highlight < ' src > ) ,
946+ mut sink : impl FnMut ( Span , Highlight < ' src > ) ,
947947 before : u32 ,
948948 ) {
949949 let lookahead = self . peek ( ) ;
950950 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 = || {
955954 let mut start = 0u32 ;
956955 for part in text. split ( '\n' ) . intersperse ( "\n " ) . filter ( |s| !s. is_empty ( ) ) {
957956 sink (
@@ -962,7 +961,10 @@ impl<'src> Classifier<'src> {
962961 }
963962 } ;
964963 let class = match token {
965- TokenKind :: Whitespace => return whitespace ( sink) ,
964+ TokenKind :: Whitespace => {
965+ whitespace ( ) ;
966+ return ;
967+ }
966968 TokenKind :: LineComment { doc_style } | TokenKind :: BlockComment { doc_style, .. } => {
967969 if doc_style. is_some ( ) {
968970 Class :: DocComment
@@ -983,7 +985,10 @@ impl<'src> Classifier<'src> {
983985 // or a reference or pointer type. Unless, of course, it looks like
984986 // a logical and or a multiplication operator: `&&` or `* `.
985987 TokenKind :: Star => match self . tokens . peek ( ) {
986- Some ( ( TokenKind :: Whitespace , _) ) => return whitespace ( sink) ,
988+ Some ( ( TokenKind :: Whitespace , _) ) => {
989+ whitespace ( ) ;
990+ return ;
991+ }
987992 Some ( ( TokenKind :: Ident , "mut" ) ) => {
988993 self . next ( ) ;
989994 sink (
@@ -1013,7 +1018,10 @@ impl<'src> Classifier<'src> {
10131018 sink ( DUMMY_SP , Highlight :: Token { text : "&=" , class : None } ) ;
10141019 return ;
10151020 }
1016- Some ( ( TokenKind :: Whitespace , _) ) => return whitespace ( sink) ,
1021+ Some ( ( TokenKind :: Whitespace , _) ) => {
1022+ whitespace ( ) ;
1023+ return ;
1024+ }
10171025 Some ( ( TokenKind :: Ident , "mut" ) ) => {
10181026 self . next ( ) ;
10191027 sink (
@@ -1037,7 +1045,11 @@ impl<'src> Classifier<'src> {
10371045 sink ( DUMMY_SP , Highlight :: Token { text : "=>" , class : None } ) ;
10381046 return ;
10391047 }
1040- _ => return no_highlight ( sink) ,
1048+ _ => {
1049+ let ( span, highlight) = no_highlight ( ) ;
1050+ sink ( span, highlight) ;
1051+ return ;
1052+ }
10411053 } ,
10421054 TokenKind :: Minus if lookahead == Some ( TokenKind :: Gt ) => {
10431055 self . next ( ) ;
@@ -1054,7 +1066,11 @@ impl<'src> Classifier<'src> {
10541066 | TokenKind :: Percent
10551067 | TokenKind :: Bang
10561068 | 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+ }
10581074
10591075 // Miscellaneous, no highlighting.
10601076 TokenKind :: Dot
@@ -1069,7 +1085,11 @@ impl<'src> Classifier<'src> {
10691085 | TokenKind :: Tilde
10701086 | TokenKind :: Colon
10711087 | 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+ }
10731093
10741094 TokenKind :: Question => Class :: QuestionMark ,
10751095
@@ -1078,7 +1098,11 @@ impl<'src> Classifier<'src> {
10781098 self . in_macro_nonterminal = true ;
10791099 Class :: MacroNonTerminal
10801100 }
1081- _ => return no_highlight ( sink) ,
1101+ _ => {
1102+ let ( span, highlight) = no_highlight ( ) ;
1103+ sink ( span, highlight) ;
1104+ return ;
1105+ }
10821106 } ,
10831107
10841108 // This might be the start of an attribute. We're going to want to
@@ -1109,9 +1133,11 @@ impl<'src> Classifier<'src> {
11091133 Highlight :: EnterSpan { class : Class :: Attribute } ,
11101134 ) ;
11111135 }
1112- _ => ( ) ,
1136+ _ => { }
11131137 }
1114- return no_highlight ( sink) ;
1138+ let ( span, highlight) = no_highlight ( ) ;
1139+ sink ( span, highlight) ;
1140+ return ;
11151141 }
11161142 TokenKind :: CloseBracket => {
11171143 if self . in_attribute {
@@ -1123,7 +1149,9 @@ impl<'src> Classifier<'src> {
11231149 sink ( DUMMY_SP , Highlight :: ExitSpan ) ;
11241150 return ;
11251151 }
1126- return no_highlight ( sink) ;
1152+ let ( span, highlight) = no_highlight ( ) ;
1153+ sink ( span, highlight) ;
1154+ return ;
11271155 }
11281156 TokenKind :: Literal { kind, .. } => match kind {
11291157 // Text literals.
@@ -1138,7 +1166,11 @@ impl<'src> Classifier<'src> {
11381166 // Number literals.
11391167 LiteralKind :: Float { .. } | LiteralKind :: Int { .. } => Class :: Number ,
11401168 } ,
1141- TokenKind :: GuardedStrPrefix => return no_highlight ( sink) ,
1169+ TokenKind :: GuardedStrPrefix => {
1170+ let ( span, highlight) = no_highlight ( ) ;
1171+ sink ( span, highlight) ;
1172+ return ;
1173+ }
11421174 TokenKind :: Ident | TokenKind :: RawIdent if lookahead == Some ( TokenKind :: Bang ) => {
11431175 self . in_macro = true ;
11441176 let span = new_span ( before, text, file_span) ;
0 commit comments