cobra icon indicating copy to clipboard operation
cobra copied to clipboard

Feature request: Set a default completion function

Open albers opened this issue 1 year ago • 4 comments

In my experience, not many flags actually require completion of files.

Some have dynamic completions, but a great deal of them take free-form string parameters where no completion can be offered. Unfortunately, the default completion for a flag with no completion function in Cobra is file completion. This forces me to register a cobra.NoFileCompletions for each flag of that category.

As an example, completion for docker run has 56 flags where no meaningful FlagCompletionFunc exists. In a first attempt, I registered 56 handlers with cmd.RegisterFlagCompletionFunc("flag-name", cobra.NoFileCompletions) just to silence their file completion. Following a hint of @thaJeztah, I replaced them with a programmatically installed default handler, see here.

I would very much welcome a solution in Cobra, where I can set a default handler on command level, something like

cmd.CompletionOptions.DefaultCompHandler = cobra.NoFileCompletions

With this feature, I'd only have to define the completion functions for flags that actually have meaningful completions.

/cc @thaJeztah

albers avatar Dec 27 '24 20:12 albers

I agree. I regret making file completion the default behaviour; in retrospect, no completion should have been the default. But now we are stuck with this default behaviour. Adding an option to change the default completion sounds like a good idea.

marckhouzam avatar Dec 28 '24 00:12 marckhouzam

Thanks! And thanks for opening @albers - were you planning to work on this?

I just recalled I had that other issue with custom flags that can be set multiple times, but were not detected for completion (multiple times); I just pushed a PR with some changes In had stashed locally;

  • https://github.com/spf13/cobra/pull/2210

thaJeztah avatar Dec 28 '24 14:12 thaJeztah

@thaJeztah I will give it a try.

albers avatar Dec 31 '24 13:12 albers

@marckhouzam File completion was an obvious choice though, as it is exactly what bash completion resorts to in case no completion is defined.

albers avatar Dec 31 '24 13:12 albers