@@ -259,17 +259,12 @@ where
259259 E :: Error : LabelError < ' src , I , TextExpected < ' src , I > > ,
260260{
261261 any ( )
262- . try_map ( |c : I :: Token , span| {
263- if c. is_whitespace ( ) {
264- Ok ( ( ) )
265- } else {
266- Err ( LabelError :: expected_found (
267- [ TextExpected :: Whitespace ] ,
268- Some ( MaybeRef :: Val ( c) ) ,
269- span,
270- ) )
271- }
262+ . filter ( |c : & I :: Token | c. is_whitespace ( ) )
263+ . map_err ( |mut err : E :: Error | {
264+ err. label_with ( TextExpected :: Whitespace ) ;
265+ err
272266 } )
267+ . ignored ( )
273268 . repeated ( )
274269}
275270
@@ -300,17 +295,12 @@ where
300295 E :: Error : LabelError < ' src , I , TextExpected < ' src , I > > ,
301296{
302297 any ( )
303- . try_map ( |c : I :: Token , span| {
304- if c. is_inline_whitespace ( ) {
305- Ok ( ( ) )
306- } else {
307- Err ( LabelError :: expected_found (
308- [ TextExpected :: InlineWhitespace ] ,
309- Some ( MaybeRef :: Val ( c) ) ,
310- span,
311- ) )
312- }
298+ . filter ( |c : & I :: Token | c. is_inline_whitespace ( ) )
299+ . map_err ( |mut err : E :: Error | {
300+ err. label_with ( TextExpected :: InlineWhitespace ) ;
301+ err
313302 } )
303+ . ignored ( )
314304 . repeated ( )
315305}
316306
@@ -416,16 +406,10 @@ where
416406 E :: Error : LabelError < ' src , I , TextExpected < ' src , I > > ,
417407{
418408 any ( )
419- . try_map ( move |c : I :: Token , span| {
420- if c. is_digit ( radix) {
421- Ok ( c)
422- } else {
423- Err ( LabelError :: expected_found (
424- [ TextExpected :: Digit ( 0 ..radix) ] ,
425- Some ( MaybeRef :: Val ( c) ) ,
426- span,
427- ) )
428- }
409+ . filter ( move |c : & I :: Token | c. is_digit ( radix) )
410+ . map_err ( move |mut err : E :: Error | {
411+ err. label_with ( TextExpected :: Digit ( 0 ..radix) ) ;
412+ err
429413 } )
430414 . repeated ( )
431415 . at_least ( 1 )
@@ -471,29 +455,17 @@ where
471455 LabelError < ' src , I , TextExpected < ' src , I > > + LabelError < ' src , I , MaybeRef < ' src , I :: Token > > ,
472456{
473457 any ( )
474- . try_map ( move |c : I :: Token , span| {
475- if c. is_digit ( radix) && c != I :: Token :: digit_zero ( ) {
476- Ok ( c)
477- } else {
478- Err ( LabelError :: expected_found (
479- [ TextExpected :: Digit ( 1 ..radix) ] ,
480- Some ( MaybeRef :: Val ( c) ) ,
481- span,
482- ) )
483- }
458+ . filter ( move |c : & I :: Token | c. is_digit ( radix) && c != & I :: Token :: digit_zero ( ) )
459+ . map_err ( move |mut err : E :: Error | {
460+ err. label_with ( TextExpected :: Digit ( 1 ..radix) ) ;
461+ err
484462 } )
485463 . then (
486464 any ( )
487- . try_map ( move |c : I :: Token , span| {
488- if c. is_digit ( radix) {
489- Ok ( ( ) )
490- } else {
491- Err ( LabelError :: expected_found (
492- [ TextExpected :: Digit ( 0 ..radix) ] ,
493- Some ( MaybeRef :: Val ( c) ) ,
494- span,
495- ) )
496- }
465+ . filter ( move |c : & I :: Token | c. is_digit ( radix) )
466+ . map_err ( move |mut err : E :: Error | {
467+ err. label_with ( TextExpected :: Digit ( 0 ..radix) ) ;
468+ err
497469 } )
498470 . repeated ( ) ,
499471 )
@@ -522,34 +494,23 @@ pub mod ascii {
522494 E :: Error : LabelError < ' src , I , TextExpected < ' src , I > > ,
523495 {
524496 any ( )
525- . try_map ( |c : I :: Token , span| {
526- if c. to_ascii ( )
527- . map ( |i| i. is_ascii_alphabetic ( ) || i == b'_' )
528- . unwrap_or ( false )
529- {
530- Ok ( c)
531- } else {
532- Err ( LabelError :: expected_found (
533- [ TextExpected :: IdentifierPart ] ,
534- Some ( MaybeRef :: Val ( c) ) ,
535- span,
536- ) )
537- }
497+ . filter ( |c : & I :: Token | {
498+ c. to_ascii ( )
499+ . map_or ( false , |i| i. is_ascii_alphabetic ( ) || i == b'_' )
500+ } )
501+ . map_err ( |mut err : E :: Error | {
502+ err. label_with ( TextExpected :: IdentifierPart ) ;
503+ err
538504 } )
539505 . then (
540506 any ( )
541- . try_map ( |c : I :: Token , span | {
542- if c. to_ascii ( )
507+ . filter ( |c : & I :: Token | {
508+ c. to_ascii ( )
543509 . map_or ( false , |i| i. is_ascii_alphanumeric ( ) || i == b'_' )
544- {
545- Ok ( ( ) )
546- } else {
547- Err ( LabelError :: expected_found (
548- [ TextExpected :: IdentifierPart ] ,
549- Some ( MaybeRef :: Val ( c) ) ,
550- span,
551- ) )
552- }
510+ } )
511+ . map_err ( |mut err : E :: Error | {
512+ err. label_with ( TextExpected :: IdentifierPart ) ;
513+ err
553514 } )
554515 . repeated ( ) ,
555516 )
@@ -945,29 +906,17 @@ pub mod unicode {
945906 E :: Error : LabelError < ' src , I , TextExpected < ' src , I > > ,
946907 {
947908 any ( )
948- . try_map ( |c : I :: Token , span| {
949- if c. is_ident_start ( ) {
950- Ok ( c)
951- } else {
952- Err ( LabelError :: expected_found (
953- [ TextExpected :: IdentifierPart ] ,
954- Some ( MaybeRef :: Val ( c) ) ,
955- span,
956- ) )
957- }
909+ . filter ( |c : & I :: Token | c. is_ident_start ( ) )
910+ . map_err ( |mut err : E :: Error | {
911+ err. label_with ( TextExpected :: IdentifierPart ) ;
912+ err
958913 } )
959914 . then (
960915 any ( )
961- . try_map ( |c : I :: Token , span| {
962- if c. is_ident_continue ( ) {
963- Ok ( c)
964- } else {
965- Err ( LabelError :: expected_found (
966- [ TextExpected :: IdentifierPart ] ,
967- Some ( MaybeRef :: Val ( c) ) ,
968- span,
969- ) )
970- }
916+ . filter ( |c : & I :: Token | c. is_ident_continue ( ) )
917+ . map_err ( |mut err : E :: Error | {
918+ err. label_with ( TextExpected :: IdentifierPart ) ;
919+ err
971920 } )
972921 . repeated ( ) ,
973922 )
@@ -1124,6 +1073,25 @@ mod tests {
11241073 test_err ( ident, "123" ) ;
11251074 }
11261075
1076+ #[ test]
1077+ fn whitespace ( ) {
1078+ use crate :: { whitespace, LabelError , TextExpected } ;
1079+
1080+ let parser = whitespace :: < & str , extra:: Err < Rich < _ > > > ( ) . exactly ( 1 ) ;
1081+
1082+ assert_eq ! (
1083+ parser. parse( "" ) . into_output_errors( ) ,
1084+ (
1085+ None ,
1086+ vec![ LabelError :: <& str , _>:: expected_found(
1087+ vec![ TextExpected :: <& str >:: Whitespace ] ,
1088+ None ,
1089+ SimpleSpan :: new( ( ) , 0 ..0 )
1090+ ) ]
1091+ )
1092+ ) ;
1093+ }
1094+
11271095 /*
11281096 #[test]
11291097 #[should_panic]
0 commit comments