This will be my tracking issue for figuring out how to approach scala 3
branching
coulomb for scala 3 will start as a PR, but once it merges I'm going to make it the main (develop) branch going forward, and whatever the most recent version is with scala 2, that will become a maintenance-only branch.
scala 2 compatibility mode
I may try building with scala-2/3 compatibility mode as an interim - that is, making no code changes but compiling for scala 3 as part of the crossbuild. If crossbuild works well enough, this phase can be part of existing release series, with no maintenance branching needed.
implicit -> summon
The main syntactic changes will be around contextual polymorphism, for example the new summon
keyword. I expect this to be a fairly mechanical change to the existing code but it will be very pervasive. Once this change takes place, previous release will be its own maintenance branch.
QuantityParser
I'll need to figure out if the existing implementation of QuantityParser will survive the transition to scala 3. See also #99.
Scala 3 metaprogramming
Scala 2 macro paradise was hard to work with and somewhat deprecated. Scala 3 metaprogramming appears to be a big improvement and is a first-class language feature. One thing to do is look for opportunities to re-incorporate metaprogramming if that makes sense.
other scala 3 features?
If there are any other scala 3 language features coulomb can leverage, they can be incorporated after the large-scale implicit
-> summon
changes.