-
Notifications
You must be signed in to change notification settings - Fork 21
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add configurable automatic name mapping from camelCase
to kebab-case
#101
Conversation
It's always ok to not break compatibility in version bumps. Hence, I'd suggest a |
@lefou if we are going to bump minor versions, should we go and break compatibility just to clean up the code? Or should we just leave it for now for easier scala 2 updates? |
I'd keep it. You already did the work, and it greatly eases adoption of the new version. |
Id would be great to have a version with the deprecations. - @deprecated("Binary Compatibility Shim")
+ @deprecated("Binary Compatibility Shim", "mainargs 0.6.0") |
Ok, I turned back on MIMA (which is currently failing) and tweaked the readme to 0.6.0 |
Fixes #16
We maintain backwards compatibility by continuing to allow the
camelCase
names in addition to thekebab-case
names during argument parsing.When a an explicit
name = ???
is given to the@main
or@arg
annotation, that takes precedence over everything, and is not affected by the name mapping,Name mapping is configurable by passing in
nameMapper = mainargs.Util.snakeCaseNameMapper
ornameMapper = mainargs.Util.nullNameMapper
when you callParserForClass
orParserForMethods
I had to add a whole bunch of annoying shims to maintain binary compatibility when threading the new
nameMapper
through all our method signatures. That would be resolved by a proposal like https://contributors.scala-lang.org/t/can-we-make-adding-a-parameter-with-a-default-value-binary-compatible/6132/3, which alas does not exist yet in the Scala implementationThe duplication in method argument lists is getting very annoying. Again, this would be solved by a proposal like https://contributors.scala-lang.org/t/unpacking-classes-into-method-argument-lists/6329, which still doesn't exist in the language
Bumping to 0.6.0 since we cannot maintain bincompat for Scala 3 and Scala 2 simultaneously
case class
es that is compatible with both Scala 2 and Scala 3, due to differing method signature requirements. e.g.def unapply(x: MyCaseClass): Option[Tuple]
vsdef unapply(x: MyCaseClass): MyCaseClass
.Updated the docs and added coverage in the unit tests
I intend to release this as 0.5.5 once it lands