A default-only flag now commits the rest of the line to the default subcommand even when a later word spells a sibling command, and the KDL parser scans strings in chunks so large generated specs load several times faster. The Go modules now require Go 1.26.
Fixed
- (parse) Keep the implicit default after a default-only flag (#1418, @lu-zero). With
default_subcommand_flags, the lookahead cancelled default routing whenever any later word matched a sibling command or alias, soem -u pkgfailed withUnknownFlag -ujust becausepkgis also a command. Once a default-only flag has been seen, later words are now the default command's arguments:em -u queryparses asem install -u query, as doem -X foo query,em -pu query, and--output query search. A sibling name before any default-only flag still selects it (em query,em -p query), and parent-only flags,--help, and bare invocations stay on the parent. Applied consistently to the Rust library,usage-argv, and the Go runtime; fixes #1417.
Changed
- (parse) Faster KDL parsing for large specs (#1426, @jdx). Identifier, quoted-string, and raw-string runs are scanned as contiguous slices instead of one Unicode scalar at a time, with escapes, delimiters, newlines, and dedent handling preserved at the boundaries. Parsing the checked-in mise spec drops from 66.9 ms to 16.2 ms in an optimized build, and from roughly 800 ms to 250 ms in a debug build of mise's 321 KB generated spec. Parsed output is unchanged; a regression test covers embedded quotes in multiline raw strings.
- (go) The
github.com/jdx/usage/goandintegrations/cobramodules now declarego 1.26.0(#1421, @sahidvelji). Projects importing the Go runtime or the Cobra integration need Go 1.26 or newer;expr-lang/expris now listed as a direct dependency of the runtime module. No behavior changes. - (go)
usage generate goemitstype X struct{}for a command with no flags, arguments, or subcommands instead of an empty two-line struct body, matching gofumpt output (#1425, @sahidvelji). Regenerating existing code will show this whitespace-only diff.
New Contributors
- @sahidvelji made their first contribution in #1421
Full Changelog: v6.9.0...v6.9.1
💚 Sponsor usage
usage is built and maintained by @jdx, an open source developer at entire.io, the title sponsor of his open source work.
If usage powers CLI specs, docs, or completions for a tool you maintain or use, please consider becoming an individual or company sponsor. Your support funds ongoing development and helps keep usage fast, free, and independent.