@@ -930,15 +930,38 @@ impl<'a> Parser<'a> {
930
930
}
931
931
932
932
let frame = & self . token_cursor . frame ;
933
- match frame. tree_cursor . look_ahead ( dist - 1 ) {
934
- Some ( tree) => match tree {
935
- TokenTree :: Token ( token) => looker ( token) ,
936
- TokenTree :: Delimited ( dspan, delim, _) => {
937
- looker ( & Token :: new ( token:: OpenDelim ( * delim) , dspan. open ) )
938
- }
939
- } ,
940
- None => looker ( & Token :: new ( token:: CloseDelim ( frame. delim ) , frame. span . close ) ) ,
933
+ if frame. delim != DelimToken :: NoDelim {
934
+ let all_normal = ( 0 ..dist) . all ( |i| {
935
+ let token = frame. tree_cursor . look_ahead ( i) ;
936
+ !matches ! ( token, Some ( TokenTree :: Delimited ( _, DelimToken :: NoDelim , _) ) )
937
+ } ) ;
938
+ if all_normal {
939
+ return match frame. tree_cursor . look_ahead ( dist - 1 ) {
940
+ Some ( tree) => match tree {
941
+ TokenTree :: Token ( token) => looker ( token) ,
942
+ TokenTree :: Delimited ( dspan, delim, _) => {
943
+ looker ( & Token :: new ( token:: OpenDelim ( * delim) , dspan. open ) )
944
+ }
945
+ } ,
946
+ None => looker ( & Token :: new ( token:: CloseDelim ( frame. delim ) , frame. span . close ) ) ,
947
+ } ;
948
+ }
949
+ }
950
+
951
+ let mut cursor = self . token_cursor . clone ( ) ;
952
+ let mut i = 0 ;
953
+ let mut token = Token :: dummy ( ) ;
954
+ while i < dist {
955
+ token = cursor. next ( ) . 0 ;
956
+ if matches ! (
957
+ token. kind,
958
+ token:: OpenDelim ( token:: NoDelim ) | token:: CloseDelim ( token:: NoDelim )
959
+ ) {
960
+ continue ;
961
+ }
962
+ i += 1 ;
941
963
}
964
+ return looker ( & token) ;
942
965
}
943
966
944
967
/// Returns whether any of the given keywords are `dist` tokens ahead of the current one.
0 commit comments