Commit Graph

239 Commits

Author SHA1 Message Date
mrkkrp
b35ecbc31f added tests for ‘Text.Megaparsec.Expr’
The single test covers 100 % of the module's code. However it doesn't
check quality of error messages, so we still have room for improvement.

Manual tests show that error messages are good.
2015-08-29 22:24:55 +06:00
mrkkrp
0b3efb649b refactoring of ‘Text.Megaparsec.Expr’ 2015-08-29 16:54:15 +06:00
mrkkrp
8b05353a32 new test to check that ‘hidden’ always works 2015-08-29 16:03:41 +06:00
mrkkrp
eb14e7d327 improve functioning of ‘hidden’ combinator
When ‘p’ in ‘hidden p’ fails we should discard all expected messages and
don't add any new messages.
2015-08-29 16:01:36 +06:00
mrkkrp
3850c64416 correct a typo and clean up description 2015-08-26 17:57:33 +06:00
mrkkrp
89f34688ab don't create hints for errors without messages 2015-08-26 17:26:06 +06:00
mrkkrp
49e80775ef added test to catch bugs similar to #25 2015-08-26 16:15:30 +06:00
mrkkrp
cb3078d07c don't put older hints before newer ones, fixes #25
Obviously order does matter here, since ‘Monoid’ instance for ‘Hints’ is
derived from [], so (<>) is the same as (++) and we should be careful
to keep things in the right order.
2015-08-26 15:53:37 +06:00
mrkkrp
c31f0769fd rewrite ‘choice’ as synonym of ‘asum’ 2015-08-26 06:37:41 +06:00
mrkkrp
2390f9f753 swap ‘count’ and ‘count'’ 2015-08-25 15:55:57 +06:00
mrkkrp
388d8b7a43 finished tests for ‘Text.Megaparsec.Combinator’
Added the following tests:

* ‘count’
* ‘count'’
* ‘endBy’
* ‘endBy1’
* ‘sepBy’
* ‘sepBy1’
2015-08-25 15:42:44 +06:00
mrkkrp
23b083cea6 deprecate some parsers, close #24
These parsers are considered deprecated:

* ‘chainl’
* ‘chainl1’
* ‘chainr’
* ‘chainr1’
* ‘sepEndBy’
* ‘sepEndBy1’

Apart from this, the commit includes various cosmetic changes in
module ‘Text.Megaparsec.Combinator’.
2015-08-25 02:04:10 +06:00
mrkkrp
40d92a19a0 rewritten ‘showMessages’ in clearer manner 2015-08-24 22:19:19 +06:00
mrkkrp
d431b396f4 improve indentation for readability 2015-08-24 16:38:00 +06:00
mrkkrp
a891ff6522 improved tests for ‘(<|>)’
Fixed a detail in existing test ‘prop_alternative_1’ and added new test
‘prop_alternative_2’ to directly catch bugs like #23. Re-indexed some
tests.
2015-08-24 16:35:58 +06:00
mrkkrp
0e3040eaed some tests for ‘Text.Megaparsec.Combinator’
The following combinators are currently tested:

* ‘between’
* ‘choice’
* ‘manyTill’
* ‘someTill’
* ‘option’
* ‘skipMany’
* ‘skipSome’
2015-08-24 15:05:41 +06:00
mrkkrp
ff8905287b some tests for ‘Text.Megaparsec.Perm’
Although the collection of tests is fairly modest, ‘prop_perm_0’ is
quite dense and should be enough for a start.
2015-08-24 14:01:54 +06:00
mrkkrp
a8577275c7 treat carriage return like ordinary character 2015-08-24 14:00:56 +06:00
mrkkrp
45f449ddb2 prefer longest match in ‘mergeError’, fixes #23
Since ‘mergeError’ is only used to merge errors from alternative
branches of parsing, longest match should be preferred.
2015-08-24 01:45:12 +06:00
mrkkrp
b81962e44a added combinator ‘someTill’ 2015-08-23 23:12:45 +06:00
mrkkrp
d6947a901f various cosmetic changes (including renaming)
The following functions and data types have been renamed:

