Skip to content

Parsley 5.0 - #223

Draft
j-mie6 wants to merge 694 commits into
masterfrom
staging/5.0
Draft

j-mie6 wants to merge 694 commits into
masterfrom
staging/5.0

Conversation

@j-mie6

@j-mie6 j-mie6 commented Jan 10, 2024 •

Copy link
Copy Markdown
Owner

Parsley 5.0.0 Staging PR

This is the PR encompassing all changes for version 5.0.0. As this is substantial new functionality, it will be previewed incrementally starting with 5.0.0-M1. When the API is completed and seems reasonable, 5.0.0-RC1 will be released to allow for testing of the release, full documentation, and ironing out of bugs. When the release is stable enough, it will be merged into master and 5.0.0 will be officially released.

High-Level Changes

This release aims to consolidate the library ready for long-term stability. This will include adjusting the API to allow for more forwards-compatible evolution.

Low-Level Changes

Major Changes

None.

Minor Changes

None.

Patch Changes

None.

Internal Changes

None.

Release Checklist

5.0.0-M1

5.0.0-M2

  • generic error message support on bridges

5.0.0-M3

5.0.0-M4

  • added mapFilterMsg combinator to parsley.errors.combinator

5.0.0-M5

  • fix regression introduced by M3, where Reasons used for labelConfig result in no error labels

5.0.0-M6

  • enforce deprecation of error config stuff
  • fix Americanisation of SpecializedFilter
  • remove atomicChoice
  • add additional diagnostics
  • restore Failure as a simple case class
  • rename ErrorBuilder.format to build
  • add line number information to ErrorBuilder.lineInfo

5.0.0-M7 - Anton's Milestone

  • add in the Console debugger frontend for parsley-debug
  • divergence detection combinator in parsley-debug.
  • flatten down the parsley.token packages some more.
  • add in the parsley.syntax.all and parsley.quickstart objects to cut down on imports.

5.0.0-M8 - native 0.5

  • switch Scala native over to 0.5

5.0.0-M9

  • parsley.debug made into a package
  • parsley-debug's debuggable -> debug
  • debug.frontend.DebugFrontend -> debug.DebugView, with ReusableFrontend -> DebugView.Reusable and similar for SingleUse.
  • remove the attachDebugger combinators, I think we'll go ahead with view-only debugging for now.
  • by-name parameters instead of unit functions
  • improve the string rules, and make it a PartialFunction[Any, Boolean] for ergonomics.
  • remove unneeded methods of debug.util.Collector, it's a shame we'll never be able to remove it completely because of parsley.debuggable's view on it.

5.0.0-M10

  • parsley.debuggable fixed for 3.5+

5.0.0-M11

  • fixes use of manyTill within parsley.quick.* which is currently broken.

5.0.0-M12

  • fix hide's use of observable input
  • improve reference reuse

5.0.0-M13

5.0.0-M14

  • State management in debug view
  • handle iterative parsers in lets properly for debugging

5.0.0-M15

  • Convert Ref to RefCodec implicitly for debugging
  • @parsley.debuggable to see through type aliases

5.0.0-M16

  • precedence internal rework to improve performance
  • filters only evaluate their partial function once.

5.0.0-M17

  • generic bridge macros
  • moved bridge traits into new home BREAKING

5.0.0-RC1

  • all new functionality has partial documentation

5.0.0

  • all methods have completed documentation
  • new functionality is well tested
  • README.md updated to reflect new version
  • documentation checked to ensure no leakage of private [parsley] members or parsley.internal.
  • wiki backports complete

Milestone Migration Guide

As each milestone release may choose to make binary incompatible changes, any necessary migration required to get from one milestone to the next will be tracked here.

From To Necessary Changes
4.5.0 5.0.0-M1 see above
5.0.0-M1 5.0.0-M2 no changes
5.0.0-M2 5.0.0-M3 many of the configurations in ErrorConfig for symbols are deprecated, use labelSymbol instead
5.0.0-M3 5.0.0-M4 no changes
5.0.0-M4 5.0.0-M5 no changes
5.0.0-M5 5.0.0-M6 use build, not format for ErrorBuilder. ErrorBuilder.lineInfo now has a lineNum argument. SpecialisedFilter and its children are now spelt with a z. The atomicChoice combinator has been removed, reconsider your life choices if you're using it.
5.0.0-M6 5.0.0-M7 the token.predicate package has been removed, token.descriptions is now a flat package too.
5.0.0-M7 5.0.0-M8 Scala native 0.5 bump, scala-js 1.16 bump
5.0.0-M8 5.0.0-M9 parsley.debug is now a package, parsley-debug's debugger package has been merged into that. Various name changes within parsley-debug, which should hopefully make it a bit clearer how it should be used.
5.0.0-M9 5.0.0-M10 no changes
5.0.0-M10 5.0.0-M11 no changes
5.0.0-M11 5.0.0-M12 no changes
5.0.0-M12 5.0.0-M13 no changes
5.0.0-M13 5.0.0-M14 no changes
5.0.0-M14 5.0.0-M15 no changes
5.0.0-M15 5.0.0-M16 no changes
5.0.0-M16 5.0.0-M17 parsley.generic.ErrorBridge is gone. parsley.bridges.ErrorBridge for the new one. TODO

j-mie6 and others added 30 commits January 3, 2026 22:08
Lifts the restriction that an `isMeta` annotation can only be used once
per constructor. Instead, this will now handle an arbitrary number of
them.
When an enum is of the form:

```scala
enum Co[+A] {
  case X
}
```

An attempt to bridge `Co.X` would fail as the number of type parameters
of `Co.X.type` (which isn't really real) does not match `Co` itself. By
lifting the equal length arguments check, this case is admitted, but may
let higher-kinded types (for which the restriction was put in place to
prevent) slip through the net.
Handle more kinds of non-consuming combinators when looking for leading
chars (e.g. `line.zip(col)`), and also look into Lets to make larger
jump tables

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment