Repository navigation
Release 3.19
What's New in 3.19
Issues
#691Completion generator: option to redirect stderr in the dynamic-completion callback (redirectStderr())- #692 Resolve @ParentCommand fields by type
#693Dynamic Fish completion drops enum values after --option=- #696 Bump org.apache.maven.plugins:maven-surefire-plugin from 3.6.0 to 3.6.1
#697The starting value of a primitive option field is lost (boolean x = true becomes false)#698A required option with a defaultValue is still reported as missing#699Two @arguments fields in a class hierarchy: one is ignored without an error, required included#700An undefined ${variable} in defaultValue sets the field to an empty string#701An invalid command definition is reported as "Command not found" (exit 127), hiding the cause#702Allow positional arguments on a group command (picocli parity)#704Support array fields in @OptionList#705Allow an @OptionList with no value (empty list), like picocli arity 0..*#706Register a command instance under a given name and aliases#707Public API to tell which options were given on the command line#708${COMPLETION-CANDIDATES} from a completer, not only allowedValues#714jbang cannot update Regression (3.18.2+): NPE in propagateInheritedOptions when group command invoked without subcommand- #715 Bump org.apache.maven.plugins:maven-enforcer-plugin from 3.6.3 to 3.7.0
#716feat: --aesh-doc should target a subcommand via--(mirror --aesh-complete)#717feat: collapse long synopsis to [OPTIONS] instead of inlining every flag#718feat: reserve the short-flag gutter so long-only options align#720StackOverflowError on cyclic @mixin fields#721A bad option value gives a RuntimeException instead of a usage error#723Suggest close matches (did you mean) for an unknown sub-command#724A way to not split the values of an @OptionList#727A non-public command class without a no-arg constructor gets no option values#729Positional arguments keep their ANSI codes in the help when ANSI is off#731An optional @argument is shown as required in the usage line of the help#733An option given twice keeps the first value without an error#734Show the default values of the options in the help#736The help does not wrap long descriptions#738A collection field that is not given loses its initial value#740The argument of an @option is not read, so the help shows the option name#742Suggest close matches for a mistyped option#743A footer and a header on @CommandDefinition#744No ANSI codes in the help when the output is not a terminal#747feat: allow setting the position of the default (ungrouped) "Options:" section#748feat: set help opt-ins (collapseSynopsis, defaultOptionsFirst, ...) once, not on every @CommandDefinition#749feat: use the command itself as HelpSectionProvider when it implements the interface#750feat: pass the command being rendered to HelpSectionProvider#751feat: give positional arguments their own help section and let the CLI place it#753bug: subcommand help still has ANSI colors when stdout is not a terminal (#744 incomplete)#755feat: helpGroup/order on @Argument/@arguments for positional grouping#756feat: configurable Arguments section placement (first vs last)#757feat: add headerBeforeSynopsis toggle to print the help header first#758feat: make help width configurable instead of hardcoded 80#759Dynamic completion forces file completion for option values (not just positional args)#760Dynamic completion of comma-separated @OptionList drops the prefix before the last comma#762Usage of help don't allow to position if [-h] should be placed before or after [COMMAND]
Changes
- Pin help width to 80 in tests, keep dynamic width in production
- Forward group-level -h to the selected subcommand (#762)
- Re-attach typed prefix to separated option value candidates (#760)
- Drive file fallback by the completion target, not the positional (#759)
- Cover headerBeforeSynopsis fleet, inheritance and fallback (#757)
- feat: add headerBeforeSynopsis toggle to print the help header first
- Resolve help width from the live terminal via terminal-detect (#758)
- Replace separateArgumentsSection Toggle with ArgumentsSection enum (#756)
- Let positionals join option groups via helpGroup/order (#755)
- Propagate no-color mode to lazily attached children (#753)
- Use imports instead of fully-qualified names in completion parser
- feat: Add fuzzy/camel-case completion fallback
- Point CommandDefinition formatting attributes at the help guide
- Give positional arguments their own help section on request (#751)
- Pass the rendered command to HelpSectionProvider via HelpContext (#750)
- Use the command itself as HelpSectionProvider when implemented (#749)
- Fleet-wide help toggle defaults with per-command override (#748)
- Print the default Options section first on request (#747)
- Last value wins for repeated options, strict opt-in (#733)
- Stderr stream and redirected output follow ANSI mode (#744)
- No ANSI colors when stdout is not a terminal (#744)
- A header and a footer on @CommandDefinition (#743)
- Suggest close matches for a mistyped option (#742)
- Read the argument of an @option as the label of its value (#740)
- Keep the initial value of a collection field that is not given (#738)
- Review: merge the wrapText javadoc, no NPE for a command without a description
- Wrap long descriptions in the help (#736)
- Show the default values of the options in the help (#734)
- Show an optional positional argument in brackets in the usage line (#731)
- Turn ANSI off for the positional arguments in the help too (#729)
- Inject options into a non-public command class without a no-arg constructor (#727)
- Suggest close matches for unknown subcommands (#723)
- Do not assume listener order across jobs in SyncAsyncParityTest
- Add OptionList.NO_SEPARATOR for list values that must not be split (#724)
- Report a bad option value as a usage error, not a RuntimeException (#721)
- Collapse long synopsis to [OPTIONS] on request (#717)
- Target --aesh-doc at a subcommand via -- (#716)
- Align long-only options in help output (#718)
- Leave readline handoff installed after Shell.readLine()
- Report cyclic @mixin hierarchies instead of overflowing (#720)
- Accept a group argument on the lazy AeshRuntimeRunner (#702)
- Guard lazy children in inherited-option propagation (#714)
- List completer candidates in ${COMPLETION-CANDIDATES} (#708)
- Expose which options were explicitly given (#707)
- Register commands under a custom name and aliases (#706)
- Support array fields in @OptionList and @arguments (#704)
- Support optionalValue on @OptionList (empty list when bare) (#705)
- Repair stale invalid-definition test after #702 (#701)
- Report an invalid command definition instead of "Command not found" (#701)
- Make the table and axis tests pass on a locale with a decimal comma
- Pin down group-with-arguments edge behavior (#702)
- Allow arguments on a group command (#702)
- Drop unresolved variable defaults instead of empty string (#700)
- Reject duplicate @arguments at build time (#699)
- Satisfy required options with static defaultValue (#698)
- Preserve primitive field initializers on option reset (#697)
- Add per-option value completion to fish dynamic scripts (#693)
- Add redirectStderr option to dynamic completion scripts (#691)
- Cover typed multi-field @ParentCommand injection (#692)
- Resolve parent command injection by type
Full Changelog: v3.18.6...v3.19