* ‘permute’ → ‘makePermParser’
* ‘buildExpressionParser’ → ‘makeExprParser’
* ‘GenLanguageDef’ → ‘LanguageDef’
* ‘GenTokenParser’ → ‘Lexer’
* ‘makeTokenParser’ → ‘makeLexer’
2015-08-23 21:07:03 +06:00
mrkkrp
7dd2ad94ff minor corrections 2015-08-22 15:02:34 +06:00
mrkkrp
6e5735167f flip argument order for ‘label’, close #21 2015-08-22 14:57:16 +06:00
mrkkrp
aa4189f4bc move test helpers to ‘Util’ module
So we can reuse them to test other modules.
2015-08-22 02:46:13 +06:00
mrkkrp
85be098854 more tests for ‘Text.Megaparsec.Prim’
Added test for the following primitive combinators:

* ‘lookAhead’
* ‘token’
* ‘tokens’
2015-08-22 01:13:20 +06:00
mrkkrp
20984c20f2 cosmetic changes in ‘Text.Megaparsec.Prim’
Also eliminated dead segment of code in ‘token'’.
2015-08-22 01:12:26 +06:00
mrkkrp
d0cdb85e89 don't use ‘try’ in ‘manyTill’ unconditionally 2015-08-21 20:29:06 +06:00
mrkkrp
24afab66c8 more tests for ‘Text.Megaparsec.Prim’
Combinator-specific tests added:

* ‘label’
* ‘hidden’
* ‘try’
* ‘lookAhead’
* ‘notFollowedBy’
2015-08-21 20:21:55 +06:00
mrkkrp
2fa2805aea derive ‘Eq’ instance for ‘Message’ and ‘ParseError’ 2015-08-21 14:02:29 +06:00
mrkkrp
816da3d682 tests for ‘Text.Megaparsec.Prim’ written
More tests need to be written, especially for primitive
combinators. This commit also improves testing utilities and refactors
some stuff.
2015-08-20 17:12:44 +06:00
mrkkrp
f9cfe390af various minor changes, renamed functions
Among other changes two functions have been renamed:

* ‘parseMaybe’ → ‘parse'’ (also added to change log)
* ‘putState’ → ‘setState’ (for consistency)
2015-08-20 16:37:52 +06:00
mrkkrp
3661da90e5 temporarily simplify token parsing
The improved error messages in Megaparsec are quite sensitive to how
parsers are written, which parts of parser are labeled, etc. Current
implementation of token parsers in ‘Text.Megaparsec.Token’ is written
without this in mind. We will improve the module later, for now let us
rewrite/simplify some parts to avoid failing tests.
2015-08-20 01:38:00 +06:00
mrkkrp
110859b9c2 added new primitive combinator ‘hidden’
Added new primitive combinator ‘hidden p’ which hides “expected” tokens
in error message when parser ‘p’ fails.
2015-08-20 01:38:00 +06:00
mrkkrp
fc5abbc7fc ‘lookAhead p’ should discard hints produced by ‘p’ 2015-08-20 01:38:00 +06:00
mrkkrp
d45c2c0658 accumulate hints when previous parser consumes
If ‘x’ in ‘x >>= y’ consumes input but produces some hints, we should
accumulate them nonetheless. Why it's important can be demonstrated by
the following test:

  many (char 'a') >> many (char 'b') >> eof

This should fail on input "ac" with the following message:

  parse error at line 1, column 2:
  unexpected 'c'
  expecting 'a', 'b' or end of input

