@@ -13,7 +13,7 @@ import Control.Monad.State (State, lift, modify, runState)
1313import  Data.Array  (some , toUnfoldable )
1414import  Data.Array  as  Array 
1515import  Data.Bifunctor  (lmap , rmap )
16- import  Data.Either  (Either (..), either , hush )
16+ import  Data.Either  (Either (..), either , fromLeft ,  hush )
1717import  Data.Foldable  (oneOf )
1818import  Data.List  (List (..), fromFoldable , (:))
1919import  Data.List.NonEmpty  (NonEmptyList (..), catMaybes , cons , cons' )
@@ -34,12 +34,13 @@ import Effect.Console (log, logShow)
3434import  Effect.Unsafe  (unsafePerformEffect )
3535import  Node.Process  (lookupEnv )
3636import  Parsing  (ParseError (..), ParseState (..), Parser , ParserT , Position (..), consume , fail , getParserT , initialPos , parseErrorMessage , parseErrorPosition , position , region , runParser )
37- import  Parsing.Combinators  (advance , between , chainl , chainl1 , chainr , chainr1 , choice , empty , endBy , endBy1 , lookAhead , many , many1 , many1Till , many1Till_ , manyIndex , manyTill , manyTill_ , notFollowedBy , optionMaybe , sepBy , sepBy1 , sepEndBy , sepEndBy1 , skipMany , skipMany1 , try , (<?>), (<??>), (<~?>))
37+ import  Parsing.Combinators  (advance , between , chainl , chainl1 , chainr , chainr1 , choice , empty , endBy , endBy1 , lookAhead , many , many1 , many1Till , many1Till_ , manyIndex , manyTill , manyTill_ , notFollowedBy , optionMaybe , replicateA ,  sepBy , sepBy1 , sepEndBy , sepEndBy1 , skipMany , skipMany1 , try , (<?>), (<??>), (<~?>))
3838import  Parsing.Combinators.Array  as  Combinators.Array 
3939import  Parsing.Expr  (Assoc (..), Operator (..), buildExprParser )
4040import  Parsing.Language  (haskellDef , haskellStyle , javaStyle )
41- import  Parsing.String  (anyChar , anyCodePoint , anyTill , char , eof , match , regex , rest , satisfy , string , takeN )
41+ import  Parsing.String  (anyChar , anyCodePoint , anyTill , char , eof , match , parseErrorHuman ,  regex , rest , satisfy , string , takeN )
4242import  Parsing.String.Basic  (intDecimal , letter , noneOfCodePoints , number , oneOfCodePoints , skipSpaces , whiteSpace )
43+ import  Parsing.String.Basic  as  String.Basic 
4344import  Parsing.String.Replace  (breakCap , replace , replaceT , splitCap , splitCapT )
4445import  Parsing.Token  (TokenParser , makeTokenParser , token , when )
4546import  Parsing.Token  as  Token 
@@ -1070,3 +1071,38 @@ main = do
10701071    { actual: lmap parseErrorPosition $ runParser " aa"   $ advance consume
10711072    , expected: Left  (Position  { index: 0  , line: 1  , column: 1   })
10721073    }
1074+ 
1075+   log " \n TESTS error messages\n " 
1076+   do 
1077+     let  input = " 12345six789" 
1078+     assertEqual' " parseErrorHuman 1" 
1079+       { actual: Array .drop 1   $ parseErrorHuman input 20   $ fromLeft (ParseError  " "   initialPos)
1080+           $ runParser input (replicateA 9   String.Basic .digit ::  Parser  String  (List  Char ))
1081+       , expected: [ "      ▼"  , " 12345six789"   ]
1082+       }
1083+ 
1084+   do 
1085+     let  input = " 12345six789" 
1086+     assertEqual' " parseErrorHuman 2" 
1087+       { actual: Array .drop 1   $ parseErrorHuman input 5   $ fromLeft (ParseError  " "   initialPos)
1088+           $ runParser input (replicateA 9   String.Basic .digit ::  Parser  String  (List  Char ))
1089+       , expected: [ "   ▼"  , " 45six"   ]
1090+       }
1091+ 
1092+   do 
1093+     let  input = " aaaa🍷\r\n bbbb" 
1094+     assertEqual' " parseErrorHuman 3" 
1095+       { actual: parseErrorHuman input 20   $ fromLeft (ParseError  " "   initialPos)
1096+           $ runParser input
1097+           $ string " aaaa"   *> (replicateA 7   letter ::  Parser  String  (List  Char ))
1098+       , expected: [ " Expected letter at position index:4 (line:1, column:5)"  , "     ▼"  , " aaaa🍷"   ]
1099+       }
1100+ 
1101+   do 
1102+     let  input = " aaaa\r\n 🍷bbbb" 
1103+     assertEqual' " parseErrorHuman 4" 
1104+       { actual: parseErrorHuman input 20   $ fromLeft (ParseError  " "   initialPos)
1105+           $ runParser input
1106+           $ string " aaaa\r\n "   *> (replicateA 5   letter ::  Parser  String  (List  Char ))
1107+       , expected: [ " Expected letter at position index:6 (line:2, column:1)"  , " ▼"  , " 🍷bbbb"   ]
1108+       }
0 commit comments