From 531f7e121d2e57495cdf159299bf95adce89f3fc Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Sat, 30 Aug 2025 11:27:54 +0200 Subject: [PATCH] cli/command/completion: change Platforms to return a cobra.CompletionFunc It's adding a slight indirection by constructing a function when called, but makes the completion functions more consistent, the signature easier to read, and making the return type a [cobra.CompletionFunc] makes it more transparent what it's intended for, and helps discovery of functions that provide completion. [cobra.CompletionFunc]: https://pkg.go.dev/github.com/spf13/cobra#CompletionFunc Signed-off-by: Sebastiaan van Stijn --- cli/command/completion/functions.go | 2 +- cli/command/container/completion.go | 2 +- cli/command/container/create.go | 2 +- cli/command/image/build.go | 2 +- cli/command/image/history.go | 2 +- cli/command/image/import.go | 2 +- cli/command/image/inspect.go | 2 +- cli/command/image/load.go | 2 +- cli/command/image/pull.go | 2 +- cli/command/image/push.go | 2 +- cli/command/image/remove.go | 2 +- cli/command/image/save.go | 2 +- 12 files changed, 12 insertions(+), 12 deletions(-) diff --git a/cli/command/completion/functions.go b/cli/command/completion/functions.go index c2faaa2b67..b5003d2f82 100644 --- a/cli/command/completion/functions.go +++ b/cli/command/completion/functions.go @@ -178,7 +178,7 @@ var commonPlatforms = []string{ // but don't have wide adoption (and no support), such as loong64, mipsXXX, // ppc64 (non-le) to prevent confusion. func Platforms() cobra.CompletionFunc { - return func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { + return func(_ *cobra.Command, _ []string, _ string) ([]string, cobra.ShellCompDirective) { return commonPlatforms, cobra.ShellCompDirectiveNoFileComp } } diff --git a/cli/command/container/completion.go b/cli/command/container/completion.go index a9fba5a5e4..24913e34fe 100644 --- a/cli/command/container/completion.go +++ b/cli/command/container/completion.go @@ -130,7 +130,7 @@ func addCompletions(cmd *cobra.Command, dockerCLI completion.APIClientProvider) _ = cmd.RegisterFlagCompletionFunc("log-opt", completeLogOpt) _ = cmd.RegisterFlagCompletionFunc("network", completion.NetworkNames(dockerCLI)) _ = cmd.RegisterFlagCompletionFunc("pid", completePid(dockerCLI)) - _ = cmd.RegisterFlagCompletionFunc("platform", completion.Platforms) + _ = cmd.RegisterFlagCompletionFunc("platform", completion.Platforms()) _ = cmd.RegisterFlagCompletionFunc("pull", completion.FromList(PullImageAlways, PullImageMissing, PullImageNever)) _ = cmd.RegisterFlagCompletionFunc("restart", completeRestartPolicies) _ = cmd.RegisterFlagCompletionFunc("security-opt", completeSecurityOpt) diff --git a/cli/command/container/create.go b/cli/command/container/create.go index 6ce0496350..aa644d7eeb 100644 --- a/cli/command/container/create.go +++ b/cli/command/container/create.go @@ -88,7 +88,7 @@ func newCreateCommand(dockerCLI command.Cli) *cobra.Command { // TODO(thaJeztah): consider adding platform as "image create option" on containerOptions addPlatformFlag(flags, &options.platform) - _ = cmd.RegisterFlagCompletionFunc("platform", completion.Platforms) + _ = cmd.RegisterFlagCompletionFunc("platform", completion.Platforms()) flags.BoolVar(&options.untrusted, "disable-content-trust", !dockerCLI.ContentTrustEnabled(), "Skip image verification") copts = addFlags(flags) diff --git a/cli/command/image/build.go b/cli/command/image/build.go index b2340168e5..d98b21f493 100644 --- a/cli/command/image/build.go +++ b/cli/command/image/build.go @@ -157,7 +157,7 @@ func newBuildCommand(dockerCLI command.Cli) *cobra.Command { flags.SetAnnotation("squash", "experimental", nil) flags.SetAnnotation("squash", "version", []string{"1.25"}) - _ = cmd.RegisterFlagCompletionFunc("platform", completion.Platforms) + _ = cmd.RegisterFlagCompletionFunc("platform", completion.Platforms()) return cmd } diff --git a/cli/command/image/history.go b/cli/command/image/history.go index a8a4de8be1..ef9be33a5d 100644 --- a/cli/command/image/history.go +++ b/cli/command/image/history.go @@ -52,7 +52,7 @@ func newHistoryCommand(dockerCLI command.Cli) *cobra.Command { flags.StringVar(&opts.platform, "platform", "", `Show history for the given platform. Formatted as "os[/arch[/variant]]" (e.g., "linux/amd64")`) _ = flags.SetAnnotation("platform", "version", []string{"1.48"}) - _ = cmd.RegisterFlagCompletionFunc("platform", completion.Platforms) + _ = cmd.RegisterFlagCompletionFunc("platform", completion.Platforms()) return cmd } diff --git a/cli/command/image/import.go b/cli/command/image/import.go index bc1b311737..2a9f9d329f 100644 --- a/cli/command/image/import.go +++ b/cli/command/image/import.go @@ -49,7 +49,7 @@ func newImportCommand(dockerCLI command.Cli) *cobra.Command { flags.VarP(&options.changes, "change", "c", "Apply Dockerfile instruction to the created image") flags.StringVarP(&options.message, "message", "m", "", "Set commit message for imported image") addPlatformFlag(flags, &options.platform) - _ = cmd.RegisterFlagCompletionFunc("platform", completion.Platforms) + _ = cmd.RegisterFlagCompletionFunc("platform", completion.Platforms()) return cmd } diff --git a/cli/command/image/inspect.go b/cli/command/image/inspect.go index 99784dd822..b899982f5a 100644 --- a/cli/command/image/inspect.go +++ b/cli/command/image/inspect.go @@ -52,7 +52,7 @@ If the image or the server is not multi-platform capable, the command will error 'os[/arch[/variant]]': Explicit platform (eg. linux/amd64)`) flags.SetAnnotation("platform", "version", []string{"1.49"}) - _ = cmd.RegisterFlagCompletionFunc("platform", completion.Platforms) + _ = cmd.RegisterFlagCompletionFunc("platform", completion.Platforms()) return cmd } diff --git a/cli/command/image/load.go b/cli/command/image/load.go index 664d1fea56..11cb39e400 100644 --- a/cli/command/image/load.go +++ b/cli/command/image/load.go @@ -48,7 +48,7 @@ func newLoadCommand(dockerCLI command.Cli) *cobra.Command { flags.StringSliceVar(&opts.platform, "platform", []string{}, `Load only the given platform(s). Formatted as a comma-separated list of "os[/arch[/variant]]" (e.g., "linux/amd64,linux/arm64/v8").`) _ = flags.SetAnnotation("platform", "version", []string{"1.48"}) - _ = cmd.RegisterFlagCompletionFunc("platform", completion.Platforms) + _ = cmd.RegisterFlagCompletionFunc("platform", completion.Platforms()) return cmd } diff --git a/cli/command/image/pull.go b/cli/command/image/pull.go index 136fa14f46..00d3eb486c 100644 --- a/cli/command/image/pull.go +++ b/cli/command/image/pull.go @@ -52,7 +52,7 @@ func newPullCommand(dockerCLI command.Cli) *cobra.Command { addPlatformFlag(flags, &opts.platform) flags.BoolVar(&opts.untrusted, "disable-content-trust", !dockerCLI.ContentTrustEnabled(), "Skip image verification") - _ = cmd.RegisterFlagCompletionFunc("platform", completion.Platforms) + _ = cmd.RegisterFlagCompletionFunc("platform", completion.Platforms()) return cmd } diff --git a/cli/command/image/push.go b/cli/command/image/push.go index 4ec8cd76e8..62d565f24f 100644 --- a/cli/command/image/push.go +++ b/cli/command/image/push.go @@ -69,7 +69,7 @@ Image index won't be pushed, meaning that other manifests, including attestation 'os[/arch[/variant]]': Explicit platform (eg. linux/amd64)`) flags.SetAnnotation("platform", "version", []string{"1.46"}) - _ = cmd.RegisterFlagCompletionFunc("platform", completion.Platforms) + _ = cmd.RegisterFlagCompletionFunc("platform", completion.Platforms()) return cmd } diff --git a/cli/command/image/remove.go b/cli/command/image/remove.go index a251a7658b..90625e2c3c 100644 --- a/cli/command/image/remove.go +++ b/cli/command/image/remove.go @@ -47,7 +47,7 @@ func newRemoveCommand(dockerCLI command.Cli) *cobra.Command { flags.StringSliceVar(&options.platforms, "platform", nil, `Remove only the given platform variant. Formatted as "os[/arch[/variant]]" (e.g., "linux/amd64")`) _ = flags.SetAnnotation("platform", "version", []string{"1.50"}) - _ = cmd.RegisterFlagCompletionFunc("platform", completion.Platforms) + _ = cmd.RegisterFlagCompletionFunc("platform", completion.Platforms()) return cmd } diff --git a/cli/command/image/save.go b/cli/command/image/save.go index 1309b4c955..f900cb1da8 100644 --- a/cli/command/image/save.go +++ b/cli/command/image/save.go @@ -47,7 +47,7 @@ func newSaveCommand(dockerCLI command.Cli) *cobra.Command { flags.StringSliceVar(&opts.platform, "platform", []string{}, `Save only the given platform(s). Formatted as a comma-separated list of "os[/arch[/variant]]" (e.g., "linux/amd64,linux/arm64/v8")`) _ = flags.SetAnnotation("platform", "version", []string{"1.48"}) - _ = cmd.RegisterFlagCompletionFunc("platform", completion.Platforms) + _ = cmd.RegisterFlagCompletionFunc("platform", completion.Platforms()) return cmd }