parsley
parsley copied to clipboard
Parsley 5 API Consolidation
Parsley 5 will provide an opportunity to address some of the pain points of the API once again. This list may evolve over time.
In addition to #172, #184, and #168:
Major Changes
- [x] Remove
parsley.io._
, and instead move the implicit class withinobject Parsley
. This will go with aextends PlatformSpecific
trick to allow for theio
stuff to be enabled forjvm
andnative
but notjs
but not require any imports. RenameparseFromFile
toparse
. - [x] Flatten the
Lexer
hierarchy somewhat: the plainobjects
aren't really buying us much other than indirection:numeric
,text
etc can just go I think. - [x] I want to rename
attempt
toatomic
(after seeking feedback on this from other experts and users), since I think it makes much more sense as a name and clears up some misconceptions: this might even be done pre-5, but with the binary compatible change. - [x] Remove
>>=
,getOrElse
,join
:>>=
is provided byparsley-cats
anyway, and is not something to encourage (same withjoin
); andgetOrElse
is a misleading name, so this is going. - [x] Remove
attemptChoice
, I don't want to encourage that in the API. - [x] Remove
TokenSpan
from the API, and changeLexToken
to useoffset
instead of position, wayyyyyy simpler. - [x]
traverse
to be curried, with function as second set of brackets - [x] Change semantics of
.hide
so that it totally suppresses the errors underneath: #193 and #198 have already laid the groundwork for this to happen, sincelabel("")
is no longer legal. Instead.hide
should be its own combinator independent oflabel
itself -- this is an outdated notion now. Additionally, clean up the various overloads: it should be a single label combinator requiring at least one label, all non-empty. - [x]
verifiedUnexpected
->verifiedExplain
, with the argumentless variant remaining as is: newverifiedUnexpected
variants to be introduced in 5.1? - [x]
genericbridges
renamed togeneric
, we don't know what else might end up there, and the name is a bit nicer. - [x] Americanise the
Specialised
error toSpecialized
- [x] The
LexToken
can swap to the simpler definition from thesis, andTokenSpan
can be removed. - [x]
many
,some
, andeof
to move toParsley
-- they are definitely core, and I want to cut down on imports (this is in tandem with #141) - [x] remove
more
andbetween
, they just aren't useful. - [x] Minor adjustments to register extension classes.
- [x] If full result elimination is performed in dropped positions, we might actually want to consider removing the
skip
variants of the combinators, includingskipMany
,skipSome
,skip
,range_
; but notforP
, as this optimisation cannot recognise "dead registers". - [x] Also,
sequence
should be given an extra argument, same withtraverse
.exactly
should have ann > 1
invariant. - [x]
manyUntil
andsomeUntil
are unusual names, they should be calledmanyTill
andsomeTill
for consistency with all the other parsecs! (this change will affectparsley-cats
, renamecount
andcount1
tocountMany
andcountSome
. - [x] Rework
implicits
packages/object intosyntax
? Gives us better "parity" with the typelevel style. - [x] rename
ifP
,guard
,when
, andwhileP
to all use anS
postfix - [x] Change
Integer
,Real
,String
,Character
to all have aParsers
suffix: it'll be better for clashes with Scala and important forgigaparsec
. - [x] Remove
multiMap
andsingleMap
in theLexer
config, they can just be merged into amapping
instead? - [x] Turn
predicate
into a package, as opposed to an object. - [x] Add additional parameter to
Ops
et al - [x] Simplify the error config hierarchy so that it actually documents properly: no more hidden classes with companion objects! (where possible)
- [x] Remove
parsley.implicits.combinator
and moveparsley.extension
asparsley.syntax.extension
- [ ] Rework the lexer config (and error config?) so that they use the forwards compatible case class mechanism. This way we can evolve it as we want, and if we ever reach a final state, we can unprivate the members and release it in full.
- [x] remove
atomicChoice
. - [x] reinstate
Failure
as a proper case class again - [x] add line info for the context lines in
ErrorBuilder
- [ ] make
softKeyword
have the maximal munch behaviour, likesoftOperator
.
Minor Changes
- [x] Restore the partial amend semantics of at least filters. I don't think we want them on
verified
andprevent
though. Note that the deprecated constructors intoken.errors
will be reinstated - [x] Consider making a Scala 3 parsley "prelude" that allows for
import parsley.quickstart.*
or something to cut down on theparsley.Parsley, Parsley.*, parsley.character.*, parsley.combinator.*
import pattern. - [x] We can also build in an
.all
object in there to export out thezipped
andlift
syntaxes, perhaps?