As you can see even though parser ‘many (char 'a')’ consumed input, its
hits may be useful later.
2015-08-20 01:38:00 +06:00
mrkkrp
987381eaa7 derive ‘Monoid’ instance for ‘Hints’ 2015-08-20 01:37:58 +06:00
mrkkrp
756c09f60a clarify role of Daan Leijen in the project 2015-08-19 23:39:09 +06:00
mrkkrp
1ecaeef075 refreshed description of the package in .cabal file 2015-08-18 02:15:35 +06:00
mrkkrp
f6e6010a52 refreshed README.md 2015-08-18 02:15:21 +06:00
mrkkrp
67d2a9369b extend list of contributors
Modestly add myself to list of contributors.
2015-08-17 22:12:38 +06:00
mrkkrp
455bfa3076 major improvements of ‘Text.Megaparsec.Prim’
* Removed ‘optionMaybe’ parser, because ‘optional’ from
  ‘Control.Applicative’ does the same thing.

* Renamed ‘tokenPrim’ → ‘token’, removed old ‘token’, because
  ‘tokenPrim’ is more general and ‘token’ is little used.

* Fixed bug with ‘notFollowedBy’ always succeeded with parsers that
  don't consume input, see #6.

* Hint system introduced that greatly improved quality of error messages
  and made code of ‘Text.Megaparsec.Prim’ a lot clearer.

The improvements affected other modules too:

* Some parsers from ‘Text.Megaparsec.Combinators’ now live in
  ‘Text.Megaparsec.Prim’.

* Hint system improved error messages, so I needed to rewrite test for
  ‘Text.Megaparsec.Char.eol’, since it's error messages are very
  intelligent now and cannot be emulated by ‘newline’ and ‘crlf’ parsers
  used separately.

* Test for Bug9 from old-tests is passed successfully again.
2015-08-17 21:58:59 +06:00
mrkkrp
65fbedee1c added more powerful ‘count’ parser, close #17
This parser can be told to parse from ‘m’ to ‘n’ occurrences of some
thing. Old parser ‘count’ is now named ‘count’' and defined in terms of
that more powerful one.

This commit also reorders functions in module
‘Text.Megaparsec.Combinator’ and everywhere where the functions are
listed. The same order is used everywhere.
2015-08-13 01:02:33 +06:00
mrkkrp
287a777e6c cosmetic changes (indentation, etc) 2015-08-13 00:02:49 +06:00
mrkkrp
77a54394b5 extend collection of character parsers, close #16
Added new character parsers in ‘Text.Megaparsec.Char’:

* ‘controlChar’
* ‘printChar’
* ‘markChar’
* ‘numberChar’
* ‘punctuationChar’
* ‘symbolChar’
* ‘separatorChar’
* ‘asciiChar’
* ‘latin1Char’
* ‘charCategory’

Renamed some parsers:

‘spaces’   → ‘space’
‘space’    → ‘spaceChar’
‘lower’    → ‘lowerChar’
‘upper’    → ‘upperChar’
‘letter’   → ‘letterChar’
‘alphaNum’ → ‘alphaNumChar’
‘digit’    → ‘digitChar’
‘octDigit’ → ‘octDigitChar’
‘hexDigit’ → ‘hexDigitChar’

Descriptions of old parsers have been updated to accent some
Unicode-specific moments. For example, old description of ‘letter’
stated that it parses letters from “a” to “z” and from “A” to “Z”. This
is wrong, since it used ‘Data.Char.isAlpha’ predicate internally and
thus parsed many more characters.
2015-08-12 23:00:03 +06:00
mrkkrp
08f2d0b3bd extend change log 2015-08-12 18:41:44 +06:00
mrkkrp
bd04b4328c various minor changes 2015-08-12 18:41:22 +06:00
mrkkrp
c13ca493ae experimental branch with different Messages 2015-08-11 18:15:02 +06:00
mrkkrp
da48d0c690 finished tests for ‘Text.Megaparsec.Char’ 2015-08-11 03:22:29 +06:00
mrkkrp
176fe8d9c1 improve quality of error messages, fixed #13 2015-08-11 03:21:52 +06:00
mrkkrp
bb074cc52b fixed a regression in ‘Text.Megaparsec.Error’
I've improved tests so this sort of bug won't appear in future.
2015-08-11 03:19:16 +06:00