diff --git a/command_setup.go b/command_setup.go index 060b9ba9ba..d74c45aaa9 100644 --- a/command_setup.go +++ b/command_setup.go @@ -89,7 +89,7 @@ func (cmd *Command) setupDefaults(osArgs []string) { } if isRoot && cmd.EnableShellCompletion { - completionCommand := buildCompletionCommand(cmd.Name) + completionCommand := buildCompletionCommand(cmd) if cmd.ShellCompletionCommandName != "" { tracef( diff --git a/completion.go b/completion.go index 789c9d0a7a..f6f8194d64 100644 --- a/completion.go +++ b/completion.go @@ -14,42 +14,42 @@ const ( completionFlag = "--generate-shell-completion" ) -type renderCompletion func(cmd *Command, appName string) (string, error) +type renderCompletion func(cmd *Command) (string, error) var ( //go:embed autocomplete autoCompleteFS embed.FS shellCompletions = map[string]renderCompletion{ - "bash": func(c *Command, appName string) (string, error) { + "bash": func(c *Command) (string, error) { b, err := autoCompleteFS.ReadFile("autocomplete/bash_autocomplete") - return fmt.Sprintf(string(b), appName), err + return fmt.Sprintf(string(b), c.Name), err }, - "zsh": func(c *Command, appName string) (string, error) { + "zsh": func(c *Command) (string, error) { b, err := autoCompleteFS.ReadFile("autocomplete/zsh_autocomplete") - return fmt.Sprintf(string(b), appName), err + return fmt.Sprintf(string(b), c.Name), err }, - "fish": func(c *Command, appName string) (string, error) { - return c.Root().ToFishCompletion() + "fish": func(c *Command) (string, error) { + return c.ToFishCompletion() }, - "pwsh": func(c *Command, appName string) (string, error) { + "pwsh": func(c *Command) (string, error) { b, err := autoCompleteFS.ReadFile("autocomplete/powershell_autocomplete.ps1") return string(b), err }, } ) -func buildCompletionCommand(appName string) *Command { +func buildCompletionCommand(rootCmd *Command) *Command { return &Command{ Name: completionCommandName, Hidden: true, Action: func(ctx context.Context, cmd *Command) error { - return printShellCompletion(ctx, cmd, appName) + return printShellCompletion(ctx, cmd, rootCmd) }, } } -func printShellCompletion(_ context.Context, cmd *Command, appName string) error { +func printShellCompletion(_ context.Context, cmd *Command, rootCmd *Command) error { var shells []string for k := range shellCompletions { shells = append(shells, k) @@ -67,7 +67,7 @@ func printShellCompletion(_ context.Context, cmd *Command, appName string) error return Exit(fmt.Sprintf("unknown shell %s, available shells are %+v", s, shells), 1) } - completionScript, err := renderCompletion(cmd, appName) + completionScript, err := renderCompletion(rootCmd) if err != nil { return Exit(err, 1) } diff --git a/completion_test.go b/completion_test.go index 0323764e59..d54df9cfe2 100644 --- a/completion_test.go +++ b/completion_test.go @@ -202,7 +202,7 @@ func TestCompletionInvalidShell(t *testing.T) { assert.ErrorContains(t, err, "unknown shell junky-sheell") enableError := true - shellCompletions[unknownShellName] = func(c *Command, appName string) (string, error) { + shellCompletions[unknownShellName] = func(c *Command) (string, error) { if enableError { return "", fmt.Errorf("cant do completion") }