Skip to content

Release 3.19

Choose a tag to compare

@github-actions github-actions released this 10 Nov 19:37
· 15 commits to master since this release

What's New in 3.19

Issues

  • #691 Completion generator: option to redirect stderr in the dynamic-completion callback (redirectStderr())
  • #692 Resolve @ParentCommand fields by type
  • #693 Dynamic Fish completion drops enum values after --option=
  • #696 Bump org.apache.maven.plugins:maven-surefire-plugin from 3.6.0 to 3.6.1
  • #697 The starting value of a primitive option field is lost (boolean x = true becomes false)
  • #698 A required option with a defaultValue is still reported as missing
  • #699 Two @arguments fields in a class hierarchy: one is ignored without an error, required included
  • #700 An undefined ${variable} in defaultValue sets the field to an empty string
  • #701 An invalid command definition is reported as "Command not found" (exit 127), hiding the cause
  • #702 Allow positional arguments on a group command (picocli parity)
  • #704 Support array fields in @OptionList
  • #705 Allow an @OptionList with no value (empty list), like picocli arity 0..*
  • #706 Register a command instance under a given name and aliases
  • #707 Public API to tell which options were given on the command line
  • #708 ${COMPLETION-CANDIDATES} from a completer, not only allowedValues
  • #714 jbang 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
  • #716 feat: --aesh-doc should target a subcommand via -- (mirror --aesh-complete)
  • #717 feat: collapse long synopsis to [OPTIONS] instead of inlining every flag
  • #718 feat: reserve the short-flag gutter so long-only options align
  • #720 StackOverflowError on cyclic @mixin fields
  • #721 A bad option value gives a RuntimeException instead of a usage error
  • #723 Suggest close matches (did you mean) for an unknown sub-command
  • #724 A way to not split the values of an @OptionList
  • #727 A non-public command class without a no-arg constructor gets no option values
  • #729 Positional arguments keep their ANSI codes in the help when ANSI is off
  • #731 An optional @argument is shown as required in the usage line of the help
  • #733 An option given twice keeps the first value without an error
  • #734 Show the default values of the options in the help
  • #736 The help does not wrap long descriptions
  • #738 A collection field that is not given loses its initial value
  • #740 The argument of an @option is not read, so the help shows the option name
  • #742 Suggest close matches for a mistyped option
  • #743 A footer and a header on @CommandDefinition
  • #744 No ANSI codes in the help when the output is not a terminal
  • #747 feat: allow setting the position of the default (ungrouped) "Options:" section
  • #748 feat: set help opt-ins (collapseSynopsis, defaultOptionsFirst, ...) once, not on every @CommandDefinition
  • #749 feat: use the command itself as HelpSectionProvider when it implements the interface
  • #750 feat: pass the command being rendered to HelpSectionProvider
  • #751 feat: give positional arguments their own help section and let the CLI place it
  • #753 bug: subcommand help still has ANSI colors when stdout is not a terminal (#744 incomplete)
  • #755 feat: helpGroup/order on @Argument/@arguments for positional grouping
  • #756 feat: configurable Arguments section placement (first vs last)
  • #757 feat: add headerBeforeSynopsis toggle to print the help header first
  • #758 feat: make help width configurable instead of hardcoded 80
  • #759 Dynamic completion forces file completion for option values (not just positional args)
  • #760 Dynamic completion of comma-separated @OptionList drops the prefix before the last comma
  • #762 Usage 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