Skip to content

Releases: ajalt/clikt

3.1.0

12 Dec 18:31
Compare
Choose a tag to compare

Added

  • Added required() and defaultLazy() for nullable flag options like switch().
  • Added support for generating autocomplete scripts for Fish shells (thanks to @faogustavo for the initial PR)
  • Added CompletionCommand and CliktCommand.completionOption() that will print an autocomplete script when invoked, as an alternative to using environment variables.

Changed

  • Updated Kotlin to 1.4.21
  • @argfiles now allow line breaks in quoted values, which are included in the value verbatim. You can now end lines with \ to concatenate them with the following line.

3.0.1

03 Sep 22:37
Compare
Choose a tag to compare

Deprecated

  • Deprecated calling echo with err or lineSeparator but no message.

3.0.0

02 Sep 15:26
Compare
Choose a tag to compare

Clikt 3.0 is a major release with a number of improvements and a few breaking API changes.

Highlights of this release

  • Support for Browser JS targets
  • Support for localization of all help output
  • New extensions like help() and check() to make it even easier to setup your commands.

See the full list of changes here, and a migration guide here.

2.8.0

20 Jun 01:39
Compare
Choose a tag to compare

Added

  • Added error parameter to PrintMessage and PrintHelpMessage. When true, CliktCommand.main will exit with status code 1. (#187)

Changed

  • When printHelpOnEmptyArgs is true and no arguments are present, or when invokeWithoutSubcommand is false and no subcommand is present, CliktCommand.main will now exit with status code 1 rather than 0.
  • restrictTo now works with any Comparable value, not just Number.
  • CliktCommand.main now accepts Array<out String>, not just Array<String>. (#196)

Fixed

  • Fixed option values being reset when calling multiple subcommands with allowMultipleSubcommands=true (#190)

2.7.1

19 May 18:50
Compare
Choose a tag to compare

Fixed

  • Fixed NPE thrown when in some cases when using defaultByName (#179)

2.7.0

13 May 18:47
Compare
Choose a tag to compare

Added

  • Ability to use custom program exit status codes via ProgramResult.
  • inputStream and outputStream conversions for options and arguments. (#157 and #159)
  • splitPair, toMap, and associate extensions on option. (#166)
  • treatUnknownOptionsAsArgs parameter to CliktCommand. (#152)
  • defaultByName function for groupChoice and groupSwitch options. (#171)

Changed

  • Update Kotlin to 1.3.71
  • Improved command name inference. Now, a class like MyAppCommand will infer its commandName as my-app rather than myappcommand. You can still specify the name manually as before. (#168)

Fixed

  • Correctly parse short options with attached values that contain =

Thanks to @sschuberth for his contributions to this release!

2.6.0

17 Mar 18:07
Compare
Choose a tag to compare

Added

  • registeredSubcommands, registeredOptions, registeredArguments, and registeredParameterGroups methods on CliktCommand.
  • Ability to read default option values from configuration files and other sources. Support for Java property files is built in on JVM, see the json sample for an example of reading from other formats.
  • allowMultipleSubcommands parameter to CliktCommand that allows you to pass multiple subcommands in the same call. (docs)
  • Errors from typos in subcommand names will now include suggested corrections. Corrections for options and subcommands are now based on a Jaro-Winkler similarity metric, and can be customized with Context.correctionSuggestor

Changed

  • Update Kotlin to 1.3.70
  • convert can be called more than once on the same option or argument, including after calls to conversion functions like int and file.
  • wrapValue is now deprecated, since convert can be used in its place instead.
  • CliktCommand.toString now includes the class name
  • Reverted automatic ~ expansion in file() and path() introduced in 2.5.0. If you need this behavior, you can implement it with code like convert { /* expand tidle */ }.file()

2.5.0

23 Feb 04:23
Compare
Choose a tag to compare

Added

  • Clikt is now available as a Kotlin Multiplatform Project, supporting JVM, NodeJS, and native Windows, Linux, and macOS.
  • eagerOption {} function to more easily register eager options.
  • Eager options can now be added to option groups in help out by passing a value for groupName when creating them.
  • canBeSymlink parameter to file() and path() conversions that can be used to disallow symlinks
  • CliktCommand.eagerOption to simplify creating custom eager options

Changed

  • NoRunCliktCommand was renamed to NoOpCliktCommand. The existing class is deprecated. (#130)
  • The CliktCommand.context property has been deprecated in favor of the new name, currentContext, to avoid confusion with the CliktCommand.context{} method.
  • The parameter names of file() and path() conversions have changed. The existing names are deprecated, and can be converted to the new usages with an IntelliJ inspection. Note that if you are calling these functions with unnamed arguments (e.g. file(true, false)), you'll need to add argument names in order to remove the deprecation warning.

Fixed

  • file() and path() conversions will now properly expand leading ~ in paths to the home directory for mustExist, canBeFile, and canBeDir checks. The property value is unchanged, and can still begin with a ~. (#131)

2.4.0

25 Jan 16:59
Compare
Choose a tag to compare

Added

  • CompletionCandidates.Fixed now has a secondary convenience constructor that take a vararg of Strings
  • CompletionCadidates.Custom, which allows you to call other binaries or write a script to generate completions. This class is currently experimental. (#79)
  • Option.wrapValue and Argument.wrapValue to make it easier to reuse existing conversion functions.
  • ignoreCase parameter to choice() and enum() conversion functions.

Changed

  • option() and argument() now take optional completionCandidates parameters to override how completion is generated. The constructor and copy functions of OptionsWithValues and ProcessedArgument have changed to support default values.
  • The overloads of findObject (1 2) that take a default value have been renamed findOrSetObject. The existing names are marked with @Deprecated, and IntelliJ can convert your callsites automatically. (#110)
  • enum() parameters now accept case-insensitive values by default. You change this behavior by passing ignoreCase = false to enum() (#115)

Fixed

  • groupChoice help output now includes the choices in the help output metavar
  • TermUi.edit* functions could freeze on certain editors (#99, thanks @iampravikant and @sebokopter)
  • Shell completion can now handle command names with dashes. (#104)
  • Arguments with = in them could be incorrectly interpreted as options (#106)

2.3.0

08 Nov 03:22
Compare
Choose a tag to compare

Added

  • option().groupSwitch(), which works like groupChoice(), but uses a switch() option rather than a choice() option.
  • UsageError now has a statusCode parameter (which defaults to 1). If you're using ClicktCommand.main, the value of statusCode will be passed to exitProcess.

Changed

  • Shell completion code is now printed by throwing a PrintCompletionMessage (a subclass of PrintMessage) rather than calling echo directly.