Skip to content

Commit 8228108

Browse files
authored
Merge pull request #6448 from thaJeztah/cleanup_completion
cli/command/completion: change signatures to return a cobra.CompletionFunc
2 parents c3ceba2 + 3785198 commit 8228108

File tree

17 files changed

+39
-33
lines changed

17 files changed

+39
-33
lines changed

cli/command/completion/functions.go

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -116,14 +116,16 @@ func NetworkNames(dockerCLI APIClientProvider) cobra.CompletionFunc {
116116
// export MY_VAR=hello
117117
// docker run --rm --env MY_VAR alpine printenv MY_VAR
118118
// hello
119-
func EnvVarNames(_ *cobra.Command, _ []string, _ string) (names []string, _ cobra.ShellCompDirective) {
120-
envs := os.Environ()
121-
names = make([]string, 0, len(envs))
122-
for _, env := range envs {
123-
name, _, _ := strings.Cut(env, "=")
124-
names = append(names, name)
119+
func EnvVarNames() cobra.CompletionFunc {
120+
return func(_ *cobra.Command, _ []string, _ string) (names []string, _ cobra.ShellCompDirective) {
121+
envs := os.Environ()
122+
names = make([]string, 0, len(envs))
123+
for _, env := range envs {
124+
name, _, _ := strings.Cut(env, "=")
125+
names = append(names, name)
126+
}
127+
return names, cobra.ShellCompDirectiveNoFileComp
125128
}
126-
return names, cobra.ShellCompDirectiveNoFileComp
127129
}
128130

129131
// FromList offers completion for the given list of options.
@@ -134,8 +136,10 @@ func FromList(options ...string) cobra.CompletionFunc {
134136
// FileNames is a convenience function to use [cobra.ShellCompDirectiveDefault],
135137
// which indicates to let the shell perform its default behavior after
136138
// completions have been provided.
137-
func FileNames(_ *cobra.Command, _ []string, _ string) ([]string, cobra.ShellCompDirective) {
138-
return nil, cobra.ShellCompDirectiveDefault
139+
func FileNames() cobra.CompletionFunc {
140+
return func(_ *cobra.Command, _ []string, _ string) ([]string, cobra.ShellCompDirective) {
141+
return nil, cobra.ShellCompDirectiveDefault
142+
}
139143
}
140144

141145
var commonPlatforms = []string{
@@ -175,6 +179,8 @@ var commonPlatforms = []string{
175179
// - we currently exclude architectures that may have unofficial builds,
176180
// but don't have wide adoption (and no support), such as loong64, mipsXXX,
177181
// ppc64 (non-le) to prevent confusion.
178-
func Platforms(_ *cobra.Command, _ []string, _ string) (platforms []string, _ cobra.ShellCompDirective) {
179-
return commonPlatforms, cobra.ShellCompDirectiveNoFileComp
182+
func Platforms() cobra.CompletionFunc {
183+
return func(_ *cobra.Command, _ []string, _ string) ([]string, cobra.ShellCompDirective) {
184+
return commonPlatforms, cobra.ShellCompDirectiveNoFileComp
185+
}
180186
}

cli/command/completion/functions_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ func TestCompleteEnvVarNames(t *testing.T) {
176176
"ENV_A": "hello-a",
177177
"ENV_B": "hello-b",
178178
})
179-
values, directives := EnvVarNames(nil, nil, "")
179+
values, directives := EnvVarNames()(nil, nil, "")
180180
assert.Check(t, is.Equal(directives&cobra.ShellCompDirectiveNoFileComp, cobra.ShellCompDirectiveNoFileComp), "Should not perform file completion")
181181

182182
sort.Strings(values)
@@ -185,7 +185,7 @@ func TestCompleteEnvVarNames(t *testing.T) {
185185
}
186186

187187
func TestCompleteFileNames(t *testing.T) {
188-
values, directives := FileNames(nil, nil, "")
188+
values, directives := FileNames()(nil, nil, "")
189189
assert.Check(t, is.Equal(directives, cobra.ShellCompDirectiveDefault))
190190
assert.Check(t, is.Len(values, 0))
191191
}
@@ -304,7 +304,7 @@ func TestCompleteNetworkNames(t *testing.T) {
304304
}
305305

306306
func TestCompletePlatforms(t *testing.T) {
307-
values, directives := Platforms(nil, nil, "")
307+
values, directives := Platforms()(nil, nil, "")
308308
assert.Check(t, is.Equal(directives&cobra.ShellCompDirectiveNoFileComp, cobra.ShellCompDirectiveNoFileComp), "Should not perform file completion")
309309
assert.Check(t, is.DeepEqual(values, commonPlatforms))
310310
}

cli/command/container/completion.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -122,15 +122,15 @@ func addCompletions(cmd *cobra.Command, dockerCLI completion.APIClientProvider)
122122
_ = cmd.RegisterFlagCompletionFunc("cap-add", completeLinuxCapabilityNames)
123123
_ = cmd.RegisterFlagCompletionFunc("cap-drop", completeLinuxCapabilityNames)
124124
_ = cmd.RegisterFlagCompletionFunc("cgroupns", completeCgroupns())
125-
_ = cmd.RegisterFlagCompletionFunc("env", completion.EnvVarNames)
126-
_ = cmd.RegisterFlagCompletionFunc("env-file", completion.FileNames)
125+
_ = cmd.RegisterFlagCompletionFunc("env", completion.EnvVarNames())
126+
_ = cmd.RegisterFlagCompletionFunc("env-file", completion.FileNames())
127127
_ = cmd.RegisterFlagCompletionFunc("ipc", completeIpc(dockerCLI))
128128
_ = cmd.RegisterFlagCompletionFunc("link", completeLink(dockerCLI))
129129
_ = cmd.RegisterFlagCompletionFunc("log-driver", completeLogDriver(dockerCLI))
130130
_ = cmd.RegisterFlagCompletionFunc("log-opt", completeLogOpt)
131131
_ = cmd.RegisterFlagCompletionFunc("network", completion.NetworkNames(dockerCLI))
132132
_ = cmd.RegisterFlagCompletionFunc("pid", completePid(dockerCLI))
133-
_ = cmd.RegisterFlagCompletionFunc("platform", completion.Platforms)
133+
_ = cmd.RegisterFlagCompletionFunc("platform", completion.Platforms())
134134
_ = cmd.RegisterFlagCompletionFunc("pull", completion.FromList(PullImageAlways, PullImageMissing, PullImageNever))
135135
_ = cmd.RegisterFlagCompletionFunc("restart", completeRestartPolicies)
136136
_ = cmd.RegisterFlagCompletionFunc("security-opt", completeSecurityOpt)

cli/command/container/create.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ func newCreateCommand(dockerCLI command.Cli) *cobra.Command {
8888

8989
// TODO(thaJeztah): consider adding platform as "image create option" on containerOptions
9090
addPlatformFlag(flags, &options.platform)
91-
_ = cmd.RegisterFlagCompletionFunc("platform", completion.Platforms)
91+
_ = cmd.RegisterFlagCompletionFunc("platform", completion.Platforms())
9292

9393
flags.BoolVar(&options.untrusted, "disable-content-trust", !dockerCLI.ContentTrustEnabled(), "Skip image verification")
9494
copts = addFlags(flags)

cli/command/container/exec.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,8 @@ func newExecCommand(dockerCLI command.Cli) *cobra.Command {
7878
flags.StringVarP(&options.Workdir, "workdir", "w", "", "Working directory inside the container")
7979
flags.SetAnnotation("workdir", "version", []string{"1.35"})
8080

81-
_ = cmd.RegisterFlagCompletionFunc("env", completion.EnvVarNames)
82-
_ = cmd.RegisterFlagCompletionFunc("env-file", completion.FileNames)
81+
_ = cmd.RegisterFlagCompletionFunc("env", completion.EnvVarNames())
82+
_ = cmd.RegisterFlagCompletionFunc("env-file", completion.FileNames())
8383

8484
return cmd
8585
}

cli/command/context/import.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ func newImportCommand(dockerCLI command.Cli) *cobra.Command {
2121
return runImport(dockerCLI, args[0], args[1])
2222
},
2323
// TODO(thaJeztah): this should also include "-"
24-
ValidArgsFunction: completion.FileNames,
24+
ValidArgsFunction: completion.FileNames(),
2525
DisableFlagsInUseLine: true,
2626
}
2727
return cmd

cli/command/image/build.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ func newBuildCommand(dockerCLI command.Cli) *cobra.Command {
157157
flags.SetAnnotation("squash", "experimental", nil)
158158
flags.SetAnnotation("squash", "version", []string{"1.25"})
159159

160-
_ = cmd.RegisterFlagCompletionFunc("platform", completion.Platforms)
160+
_ = cmd.RegisterFlagCompletionFunc("platform", completion.Platforms())
161161

162162
return cmd
163163
}

cli/command/image/history.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ func newHistoryCommand(dockerCLI command.Cli) *cobra.Command {
5252
flags.StringVar(&opts.platform, "platform", "", `Show history for the given platform. Formatted as "os[/arch[/variant]]" (e.g., "linux/amd64")`)
5353
_ = flags.SetAnnotation("platform", "version", []string{"1.48"})
5454

55-
_ = cmd.RegisterFlagCompletionFunc("platform", completion.Platforms)
55+
_ = cmd.RegisterFlagCompletionFunc("platform", completion.Platforms())
5656
return cmd
5757
}
5858

cli/command/image/import.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ func newImportCommand(dockerCLI command.Cli) *cobra.Command {
4949
flags.VarP(&options.changes, "change", "c", "Apply Dockerfile instruction to the created image")
5050
flags.StringVarP(&options.message, "message", "m", "", "Set commit message for imported image")
5151
addPlatformFlag(flags, &options.platform)
52-
_ = cmd.RegisterFlagCompletionFunc("platform", completion.Platforms)
52+
_ = cmd.RegisterFlagCompletionFunc("platform", completion.Platforms())
5353

5454
return cmd
5555
}

cli/command/image/inspect.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ If the image or the server is not multi-platform capable, the command will error
5252
'os[/arch[/variant]]': Explicit platform (eg. linux/amd64)`)
5353
flags.SetAnnotation("platform", "version", []string{"1.49"})
5454

55-
_ = cmd.RegisterFlagCompletionFunc("platform", completion.Platforms)
55+
_ = cmd.RegisterFlagCompletionFunc("platform", completion.Platforms())
5656
return cmd
5757
}
5858

0 commit comments

Comments
 (0)