-
Notifications
You must be signed in to change notification settings - Fork 2.9k
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 Active Help support #1482
Add Active Help support #1482
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is a very cool feature. Thanks for doing this.
Here is the helm branch that uses this feature: https://github.com/VilledeMontreal/helm/tree/feat/compInfo Without needing a kubernetes cluster, one can try:
I will make a smaller test program and post it in this PR. I should have thought about doing that before. |
I've just added a test program in the description of the PR which shows different Active Help scenarios and how to use the active help configuration |
@marckhouzam This is great IMO. I like the interactive nature of it and that it is opt-in. 🚀 |
I've pushed an extra commit which uses the environment variable A nice thing about using an env var is that a user could set a different active help setting for individual commands by wrapping them in an alias or script which sets the env var (although that would be a pretty advanced usage). Using a name like We could instead use the program name in the variable, something like Opinions on using a flag versus an env var? |
447ffb9
to
5e226f0
Compare
After some thought I agree with @Luap99 that it is best to use an environment variable to configure ActiveHelp. The fact that people install completion through a package manager does imply that using an env var is better to allow configuration changes to completion. The latest version of the PR uses an environment variable per program (e.g, I'll work on adding tests next. |
dcd88bf
to
d84f81f
Compare
I have added Go tests to the PR. Also, thanks to the approach of using environment variables, there is nothing special to do for the default This PR is ready for review. Thanks in advance. |
e6631ac
to
2a55698
Compare
2a55698
to
59ce7ce
Compare
3314024
to
2b81827
Compare
155729f
to
397ba6d
Compare
This PR is being marked as stale due to a long period of inactivity |
Still valid |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nice work, I really like the idea behind this.
I think it is cool to display a message when your command does not take args for example.
I tested this with bash and it works as I would expect.
func AppendActiveHelp(compArray []string, activeHelpStr string) []string { | ||
return append(compArray, fmt.Sprintf("%s%s", activeHelpMarker, activeHelpStr)) | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I am not sure with the API here, why do I give the compArray as parameter and get the same value with the appended entry back.
IMO It would make more sense to have it like this:
func AppendActiveHelp(activeHelpStr string) string {
return fmt.Sprintf("%s%s", activeHelpMarker, activeHelpStr)
}
and then in you code call
comps = append(comps, cobra.AppendActiveHelp("text"))
With this the caller has control over the append. While I do not think we need to worry about performance here I believe it is better when you call append only once.
text1 := cobra.AppendActiveHelp("text1")
text2 := cobra.AppendActiveHelp("text2")
comps = append(comps, text1, text2)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I struggled to define a good API to add ActiveHelp messages. Here is how I remember choosing the AppendActiveHelp(compArray []string, activeHelpStr string)
API.
- I was worried that it was not obvious that activeHelp messages should be included in the completions array returned by
ValidArgsFunction
; the two concepts could be seen as independent by users (completions and activeHelp messages). I therefore felt that by requiring the user to specify an array (and saying in the godoc that the array should be the one also containing the completion choices) we would make it much clearer that activeHelp messages should be included in the array of completions. - based on that, I then thought we should mimic the behaviour of Go's
append()
which is why I called itAppendActiveHelp()
and required the user to assign the result to an array (just likeappend()
). All this in the hope to build on existing knowledge of an existing API.
If we end up preferring
func AppendActiveHelp(activeHelpStr string) string {
return fmt.Sprintf("%s%s", activeHelpMarker, activeHelpStr)
}
we should probably rename the method to avoid using the word "append". We could create it as CreateActiveHelpMsg()
for example.
But then I worry again that a user won't know easily what to do after having created an activeHelp message. Will they realize they must include it in the completions array?
Some people had trouble understanding what the arguments to ValidArgsFunction(cmd, args, toComplete)
represented... So I don't want to assume anything is clear 😄
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hmmmmm this is a tricky one. I'm not sure on this.
I think I'm a fan of using the API presented here by Marc, but I'm warry of introducing more complexity to how users get their completions into their program.
But from my understanding of this, it's completely opt in? It's not another required step users must take to get their completions working?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Correct, the existing API for normal completions is not affected at all. ActiveHelp is 100% opt-in and can be completely ignored by programs using Cobra.
I expect the most common use of ActiveHelp will/should be to display a message when there are no completions suggested. When there are no completions, the user doesn't really know what to do, so an ActiveHelp message can explain (e.g., "This command does not take any more arguments", or "Please specify a name for the container that will be created").
Thanks for trying it out! |
I've created a draft PR for the cobra-cli that uses ActiveHelp. I hope this show very easily how the feature can be used: spf13/cobra-cli#24 @johnSchnake I've spoken to others about this but not to you. I'd love your impressions on the feature. |
Signed-off-by: Marc Khouzam <marc.khouzam@montreal.ca>
Signed-off-by: Marc Khouzam <marc.khouzam@montreal.ca>
9dc2b50
to
1db55ea
Compare
This PR exceeds the recommended size of 200 lines. Please make sure you are NOT addressing multiple issues with one PR. Note this PR might be rejected due to its size. |
I've rebased this PR on top of the bash-v2 improvements that were recently merged. It is ready again. @scop if you have a moment, maybe you can have a look at the bash code modifications to see if you notice anything wrong? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Wow this is incredible. I love it.
Overall, I think this is ready for the spring release of Cobra we'll be cutting soon. I'm not super up to date on the zsh/bash completions scripting but it appears to work as expected. I'm comfortable cutting a path release if we need to fix bugs if needed.
It is not possible to implement for fish currently.
I'm curious! Something due to fish's spec?
Thanks for trying this out @jpmcb 🎉
From what I remember of fish completion logic, there is no way to output something else than actual completions (can't generically print to stdout like bash allows); so my expectation is that ActiveHelp would be treated as a real completion and get sorted within the list of completions and would even be selectable as a completion through repeated TABing. So it wouldn't work as we would need. Maybe @krobelus can confirm or correct this belief. BTW, since I first opened the PR I took the time to try ActiveHelp with PowerShell and there too it is not possible to output anything else than actual completions (cannot print to stdout like bash allows). I may have an idea to hack something that may work but it would need more investigation that I haven't had time to dive deeper into. So for now, we would have to contend with bash and zsh (which until recently were pretty much the only two shells we supported anyway). |
I think this is good to merge and we can iterate as we get community feedback! Thoughts @marckhouzam? 🚀 |
yeah, fish will likely overwrite that with the completion pager. I guess we can an API for adding arbitrary text. |
Let's do it! Thanks @jpmcb 🚀 |
Skimmed it real quick and didn't notice anything wrong. There's some room for cleanups along the lines of #1702, which I suppose we should amend to cover the things added here. But the feature looks quite interesting indeed 👍 |
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [github.com/spf13/cobra](https://github.com/spf13/cobra) | require | minor | `v1.4.0` -> `v1.5.0` | --- ### Release Notes <details> <summary>spf13/cobra</summary> ### [`v1.5.0`](https://github.com/spf13/cobra/releases/tag/v1.5.0) [Compare Source](https://github.com/spf13/cobra/compare/v1.4.0...v1.5.0) #### Spring 2022 Release 🌥️ Hello everyone! Welcome to another release of cobra. Completions continue to get better and better. This release adds a few really cool new features. We also continue to patch versions of our dependencies as they become available via dependabot. Happy coding! #### Active help 👐🏼 Shout out to [@​marckhouzam](https://github.com/marckhouzam) for a big value add: Active Help [https://github.com/spf13/cobra/pull/1482](https://github.com/spf13/cobra/pull/1482). With active help, a program can provide some inline warnings or hints for users as they hit tab. Now, your CLIs can be even more intuitive to use! Currently active help is only supported for bash V2 and zsh. Marc wrote a whole guide on how to do this, so make sure to give it a good read to learn how you can add this to your cobra code! https://github.com/spf13/cobra/blob/master/active_help.md #### Group flags 🧑🏼🤝🧑🏼 Cobra now has the ability to mark flags as required or exclusive as a ***group***. Shout out to our newest maintainer [@​johnSchnake](https://github.com/johnSchnake) for this! [https://github.com/spf13/cobra/pull/1654](https://github.com/spf13/cobra/pull/1654) Let's say you have a `username` flag that ***MUST*** be partnered with a `password` flag. Well, now, you can enforce those as being required together: ```go rootCmd.Flags().StringVarP(&u, "username", "u", "", "Username (required if password is set)") rootCmd.Flags().StringVarP(&pw, "password", "p", "", "Password (required if username is set)") rootCmd.MarkFlagsRequiredTogether("username", "password") ``` Flags may also be marked as "mutally exclusive" with the `MarkFlagsMutuallyExclusive(string, string ... )` command API. Refer to our [user guide documentation](https://github.com/spf13/cobra/blob/master/user_guide.md) for further info! #### Completions 👀 - Add backwards-compatibility tests for legacyArgs() by [@​marckhouzam](https://github.com/marckhouzam) in [https://github.com/spf13/cobra/pull/1547](https://github.com/spf13/cobra/pull/1547) - feat: Add how to load completions in your current zsh session by [@​ondrejsika](https://github.com/ondrejsika) in [https://github.com/spf13/cobra/pull/1608](https://github.com/spf13/cobra/pull/1608) - Introduce FixedCompletions by [@​emersion](https://github.com/emersion) in [https://github.com/spf13/cobra/pull/1574](https://github.com/spf13/cobra/pull/1574) - Add shell completion to flag groups by [@​marckhouzam](https://github.com/marckhouzam) in [https://github.com/spf13/cobra/pull/1659](https://github.com/spf13/cobra/pull/1659) - Modify brew prefix path in macOS system by [@​imxw](https://github.com/imxw) in [https://github.com/spf13/cobra/pull/1719](https://github.com/spf13/cobra/pull/1719) - perf(bash-v2): use backslash escape string expansion for tab by [@​scop](https://github.com/scop) in [https://github.com/spf13/cobra/pull/1682](https://github.com/spf13/cobra/pull/1682) - style(bash-v2): out is not an array variable, do not refer to it as such by [@​scop](https://github.com/scop) in [https://github.com/spf13/cobra/pull/1681](https://github.com/spf13/cobra/pull/1681) - perf(bash-v2): standard completion optimizations by [@​scop](https://github.com/scop) in [https://github.com/spf13/cobra/pull/1683](https://github.com/spf13/cobra/pull/1683) - style(bash): out is not an array variable, do not refer to it as such by [@​scop](https://github.com/scop) in [https://github.com/spf13/cobra/pull/1684](https://github.com/spf13/cobra/pull/1684) - perf(bash-v2): short-circuit descriptionless candidate lists by [@​scop](https://github.com/scop) in [https://github.com/spf13/cobra/pull/1686](https://github.com/spf13/cobra/pull/1686) - perf(bash-v2): speed up filtering entries with descriptions by [@​scop](https://github.com/scop) in [https://github.com/spf13/cobra/pull/1689](https://github.com/spf13/cobra/pull/1689) - perf(bash-v2): speed up filtering menu-complete descriptions by [@​scop](https://github.com/scop) in [https://github.com/spf13/cobra/pull/1692](https://github.com/spf13/cobra/pull/1692) - fix(bash-v2): skip empty completions when filtering descriptions by [@​scop](https://github.com/scop) in [https://github.com/spf13/cobra/pull/1691](https://github.com/spf13/cobra/pull/1691) - perf(bash-v2): read directly to COMPREPLY on descriptionless short circuit by [@​scop](https://github.com/scop) in [https://github.com/spf13/cobra/pull/1700](https://github.com/spf13/cobra/pull/1700) - fix: Don't complete \_command on zsh by [@​twpayne](https://github.com/twpayne) in [https://github.com/spf13/cobra/pull/1690](https://github.com/spf13/cobra/pull/1690) - Improve fish_completions code quality by [@​t29kida](https://github.com/t29kida) in [https://github.com/spf13/cobra/pull/1515](https://github.com/spf13/cobra/pull/1515) - Fix handling of descriptions for bash v3 by [@​marckhouzam](https://github.com/marckhouzam) in [https://github.com/spf13/cobra/pull/1735](https://github.com/spf13/cobra/pull/1735) - undefined or nil Args default to ArbitraryArgs by [@​umarcor](https://github.com/umarcor) in [https://github.com/spf13/cobra/pull/1612](https://github.com/spf13/cobra/pull/1612) - Add Command.SetContext by [@​joshcarp](https://github.com/joshcarp) in [https://github.com/spf13/cobra/pull/1551](https://github.com/spf13/cobra/pull/1551) - Wrap printf tab with quotes by [@​PapaCharlie](https://github.com/PapaCharlie) in [https://github.com/spf13/cobra/pull/1665](https://github.com/spf13/cobra/pull/1665) #### Documentation 📝 - Fixed typos in completions docs - [@​cuishuang](https://github.com/cuishuang) [https://github.com/spf13/cobra/pull/1625](https://github.com/spf13/cobra/pull/1625) - Removed `CHANGELOG.md` as it isn't updated - [@​johnSchnake](https://github.com/johnSchnake) [https://github.com/spf13/cobra/pull/1634](https://github.com/spf13/cobra/pull/1634) - Minor typo fix in `shell_completion.md` - [@​danieldn](https://github.com/danieldn) [https://github.com/spf13/cobra/pull/1678](https://github.com/spf13/cobra/pull/1678) - Changed branch name in the cobra generator link to 'main' - [@​skywalker2909](https://github.com/skywalker2909) [https://github.com/spf13/cobra/pull/1645](https://github.com/spf13/cobra/pull/1645) - Fix Command.Context comment by [@​katexochen](https://github.com/katexochen) in [https://github.com/spf13/cobra/pull/1639](https://github.com/spf13/cobra/pull/1639) - Change appropriate links from http:// to https:// where applicable - [@​deining](https://github.com/deining) [https://github.com/spf13/cobra/pull/1695](https://github.com/spf13/cobra/pull/1695) #### Testing & CI ⚙️ - Test on Golang 1.18 - [@​umarcor](https://github.com/umarcor) [https://github.com/spf13/cobra/pull/1635](https://github.com/spf13/cobra/pull/1635) - Use `RICHGO_FORCE_COLOR` - [@​umarcor](https://github.com/umarcor) [https://github.com/spf13/cobra/pull/1647](https://github.com/spf13/cobra/pull/1647) - Adds size labeler GitHub action by [@​jpmcb](https://github.com/jpmcb) in [https://github.com/spf13/cobra/pull/1610](https://github.com/spf13/cobra/pull/1610) - Update `stale-bot` settings - [@​jpmcb](https://github.com/jpmcb) [https://github.com/spf13/cobra/pull/1609](https://github.com/spf13/cobra/pull/1609) #### Beep boop, bot commits 🤖 - Bumped golangci/golangci-lint-action from 3.1.0 to 3.2.0 - [@​dependabot](https://github.com/dependabot) [https://github.com/spf13/cobra/pull/1697](https://github.com/spf13/cobra/pull/1697) - Bump codelytv/pr-size-labeler from 1.8.0 to 1.8.1 - [@​dependabot](https://github.com/dependabot) [https://github.com/spf13/cobra/pull/1661](https://github.com/spf13/cobra/pull/1661) - Bump actions/stale from 1 to 5 by [@​dependabot](https://github.com/dependabot) in [https://github.com/spf13/cobra/pull/1618](https://github.com/spf13/cobra/pull/1618) - Bump actions/cache from 2 to 3 by [@​dependabot](https://github.com/dependabot) in [https://github.com/spf13/cobra/pull/1640](https://github.com/spf13/cobra/pull/1640) - Bump actions/labeler from 3 to 4 by [@​dependabot](https://github.com/dependabot) in [https://github.com/spf13/cobra/pull/1620](https://github.com/spf13/cobra/pull/1620) - Bump golangci/golangci-lint-action from 2 to 3.1.0 by [@​dependabot](https://github.com/dependabot) in [https://github.com/spf13/cobra/pull/1615](https://github.com/spf13/cobra/pull/1615) - Bump actions/checkout from 2 to 3 by [@​dependabot](https://github.com/dependabot) in [https://github.com/spf13/cobra/pull/1619](https://github.com/spf13/cobra/pull/1619) - Bump github.com/cpuguy83/go-md2man/v2 from 2.0.1 to 2.0.2 by [@​dependabot](https://github.com/dependabot) in [https://github.com/spf13/cobra/pull/1688](https://github.com/spf13/cobra/pull/1688) - Bump actions/setup-go from 2 to 3 by [@​dependabot](https://github.com/dependabot) in [https://github.com/spf13/cobra/pull/1660](https://github.com/spf13/cobra/pull/1660) #### Misc 💭 - Use `errors.Is()` to check for errors - [@​Luap99](https://github.com/Luap99) [https://github.com/spf13/cobra/pull/1730](https://github.com/spf13/cobra/pull/1730) - Prefer ReplaceAll instead of Replace(..., -1) by [@​WhyNotHugo](https://github.com/WhyNotHugo) in [https://github.com/spf13/cobra/pull/1530](https://github.com/spf13/cobra/pull/1530) - Add Kubescape to projects - [@​avinashupadhya99](https://github.com/avinashupadhya99) [https://github.com/spf13/cobra/pull/1642](https://github.com/spf13/cobra/pull/1642) - Add Pulumi as a project using cobra by [@​iwahbe](https://github.com/iwahbe) in [https://github.com/spf13/cobra/pull/1720](https://github.com/spf13/cobra/pull/1720) - Add Polygon Edge as a project using Cobra by [@​zivkovicmilos](https://github.com/zivkovicmilos) in [https://github.com/spf13/cobra/pull/1672](https://github.com/spf13/cobra/pull/1672) Shoutout to *ALL* our contributors (and all the new first time contributors!!) - great work everyone!! Cobra and it's huge impact wouldn't be possible without you 👏🏼 🚀 🐍 **Full Changelog**: spf13/cobra@v1.4.0...v1.5.0 </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/gapic-showcase).
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [github.com/spf13/cobra](https://github.com/spf13/cobra) | require | minor | `v1.1.3` -> `v1.8.0` | --- ### Release Notes <details> <summary>spf13/cobra (github.com/spf13/cobra)</summary> ### [`v1.8.0`](https://github.com/spf13/cobra/releases/tag/v1.8.0) [Compare Source](https://github.com/spf13/cobra/compare/v1.7.0...v1.8.0) #### ✨ Features - Support usage as plugin for tools like kubectl by [@​nirs](https://github.com/nirs) in [https://github.com/spf13/cobra/pull/2018](https://github.com/spf13/cobra/pull/2018) - this means that programs that utilize a "plugin-like" structure have much better support and usage (like for completions, command paths, etc.) - Move documentation sources to site/content by [@​umarcor](https://github.com/umarcor) in [https://github.com/spf13/cobra/pull/1428](https://github.com/spf13/cobra/pull/1428) - Add 'one required flag' group by [@​marevers](https://github.com/marevers) in [https://github.com/spf13/cobra/pull/1952](https://github.com/spf13/cobra/pull/1952) - this includes a new `MarkFlagsOneRequired` API for flags which can be used to mark a flag group as required and cause command failure if at least one is not used when invoked. - Customizable error message prefix by [@​5ouma](https://github.com/5ouma) in [https://github.com/spf13/cobra/pull/2023](https://github.com/spf13/cobra/pull/2023) - This adds the `SetErrPrefix` and `ErrPrefix` APIs on the `Command` struct to allow for setting a custom prefix for errors - feat: add getters for flag completions by [@​avirtopeanu-ionos](https://github.com/avirtopeanu-ionos) in [https://github.com/spf13/cobra/pull/1943](https://github.com/spf13/cobra/pull/1943) - Feature: allow running persistent run hooks of all parents by [@​vkhoroz](https://github.com/vkhoroz) in [https://github.com/spf13/cobra/pull/2044](https://github.com/spf13/cobra/pull/2044) - Improve API to get flag completion function by [@​marckhouzam](https://github.com/marckhouzam) in [https://github.com/spf13/cobra/pull/2063](https://github.com/spf13/cobra/pull/2063) #### 🐛 Bug fixes - Fix typo in fish completions by [@​twpayne](https://github.com/twpayne) in [https://github.com/spf13/cobra/pull/1945](https://github.com/spf13/cobra/pull/1945) - Fix grammar: 'allows to' by [@​supertassu](https://github.com/supertassu) in [https://github.com/spf13/cobra/pull/1978](https://github.com/spf13/cobra/pull/1978) - powershell: escape variable with curly brackets by [@​Luap99](https://github.com/Luap99) in [https://github.com/spf13/cobra/pull/1960](https://github.com/spf13/cobra/pull/1960) - Don't complete --help flag when flag parsing disabled by [@​marckhouzam](https://github.com/marckhouzam) in [https://github.com/spf13/cobra/pull/2061](https://github.com/spf13/cobra/pull/2061) - Replace all non-alphanumerics in active help env var program prefix by [@​scop](https://github.com/scop) in [https://github.com/spf13/cobra/pull/1940](https://github.com/spf13/cobra/pull/1940) #### 🔧 Maintenance - build(deps): bump golangci/golangci-lint-action from 3.4.0 to 3.5.0 by [@​dependabot](https://github.com/dependabot) in [https://github.com/spf13/cobra/pull/1971](https://github.com/spf13/cobra/pull/1971) - build(deps): bump golangci/golangci-lint-action from 3.5.0 to 3.6.0 by [@​dependabot](https://github.com/dependabot) in [https://github.com/spf13/cobra/pull/1976](https://github.com/spf13/cobra/pull/1976) - build(deps): bump golangci/golangci-lint-action from 3.6.0 to 3.7.0 by [@​dependabot](https://github.com/dependabot) in [https://github.com/spf13/cobra/pull/2021](https://github.com/spf13/cobra/pull/2021) - build(deps): bump actions/setup-go from 3 to 4 by [@​dependabot](https://github.com/dependabot) in [https://github.com/spf13/cobra/pull/1934](https://github.com/spf13/cobra/pull/1934) - build(deps): bump github.com/cpuguy83/go-md2man/v2 from 2.0.2 to 2.0.3 by [@​dependabot](https://github.com/dependabot) in [https://github.com/spf13/cobra/pull/2047](https://github.com/spf13/cobra/pull/2047) - build(deps): bump actions/checkout from 3 to 4 by [@​dependabot](https://github.com/dependabot) in [https://github.com/spf13/cobra/pull/2028](https://github.com/spf13/cobra/pull/2028) - command: temporarily disable G602 due to [securego/gosec#1005](https://github.com/securego/gosec/issues/1005) by [@​umarcor](https://github.com/umarcor) in [https://github.com/spf13/cobra/pull/2022](https://github.com/spf13/cobra/pull/2022) #### 🧪 Testing & CI/CD - test: make fish_completions_test more robust by [@​branchvincent](https://github.com/branchvincent) in [https://github.com/spf13/cobra/pull/1980](https://github.com/spf13/cobra/pull/1980) - golangci: enable 'unused' and disable deprecated replaced by it by [@​umarcor](https://github.com/umarcor) in [https://github.com/spf13/cobra/pull/1983](https://github.com/spf13/cobra/pull/1983) - cleanup: minor corrections to unit tests by [@​JunNishimura](https://github.com/JunNishimura) in [https://github.com/spf13/cobra/pull/2003](https://github.com/spf13/cobra/pull/2003) - ci: test golang 1.21 by [@​nunoadrego](https://github.com/nunoadrego) in [https://github.com/spf13/cobra/pull/2024](https://github.com/spf13/cobra/pull/2024) - Fix linter errors by [@​marckhouzam](https://github.com/marckhouzam) in [https://github.com/spf13/cobra/pull/2052](https://github.com/spf13/cobra/pull/2052) - Add tests for flag completion registration by [@​marckhouzam](https://github.com/marckhouzam) in [https://github.com/spf13/cobra/pull/2053](https://github.com/spf13/cobra/pull/2053) #### ✏️ Documentation - doc: fix typo, Deperecated -> Deprecated by [@​callthingsoff](https://github.com/callthingsoff) in [https://github.com/spf13/cobra/pull/2000](https://github.com/spf13/cobra/pull/2000) - Add notes to doc about the execution condition of \*PreRun and \*PostRun functions by [@​haoming29](https://github.com/haoming29) in [https://github.com/spf13/cobra/pull/2041](https://github.com/spf13/cobra/pull/2041) *** Thank you everyone who contributed to this release and all your hard work! Cobra and this community would never be possible without all of you!!!! 🐍 **Full Changelog**: spf13/cobra@v1.7.0...v1.8.0 ### [`v1.7.0`](https://github.com/spf13/cobra/releases/tag/v1.7.0) [Compare Source](https://github.com/spf13/cobra/compare/v1.6.1...v1.7.0) ##### ✨ Features - Allow to preserve ordering of completions in `bash`, `zsh`, `pwsh`, & `fish`: [@​h4ck3rk3y](https://github.com/h4ck3rk3y) [#​1903](https://github.com/spf13/cobra/issues/1903) - Add support for PowerShell 7.2+ in completions: [@​oldium](https://github.com/oldium) [#​1916](https://github.com/spf13/cobra/issues/1916) - Allow sourcing zsh completion script: [@​marckhouzam](https://github.com/marckhouzam) [#​1917](https://github.com/spf13/cobra/issues/1917) ##### 🐛 Bug fixes - Don't remove flag values that match sub-command name: [@​brianpursley](https://github.com/brianpursley) [#​1781](https://github.com/spf13/cobra/issues/1781) - Fix powershell completions not returning single word: [@​totkeks](https://github.com/totkeks) [#​1850](https://github.com/spf13/cobra/issues/1850) - Remove masked `template` import variable name: [@​yashLadha](https://github.com/yashLadha) [#​1879](https://github.com/spf13/cobra/issues/1879) - Correctly detect completions with dash in argument: [@​oncilla](https://github.com/oncilla) [#​1817](https://github.com/spf13/cobra/issues/1817) ##### 🧪 Testing & CI/CD - Deprecate Go 1.15 in CI: [@​umarcor](https://github.com/umarcor) [#​1866](https://github.com/spf13/cobra/issues/1866) - Deprecate Go 1.16 in CI: [@​umarcor](https://github.com/umarcor) [#​1926](https://github.com/spf13/cobra/issues/1926) - Add testing for Go 1.20 in CI: [@​umarcor](https://github.com/umarcor) [#​1925](https://github.com/spf13/cobra/issues/1925) - Add tests to illustrate unknown flag bug: [@​brianpursley](https://github.com/brianpursley) [#​1854](https://github.com/spf13/cobra/issues/1854) ##### 🔧 Maintenance - Update main image to better handle dark backgrounds: [@​Deleplace](https://github.com/Deleplace) and [@​marckhouzam](https://github.com/marckhouzam) [#​1883](https://github.com/spf13/cobra/issues/1883) - Fix `stale.yaml` mispellings: [@​enrichman](https://github.com/enrichman) [#​1863](https://github.com/spf13/cobra/issues/1863) - Remove stale bot from GitHub actions: [@​jpmcb](https://github.com/jpmcb) [#​1908](https://github.com/spf13/cobra/issues/1908) - Add makefile target for installing dependencies: [@​umarcor](https://github.com/umarcor) [#​1865](https://github.com/spf13/cobra/issues/1865) - Add Sia to projects using Cobra: [@​mike76-dev](https://github.com/mike76-dev) [#​1844](https://github.com/spf13/cobra/issues/1844) - Add `Vitess` and `Arewefastyet` to projects using cobra: [@​frouioui](https://github.com/frouioui) [#​1932](https://github.com/spf13/cobra/issues/1932) - Fixup for Kubescape github org: [@​dwertent](https://github.com/dwertent) [#​1874](https://github.com/spf13/cobra/issues/1874) - Fix route for GitHub workflows badge: [@​sh-cho](https://github.com/sh-cho) [#​1884](https://github.com/spf13/cobra/issues/1884) - Fixup for GoDoc style documentation: [@​yashLadha](https://github.com/yashLadha) [#​1885](https://github.com/spf13/cobra/issues/1885) - Various bash scripting improvements for completion: [@​scop](https://github.com/scop) [#​1702](https://github.com/spf13/cobra/issues/1702) - Add Constellation to projects using Cobra: [@​datosh](https://github.com/datosh) [#​1829](https://github.com/spf13/cobra/issues/1829) ##### ✏️ Documentation - Add documentation about disabling completion descriptions: [@​Shihta](https://github.com/Shihta) [#​1901](https://github.com/spf13/cobra/issues/1901) - Improve `MarkFlagsMutuallyExclusive` example in user guide: [@​janhn](https://github.com/janhn) [#​1904](https://github.com/spf13/cobra/issues/1904) - Update `shell_completions.md`: [@​gusega](https://github.com/gusega) [#​1907](https://github.com/spf13/cobra/issues/1907) - Update copywrite year: [@​umarcor](https://github.com/umarcor) [#​1927](https://github.com/spf13/cobra/issues/1927) - Document suggested layout of subcommands: [@​lcarva](https://github.com/lcarva) [#​1930](https://github.com/spf13/cobra/issues/1930) - Replace deprecated ExactValidArgs with MatchAll in doc: [@​doniacld](https://github.com/doniacld) [#​1836](https://github.com/spf13/cobra/issues/1836) *** This release contains several long running fixes, improvements to powershell completions, and further optimizations for completions. Thank you everyone who contributed to this release and all your hard work! Cobra and this community would never be possible without all of you! 🐍 Full changelog: spf13/cobra@v1.6.1...v1.7.0 ### [`v1.6.1`](https://github.com/spf13/cobra/releases/tag/v1.6.1) [Compare Source](https://github.com/spf13/cobra/compare/v1.6.0...v1.6.1) ##### Bug fixes 🐛 - Fixes a panic when `AddGroup` isn't called before `AddCommand(my-sub-command)` is executed. This can happen within more complex cobra file structures that have many different `init`s to be executed. Now, the check for groups has been moved to `ExecuteC` and provides more flexibility when working with grouped commands - [@​marckhouzam](https://github.com/marckhouzam) (and shout out to [@​aawsome](https://github.com/aawsome), [@​andig](https://github.com/andig) and [@​KINGSABRI](https://github.com/KINGSABRI) for a deep investigation into this! 👏🏼) ### [`v1.6.0`](https://github.com/spf13/cobra/releases/tag/v1.6.0) [Compare Source](https://github.com/spf13/cobra/compare/v1.5.0...v1.6.0) ##### Summer 2022 Release Some exciting changes make their way to Cobra! Command completions continue to get better and better (including adding `--help` and `--version` automatic flags to the completions list). Grouping is now possible in your help output as well! And you can now use the `OnFinalize` method to cleanup things when all "work" is done. Checkout the full changelog below: *** ##### Features 🌠 - Add groups for commands in help: [@​aawsome](https://github.com/aawsome) [@​marckhouzam](https://github.com/marckhouzam) [#​1003](https://github.com/spf13/cobra/issues/1003) - Support for case-insensitive command names: [@​YuviGold](https://github.com/YuviGold) [#​1802](https://github.com/spf13/cobra/issues/1802) - Expose `ValidateRequiredFlags` and `ValidateFlagGroups`: [@​skeetwu](https://github.com/skeetwu) [#​1760](https://github.com/spf13/cobra/issues/1760) - Add `--version` flag to help output: [@​fnickels](https://github.com/fnickels) [#​1707](https://github.com/spf13/cobra/issues/1707) - Add `--help` and `--version` flag in completions: [@​marckhouzam](https://github.com/marckhouzam) [#​1813](https://github.com/spf13/cobra/issues/1813) - Add `OnFinalize` method: [@​yann-soubeyrand](https://github.com/yann-soubeyrand) [#​1788](https://github.com/spf13/cobra/issues/1788) - Allow user to add completion for powershell alias: [@​marckhouzam](https://github.com/marckhouzam) [#​1621](https://github.com/spf13/cobra/issues/1621) - Make `InitDefaultcompletionCmd` public: [@​gssbzn](https://github.com/gssbzn) [#​1467](https://github.com/spf13/cobra/issues/1467) ##### Deprecation 👎🏼 - `ExactValidArgs` is deprecated (but not being removed entirely). This is abit nuanced, so checkout [#​1643](https://github.com/spf13/cobra/issues/1643) for further information and the [updated `user_guide.md`](https://github.com/spf13/cobra/blob/main/user_guide.md) on how this may affect you (and how you can take advantage of the *correct* behavior in the validators): [@​umarcor](https://github.com/umarcor) [#​1643](https://github.com/spf13/cobra/issues/1643) ##### Bug fixes 🐛 - Fix (bash-v2) `activeHelp` length check syntax: [@​scop](https://github.com/scop) [#​1762](https://github.com/spf13/cobra/issues/1762) - Fix correct command path in `see_also` for yaml documentation: [@​zregvart](https://github.com/zregvart) [#​1771](https://github.com/spf13/cobra/issues/1771) - Fix showing flags that shadow parent persistent flag in child help messaging: [@​brianpursley](https://github.com/brianpursley) [#​1776](https://github.com/spf13/cobra/issues/1776) ##### Dependencies 🗳️ - Upgrade to use `gopkg.in/yaml.v3`: [@​tklauser](https://github.com/tklauser) [#​1766](https://github.com/spf13/cobra/issues/1766) ##### Testing 🤔 - Test on Golang 1.19: [@​umarcor](https://github.com/umarcor) & [@​jpmcb](https://github.com/jpmcb) [#​1782](https://github.com/spf13/cobra/issues/1782) - Renamed powershell completion tests: [@​marckhouzam](https://github.com/marckhouzam) [#​1803](https://github.com/spf13/cobra/issues/1803) - Use `action/setup-go` cache: [@​umarcor](https://github.com/umarcor) [#​1783](https://github.com/spf13/cobra/issues/1783) - Add `workflow_dispatch` to CI actions: [@​umarcor](https://github.com/umarcor) [#​1387](https://github.com/spf13/cobra/issues/1387) - Add minimum GitHub token permissions for workflows: [@​varunsh-coder](https://github.com/varunsh-coder) [#​1792](https://github.com/spf13/cobra/issues/1792) ##### Docs ✏️ - Fixup spelling for GitHub CLI: [@​eltociear](https://github.com/eltociear) [#​1744](https://github.com/spf13/cobra/issues/1744) - Clarify `SetContext` documentation: [@​katexochen](https://github.com/katexochen) [#​1748](https://github.com/spf13/cobra/issues/1748) - Instruct user to `go install` for binary: [@​marckhouzam](https://github.com/marckhouzam) [#​1726](https://github.com/spf13/cobra/issues/1726) - User guide cleanup: [@​marckhouzam](https://github.com/marckhouzam) [#​1656](https://github.com/spf13/cobra/issues/1656) - Document option to hide the default completion command: [@​marckhouzam](https://github.com/marckhouzam) [#​1779](https://github.com/spf13/cobra/issues/1779) ##### Misc 💭 - Add KubeVirt, CloudQuery, Cilium, Okteto, Zitadel, Allero to projects using cobra: [@​maiqueb](https://github.com/maiqueb) [#​1741](https://github.com/spf13/cobra/issues/1741), [@​yevgenypats](https://github.com/yevgenypats) [#​1742](https://github.com/spf13/cobra/issues/1742), [@​tklauser](https://github.com/tklauser) [#​1745](https://github.com/spf13/cobra/issues/1745), [@​jLopezbarb](https://github.com/jLopezbarb) [#​1759](https://github.com/spf13/cobra/issues/1759), [@​fforootd](https://github.com/fforootd) [#​1772](https://github.com/spf13/cobra/issues/1772), [@​dimabru](https://github.com/dimabru) [#​1819](https://github.com/spf13/cobra/issues/1819) - Use correct stale action `exempt` yaml keys: [@​jpmcb](https://github.com/jpmcb) [#​1800](https://github.com/spf13/cobra/issues/1800) - Add missing license headers: [@​umarcor](https://github.com/umarcor) [#​1809](https://github.com/spf13/cobra/issues/1809) *Note:* Per [#​1804](https://github.com/spf13/cobra/issues/1804), we will be moving away from "seasonal" releases and doing more generic point release targets. Continue to track the milestones and issues in the `spf13/cobra` GitHub repository for more information! Great work everyone! Cobra would never be possible without your contributions! 🐍 **Full Changelog**: spf13/cobra@v1.5.0...v1.6.0 ### [`v1.5.0`](https://github.com/spf13/cobra/releases/tag/v1.5.0) [Compare Source](https://github.com/spf13/cobra/compare/v1.4.0...v1.5.0) #### Spring 2022 Release 🌥️ Hello everyone! Welcome to another release of cobra. Completions continue to get better and better. This release adds a few really cool new features. We also continue to patch versions of our dependencies as they become available via dependabot. Happy coding! #### Active help 👐🏼 Shout out to [@​marckhouzam](https://github.com/marckhouzam) for a big value add: Active Help [https://github.com/spf13/cobra/pull/1482](https://github.com/spf13/cobra/pull/1482). With active help, a program can provide some inline warnings or hints for users as they hit tab. Now, your CLIs can be even more intuitive to use! Currently active help is only supported for bash V2 and zsh. Marc wrote a whole guide on how to do this, so make sure to give it a good read to learn how you can add this to your cobra code! https://github.com/spf13/cobra/blob/master/active_help.md #### Group flags 🧑🏼🤝🧑🏼 Cobra now has the ability to mark flags as required or exclusive as a ***group***. Shout out to our newest maintainer [@​johnSchnake](https://github.com/johnSchnake) for this! [https://github.com/spf13/cobra/pull/1654](https://github.com/spf13/cobra/pull/1654) Let's say you have a `username` flag that ***MUST*** be partnered with a `password` flag. Well, now, you can enforce those as being required together: ```go rootCmd.Flags().StringVarP(&u, "username", "u", "", "Username (required if password is set)") rootCmd.Flags().StringVarP(&pw, "password", "p", "", "Password (required if username is set)") rootCmd.MarkFlagsRequiredTogether("username", "password") ``` Flags may also be marked as "mutally exclusive" with the `MarkFlagsMutuallyExclusive(string, string ... )` command API. Refer to our [user guide documentation](https://github.com/spf13/cobra/blob/master/user_guide.md) for further info! #### Completions 👀 - Add backwards-compatibility tests for legacyArgs() by [@​marckhouzam](https://github.com/marckhouzam) in [https://github.com/spf13/cobra/pull/1547](https://github.com/spf13/cobra/pull/1547) - feat: Add how to load completions in your current zsh session by [@​ondrejsika](https://github.com/ondrejsika) in [https://github.com/spf13/cobra/pull/1608](https://github.com/spf13/cobra/pull/1608) - Introduce FixedCompletions by [@​emersion](https://github.com/emersion) in [https://github.com/spf13/cobra/pull/1574](https://github.com/spf13/cobra/pull/1574) - Add shell completion to flag groups by [@​marckhouzam](https://github.com/marckhouzam) in [https://github.com/spf13/cobra/pull/1659](https://github.com/spf13/cobra/pull/1659) - Modify brew prefix path in macOS system by [@​imxw](https://github.com/imxw) in [https://github.com/spf13/cobra/pull/1719](https://github.com/spf13/cobra/pull/1719) - perf(bash-v2): use backslash escape string expansion for tab by [@​scop](https://github.com/scop) in [https://github.com/spf13/cobra/pull/1682](https://github.com/spf13/cobra/pull/1682) - style(bash-v2): out is not an array variable, do not refer to it as such by [@​scop](https://github.com/scop) in [https://github.com/spf13/cobra/pull/1681](https://github.com/spf13/cobra/pull/1681) - perf(bash-v2): standard completion optimizations by [@​scop](https://github.com/scop) in [https://github.com/spf13/cobra/pull/1683](https://github.com/spf13/cobra/pull/1683) - style(bash): out is not an array variable, do not refer to it as such by [@​scop](https://github.com/scop) in [https://github.com/spf13/cobra/pull/1684](https://github.com/spf13/cobra/pull/1684) - perf(bash-v2): short-circuit descriptionless candidate lists by [@​scop](https://github.com/scop) in [https://github.com/spf13/cobra/pull/1686](https://github.com/spf13/cobra/pull/1686) - perf(bash-v2): speed up filtering entries with descriptions by [@​scop](https://github.com/scop) in [https://github.com/spf13/cobra/pull/1689](https://github.com/spf13/cobra/pull/1689) - perf(bash-v2): speed up filtering menu-complete descriptions by [@​scop](https://github.com/scop) in [https://github.com/spf13/cobra/pull/1692](https://github.com/spf13/cobra/pull/1692) - fix(bash-v2): skip empty completions when filtering descriptions by [@​scop](https://github.com/scop) in [https://github.com/spf13/cobra/pull/1691](https://github.com/spf13/cobra/pull/1691) - perf(bash-v2): read directly to COMPREPLY on descriptionless short circuit by [@​scop](https://github.com/scop) in [https://github.com/spf13/cobra/pull/1700](https://github.com/spf13/cobra/pull/1700) - fix: Don't complete \_command on zsh by [@​twpayne](https://github.com/twpayne) in [https://github.com/spf13/cobra/pull/1690](https://github.com/spf13/cobra/pull/1690) - Improve fish_completions code quality by [@​t29kida](https://github.com/t29kida) in [https://github.com/spf13/cobra/pull/1515](https://github.com/spf13/cobra/pull/1515) - Fix handling of descriptions for bash v3 by [@​marckhouzam](https://github.com/marckhouzam) in [https://github.com/spf13/cobra/pull/1735](https://github.com/spf13/cobra/pull/1735) - undefined or nil Args default to ArbitraryArgs by [@​umarcor](https://github.com/umarcor) in [https://github.com/spf13/cobra/pull/1612](https://github.com/spf13/cobra/pull/1612) - Add Command.SetContext by [@​joshcarp](https://github.com/joshcarp) in [https://github.com/spf13/cobra/pull/1551](https://github.com/spf13/cobra/pull/1551) - Wrap printf tab with quotes by [@​PapaCharlie](https://github.com/PapaCharlie) in [https://github.com/spf13/cobra/pull/1665](https://github.com/spf13/cobra/pull/1665) #### Documentation 📝 - Fixed typos in completions docs - [@​cuishuang](https://github.com/cuishuang) [https://github.com/spf13/cobra/pull/1625](https://github.com/spf13/cobra/pull/1625) - Removed `CHANGELOG.md` as it isn't updated - [@​johnSchnake](https://github.com/johnSchnake) [https://github.com/spf13/cobra/pull/1634](https://github.com/spf13/cobra/pull/1634) - Minor typo fix in `shell_completion.md` - [@​danieldn](https://github.com/danieldn) [https://github.com/spf13/cobra/pull/1678](https://github.com/spf13/cobra/pull/1678) - Changed branch name in the cobra generator link to 'main' - [@​skywalker2909](https://github.com/skywalker2909) [https://github.com/spf13/cobra/pull/1645](https://github.com/spf13/cobra/pull/1645) - Fix Command.Context comment by [@​katexochen](https://github.com/katexochen) in [https://github.com/spf13/cobra/pull/1639](https://github.com/spf13/cobra/pull/1639) - Change appropriate links from http:// to https:// where applicable - [@​deining](https://github.com/deining) [https://github.com/spf13/cobra/pull/1695](https://github.com/spf13/cobra/pull/1695) #### Testing & CI ⚙️ - Test on Golang 1.18 - [@​umarcor](https://github.com/umarcor) [https://github.com/spf13/cobra/pull/1635](https://github.com/spf13/cobra/pull/1635) - Use `RICHGO_FORCE_COLOR` - [@​umarcor](https://github.com/umarcor) [https://github.com/spf13/cobra/pull/1647](https://github.com/spf13/cobra/pull/1647) - Adds size labeler GitHub action by [@​jpmcb](https://github.com/jpmcb) in [https://github.com/spf13/cobra/pull/1610](https://github.com/spf13/cobra/pull/1610) - Update `stale-bot` settings - [@​jpmcb](https://github.com/jpmcb) [https://github.com/spf13/cobra/pull/1609](https://github.com/spf13/cobra/pull/1609) #### Beep boop, bot commits 🤖 - Bumped golangci/golangci-lint-action from 3.1.0 to 3.2.0 - [@​dependabot](https://github.com/dependabot) [https://github.com/spf13/cobra/pull/1697](https://github.com/spf13/cobra/pull/1697) - Bump codelytv/pr-size-labeler from 1.8.0 to 1.8.1 - [@​dependabot](https://github.com/dependabot) [https://github.com/spf13/cobra/pull/1661](https://github.com/spf13/cobra/pull/1661) - Bump actions/stale from 1 to 5 by [@​dependabot](https://github.com/dependabot) in [https://github.com/spf13/cobra/pull/1618](https://github.com/spf13/cobra/pull/1618) - Bump actions/cache from 2 to 3 by [@​dependabot](https://github.com/dependabot) in [https://github.com/spf13/cobra/pull/1640](https://github.com/spf13/cobra/pull/1640) - Bump actions/labeler from 3 to 4 by [@​dependabot](https://github.com/dependabot) in [https://github.com/spf13/cobra/pull/1620](https://github.com/spf13/cobra/pull/1620) - Bump golangci/golangci-lint-action from 2 to 3.1.0 by [@​dependabot](https://github.com/dependabot) in [https://github.com/spf13/cobra/pull/1615](https://github.com/spf13/cobra/pull/1615) - Bump actions/checkout from 2 to 3 by [@​dependabot](https://github.com/dependabot) in [https://github.com/spf13/cobra/pull/1619](https://github.com/spf13/cobra/pull/1619) - Bump github.com/cpuguy83/go-md2man/v2 from 2.0.1 to 2.0.2 by [@​dependabot](https://github.com/dependabot) in [https://github.com/spf13/cobra/pull/1688](https://github.com/spf13/cobra/pull/1688) - Bump actions/setup-go from 2 to 3 by [@​dependabot](https://github.com/dependabot) in [https://github.com/spf13/cobra/pull/1660](https://github.com/spf13/cobra/pull/1660) #### Misc 💭 - Use `errors.Is()` to check for errors - [@​Luap99](https://github.com/Luap99) [https://github.com/spf13/cobra/pull/1730](https://github.com/spf13/cobra/pull/1730) - Prefer ReplaceAll instead of Replace(..., -1) by [@​WhyNotHugo](https://github.com/WhyNotHugo) in [https://github.com/spf13/cobra/pull/1530](https://github.com/spf13/cobra/pull/1530) - Add Kubescape to projects - [@​avinashupadhya99](https://github.com/avinashupadhya99) [https://github.com/spf13/cobra/pull/1642](https://github.com/spf13/cobra/pull/1642) - Add Pulumi as a project using cobra by [@​iwahbe](https://github.com/iwahbe) in [https://github.com/spf13/cobra/pull/1720](https://github.com/spf13/cobra/pull/1720) - Add Polygon Edge as a project using Cobra by [@​zivkovicmilos](https://github.com/zivkovicmilos) in [https://github.com/spf13/cobra/pull/1672](https://github.com/spf13/cobra/pull/1672) Shoutout to *ALL* our contributors (and all the new first time contributors!!) - great work everyone!! Cobra and it's huge impact wouldn't be possible without you 👏🏼 🚀 🐍 **Full Changelog**: spf13/cobra@v1.4.0...v1.5.0 ### [`v1.4.0`](https://github.com/spf13/cobra/releases/tag/v1.4.0) [Compare Source](https://github.com/spf13/cobra/compare/v1.3.0...v1.4.0) ### Winter 2022 Release ❄️ Another season, another release! #### Goodbye viper! 🐍 🚀 The core Cobra library no longer requires Viper and all of its indirect dependencies. This means that Cobra's dependency tree has been drastically thinned! The Viper dependency was included because of the `cobra` CLI generation tool. [This tool has migrated to `spf13/cobra-cli`](https://github.com/spf13/cobra-cli/releases/tag/v1.3.0). It's *pretty unlikely* you were importing and using **the bootstrapping CLI tool** as part of your application (after all, it's just a tool to get going with core `cobra`). But if you were, replace occurrences of "github.com/spf13/cobra/cobra" with "github.com/spf13/cobra-cli" And in your `go.mod`, you'll want to also include this dependency: github.com/spf13/cobra-cli v1.3.0 Again, the maintainers *do not anticipate* this being a breaking change to users of the core `cobra` library, so minimal work should be required for users to integrate with this new release. Moreover, this means the dependency tree for your application using Cobra should no longer require dependencies that were inherited from Viper. Huzzah! 🥳 If you'd like to read more - issue: [https://github.com/spf13/cobra/issues/1597](https://github.com/spf13/cobra/issues/1597) - PR: [https://github.com/spf13/cobra/pull/1604](https://github.com/spf13/cobra/pull/1604) #### Documentation 📝 - Update Go Doc link and badge in README: [https://github.com/spf13/cobra/pull/1593](https://github.com/spf13/cobra/pull/1593) - Fix to install command, now targets `@latest`: [https://github.com/spf13/cobra/pull/1576](https://github.com/spf13/cobra/pull/1576) - Added MAINTAINERS file: [https://github.com/spf13/cobra/pull/1545](https://github.com/spf13/cobra/pull/1545) #### Other 💭 - Bumped license year to 2022 in golden files: [https://github.com/spf13/cobra/pull/1575](https://github.com/spf13/cobra/pull/1575) - Added Pixie to projects: [https://github.com/spf13/cobra/pull/1581](https://github.com/spf13/cobra/pull/1581) - Updated labeler for new labeling scheme: [https://github.com/spf13/cobra/pull/1613](https://github.com/spf13/cobra/pull/1613) & syntax fix: [https://github.com/spf13/cobra/pull/1624](https://github.com/spf13/cobra/pull/1624) Shoutout to our awesome contributors helping to make this cobra release possible!! [@​spf13](https://github.com/spf13) [@​marckhouzam](https://github.com/marckhouzam) [@​johnSchnake](https://github.com/johnSchnake) [@​jpmcb](https://github.com/jpmcb) [@​liggitt](https://github.com/liggitt) [@​umarcor](https://github.com/umarcor) [@​hiljusti](https://github.com/hiljusti) [@​marians](https://github.com/marians) [@​shyim](https://github.com/shyim) [@​htroisi](https://github.com/htroisi) ### [`v1.3.0`](https://github.com/spf13/cobra/releases/tag/v1.3.0) [Compare Source](https://github.com/spf13/cobra/compare/v1.2.1...v1.3.0) ### v1.3.0 - The Fall 2021 release 🍁 #### Completion fixes & enhancements 💇🏼 In `v1.2.0`, we introduced a new model for completions. Thanks to everyone for trying it, giving feedback, and providing numerous fixes! Continue to work with the new model as the old one (as noted in code comments) will be deprecated in a coming release. - `DisableFlagParsing` now triggers custom completions for flag names [#​1161](https://github.com/spf13/cobra/issues/1161) - Fixed unbound variables in bash completions causing edge case errors [#​1321](https://github.com/spf13/cobra/issues/1321) - `help` completion formatting improvements & fixes [#​1444](https://github.com/spf13/cobra/issues/1444) - All completions now follow the `help` example: short desc are now capitalized and removes extra spacing from long description [#​1455](https://github.com/spf13/cobra/issues/1455) - Typo fixes in bash & zsh completions [#​1459](https://github.com/spf13/cobra/issues/1459) - Fixed mixed tab/spaces indentation in completion scripts. Now just 4 spaces [#​1473](https://github.com/spf13/cobra/issues/1473) - Support for different bash completion options. Bash completions v2 supports descriptions and requires descriptions to be removed for `menu-complete`, `menu-complete-backward` and `insert-completions`. These descriptions are now purposefully removed in support of this model. [#​1509](https://github.com/spf13/cobra/issues/1509) - Fix for invalid shell completions when using `~/.cobra.yaml`. Log message `Using config file: ~/.cobra.yaml` now printed to stderr [#​1510](https://github.com/spf13/cobra/issues/1510) - Removes unnecessary trailing spaces from completion command descriptions [#​1520](https://github.com/spf13/cobra/issues/1520) - Option to hide default `completion` command [#​1541](https://github.com/spf13/cobra/issues/1541) - Remove `__complete` command for programs without subcommands [#​1563](https://github.com/spf13/cobra/issues/1563) #### Generator changes ⚙️ Thanks to [@​spf13](https://github.com/spf13) for providing a number of changes to the Cobra generator tool, streamlining it for new users! - The Cobra generator now *won't* automatically include Viper and cleans up a number of unused imports when not using Viper. - The Cobra generator's default license is now `none` - The Cobra generator now works with Go modules - Documentation to reflect these changes #### New Features ⭐ - License can be specified by their SPDX identifiers [#​1159](https://github.com/spf13/cobra/issues/1159) - `MatchAll` allows combining several PositionalArgs to work in concert. This now allows for enabling composing `PositionalArgs` [#​896](https://github.com/spf13/cobra/issues/896) #### Bug Fixes 🐛 - Fixed multiple error message from cobra `init` boilerplates [#​1463](https://github.com/spf13/cobra/issues/1463) [#​1552](https://github.com/spf13/cobra/issues/1552) [#​1557](https://github.com/spf13/cobra/issues/1557) #### Testing 👀 - Now testing golang 1.16.x and 1.17.x in CI [#​1425](https://github.com/spf13/cobra/issues/1425) - Fix for running diff test to ignore CR for windows [#​949](https://github.com/spf13/cobra/issues/949) - Added helper functions and reduced code reproduction in `args_test` [#​1426](https://github.com/spf13/cobra/issues/1426) - Now using official `golangci-lint` github action [#​1477](https://github.com/spf13/cobra/issues/1477) #### Security 🔏 - Added GitHub dependabot [#​1427](https://github.com/spf13/cobra/issues/1427) - Now using Viper `v1.10.0` - There is a known CVE in an *indirect* dependency from `viper`: [https://github.com/spf13/cobra/issues/1538](https://github.com/spf13/cobra/issues/1538). This will be patched in a future release #### Documentation 📝 - Multiple projects added to the `projects_using_cobra.md` file: [#​1377](https://github.com/spf13/cobra/issues/1377) [#​1501](https://github.com/spf13/cobra/issues/1501) [#​1454](https://github.com/spf13/cobra/issues/1454) - Removed ToC from main readme file as it is now automagically displayed by GitHub [#​1429](https://github.com/spf13/cobra/issues/1429) - Documentation correct for when the `--author` flag is specified [#​1009](https://github.com/spf13/cobra/issues/1009) - `shell_completions.md` has an easier to use snippet for copying and pasting shell completions [#​1372](https://github.com/spf13/cobra/issues/1372) #### Other 💭 - Bump version of `cpuguy83/go-md2man` to v2.0.1 [#​1460](https://github.com/spf13/cobra/issues/1460) - Removed `lesser` typo from the GPL-2.0 license [#​880](https://github.com/spf13/cobra/issues/880) - Fixed spelling errors [#​1514](https://github.com/spf13/cobra/issues/1514) *Thank you to all our amazing contributors* ⭐🐍🚀 ### [`v1.2.1`](https://github.com/spf13/cobra/releases/tag/v1.2.1) [Compare Source](https://github.com/spf13/cobra/compare/v1.2.0...v1.2.1) ##### Bug fixes - Quickfix for [https://github.com/spf13/cobra/issues/1437](https://github.com/spf13/cobra/issues/1437) after v1.2.0 where parallel use of the `cmd.RegisterFlagCompletionFunc()` (and subsequent map) now works correctly and flag completions now work again ### [`v1.2.0`](https://github.com/spf13/cobra/releases/tag/v1.2.0): - The completions release [Compare Source](https://github.com/spf13/cobra/compare/v1.1.3...v1.2.0) ### 🌠 v1.2.0 - The completions release Welcome to v1.2.0 of Cobra! This release focuses on code completions, several critical bug fixes, some documentation updates, and security bumps. Upgrading should be simple but please take note of the introduction of bash completions V2 and their default use. The v1 completions library is still available, but will be *deprecated* in the future. Please open an issue with any problems! *** #### New Features - Automatically adds a `completion` command for shell completions. If a `completion` command is already provided, uses that instead. This will *automatically* provide shell completions for bash, zsh, fish, and PowerShell [https://github.com/spf13/cobra/pull/1192](https://github.com/spf13/cobra/pull/1192) - Users can configure the command auto creation: - disable the creation of the completion command - disable completion descriptions - disable the `--no-descriptions` flag for "always on" completion descriptions - Introduction of bash completions V2, a uniform completion approach which include completion descriptions. The V1 bash completions are still available *but will be deprecated* in a later release - [https://github.com/spf13/cobra/pull/1146](https://github.com/spf13/cobra/pull/1146) - Note that projects providing completion through a different command name (say a command named "complete") will continue to use v1 for their own command but will also provide cobra's implicit "completion" command which will use v2, unless of course, these projects take the time to disable the default "completion" command as noted above. - Commands now support context being passed to completions - [https://github.com/spf13/cobra/pull/1265](https://github.com/spf13/cobra/pull/1265) - An example can be found here: [https://github.com/spf13/cobra/pull/1265#issuecomment-734551031](https://github.com/spf13/cobra/pull/1265#issuecomment-734551031) - Removed dependency on`mitchellh/go-homedir` in favor of core Go `os.UserHomeDir()` - spf13/cobra@8eaca5f #### Bug Fixes - Fix trailing whitespace not being handled in powershell completion scripts [https://github.com/spf13/cobra/pull/1342](https://github.com/spf13/cobra/pull/1342) - Bash completion variable leak fix [https://github.com/spf13/cobra/pull/1352](https://github.com/spf13/cobra/pull/1352) - Fish shell completions correctly ignore trailing empty lines [https://github.com/spf13/cobra/pull/1284](https://github.com/spf13/cobra/pull/1284) - PowerShell completions fix for "no file comp directive" - [https://github.com/spf13/cobra/pull/1363](https://github.com/spf13/cobra/pull/1363) - Custom completions now correctly handle multiple shorthand flags together - [https://github.com/spf13/cobra/pull/1258](https://github.com/spf13/cobra/pull/1258) - zsh completions now correctly handle `ShellDirectiveCompletionNoSpace` and file completion all the time - [https://github.com/spf13/cobra/pull/1213](https://github.com/spf13/cobra/pull/1213) - Multiple fixes / improvements to the fish shell support - [https://github.com/spf13/cobra/pull/1249](https://github.com/spf13/cobra/pull/1249) - Fix home directory config not loading correctly - [https://github.com/spf13/cobra/pull/1282](https://github.com/spf13/cobra/pull/1282) - Fix for `RegisterFlagCompletionFunc` as a global var not working in multi-threaded programs: [https://github.com/spf13/cobra/pull/1423](https://github.com/spf13/cobra/pull/1423) - Custom completions correctly do not complete flags after args when interspersed is false [#​1308](https://github.com/spf13/cobra/issues/1308) #### Testing - Deprecated Travis CI. Now fully using Github Actions - spf13/cobra@d0f318d - Added test cases and enhancements (thank you to everyone for taking the time to add tests to your PRs!) - Shoutout to [@​marckhouzam](https://github.com/marckhouzam) and [@​Luap99](https://github.com/Luap99) for their hard work on a cobra command completions testing library. [Check out the repo here!](https://github.com/marckhouzam/cobra-completion-testing) #### Security - Bump viper to 1.8.1. This corrects several issues with vulnerabilities existing in the dependency tree - [https://github.com/spf13/cobra/pull/1433](https://github.com/spf13/cobra/pull/1433) #### Other - Add PR labeler with pull_request_target to enable tests to run from forks - [https://github.com/spf13/cobra/pull/1338](https://github.com/spf13/cobra/pull/1338) - CI using MSYS2 windows machines pull latest - [https://github.com/spf13/cobra/pull/1366](https://github.com/spf13/cobra/pull/1366) - Multiple small fixes to spelling / documentation - [https://github.com/spf13/cobra/pull/1349](https://github.com/spf13/cobra/pull/1349) [https://github.com/spf13/cobra/pull/1417](https://github.com/spf13/cobra/pull/1417) [https://github.com/spf13/cobra/pull/1434](https://github.com/spf13/cobra/pull/1434) **Thank you to *all* our amazing contributors 🐍🚀** </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/PingCAP-QE/ee-apps). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy44Ny4yIiwidXBkYXRlZEluVmVyIjoiMzcuODcuMiIsInRhcmdldEJyYW5jaCI6Im1haW4ifQ==--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
This PR is a proposal to enhance the shell completion logic with a framework for what I call "Active Help".
Active Help are messages (hints, warnings, etc) that are printed during the use of the program using the shell completion system. It aims to help teach how to use the program in an "active" fashion.
For example,
Active Help messages are defined by the program by adding them as custom completions using
ValidArgsFunction
andRegisterFlagCompletionFunc
and a new function:cobra.AppendActiveHelp(completionArray, activeHelpMessage)
.Here is a 3 minute video illustrating how the feature can be used:
The PR contains documentation describing how to use the feature.
The PR adds the feature to both
bash
andzsh
.It is probably do-able for. It is not possible to implement forpowershell
but I haven't triedpowrshell
orfish
currently.I'd be interested to know if this is something of interest to the community.
Note:
For bash, version >= 4.4 of bash provides a smoother experience. In older versions of bash, when printing Active Help, the prompt will not be shown before what the user has typed, but will re-appear when normal completion is triggered. For example:
Should Active Help be disabled completely for bash < 4.4, or is the lack of prompt acceptable?
Missing:
This can be seen in action using spf13/cobra-cli#24
Here is a test program that adds some active help:
Test program
/cc @jpmcb @jharshman @Luap99