diff --git a/completions.go b/completions.go index a1752f76..db62808e 100644 --- a/completions.go +++ b/completions.go @@ -375,7 +375,7 @@ func (c *Command) getCompletions(args []string) (*Command, []Completion, ShellCo // Error while attempting to parse flags if flagErr != nil { // If error type is flagCompError and we don't want flagCompletion we should ignore the error - if _, ok := flagErr.(*flagCompError); !(ok && !flagCompletion) { + if _, ok := flagErr.(*flagCompError); !ok || flagCompletion { return finalCmd, []Completion{}, ShellCompDirectiveDefault, flagErr } } @@ -773,7 +773,7 @@ See each sub-command's help for details on how to use the generated script. // shell completion for it (prog __complete completion '') subCmd, cmdArgs, err := c.Find(args) if err != nil || subCmd.Name() != compCmdName && - !(subCmd.Name() == ShellCompRequestCmd && len(cmdArgs) > 1 && cmdArgs[0] == compCmdName) { + (subCmd.Name() != ShellCompRequestCmd || len(cmdArgs) <= 1 || cmdArgs[0] != compCmdName) { // The completion command is not being called or being completed so we remove it. c.RemoveCommand(completionCmd) return diff --git a/completions_test.go b/completions_test.go index 71c0d1ff..1f6d5c28 100644 --- a/completions_test.go +++ b/completions_test.go @@ -2899,7 +2899,7 @@ func TestCompletionFuncCompatibility(t *testing.T) { var userComp func(cmd *Command, args []string, toComplete string) ([]string, ShellCompDirective) // check against new signature - var _ CompletionFunc = userComp + var _ CompletionFunc = userComp //nolint:staticcheck // LHS type is needed for this use case // check Command accepts cmd := Command{ @@ -2913,8 +2913,7 @@ func TestCompletionFuncCompatibility(t *testing.T) { var userComp func(cmd *Command, args []string, toComplete string) ([]Completion, ShellCompDirective) // check against new signature - var _ CompletionFunc = userComp - + var _ CompletionFunc = userComp //nolint:staticcheck // LHS type is needed for this use case // check Command accepts cmd := Command{ ValidArgsFunction: userComp, @@ -2927,8 +2926,8 @@ func TestCompletionFuncCompatibility(t *testing.T) { var userComp CompletionFunc // check helper against old signature - var _ func(cmd *Command, args []string, toComplete string) ([]string, ShellCompDirective) = userComp - var _ func(cmd *Command, args []string, toComplete string) ([]Completion, ShellCompDirective) = userComp + var _ func(cmd *Command, args []string, toComplete string) ([]string, ShellCompDirective) = userComp //nolint:staticcheck // LHS type is needed for this use case + var _ func(cmd *Command, args []string, toComplete string) ([]Completion, ShellCompDirective) = userComp //nolint:staticcheck // LHS type is needed for this use case // check Command accepts cmd := Command{ @@ -2967,7 +2966,7 @@ func TestCompletionFuncCompatibility(t *testing.T) { var userComp UserCompletionTypeAliasHelper // Here we are validating the existing type validates the CompletionFunc type - var _ CompletionFunc = userComp + var _ CompletionFunc = userComp //nolint:staticcheck // LHS type is needed for this use case cmd := Command{ ValidArgsFunction: userComp, diff --git a/doc/man_docs.go b/doc/man_docs.go index 2138f248..560bc20c 100644 --- a/doc/man_docs.go +++ b/doc/man_docs.go @@ -212,7 +212,7 @@ func genMan(cmd *cobra.Command, header *GenManHeader) []byte { manPrintOptions(buf, cmd) if len(cmd.Example) > 0 { buf.WriteString("# EXAMPLE\n") - buf.WriteString(fmt.Sprintf("```\n%s\n```\n", cmd.Example)) + fmt.Fprintf(buf, "```\n%s\n```\n", cmd.Example) } if hasSeeAlso(cmd) { buf.WriteString("# SEE ALSO\n") @@ -240,7 +240,7 @@ func genMan(cmd *cobra.Command, header *GenManHeader) []byte { buf.WriteString(strings.Join(seealsos, ", ") + "\n") } if !cmd.DisableAutoGenTag { - buf.WriteString(fmt.Sprintf("# HISTORY\n%s Auto generated by spf13/cobra\n", header.Date.Format("2-Jan-2006"))) + fmt.Fprintf(buf, "# HISTORY\n%s Auto generated by spf13/cobra\n", header.Date.Format("2-Jan-2006")) } return buf.Bytes() } diff --git a/doc/md_docs.go b/doc/md_docs.go index 12592223..6eae7ccf 100644 --- a/doc/md_docs.go +++ b/doc/md_docs.go @@ -69,12 +69,12 @@ func GenMarkdownCustom(cmd *cobra.Command, w io.Writer, linkHandler func(string) } if cmd.Runnable() { - buf.WriteString(fmt.Sprintf("```\n%s\n```\n\n", cmd.UseLine())) + fmt.Fprintf(buf, "```\n%s\n```\n\n", cmd.UseLine()) } if len(cmd.Example) > 0 { buf.WriteString("### Examples\n\n") - buf.WriteString(fmt.Sprintf("```\n%s\n```\n\n", cmd.Example)) + fmt.Fprintf(buf, "```\n%s\n```\n\n", cmd.Example) } if err := printOptions(buf, cmd, name); err != nil { @@ -87,7 +87,7 @@ func GenMarkdownCustom(cmd *cobra.Command, w io.Writer, linkHandler func(string) pname := parent.CommandPath() link := pname + markdownExtension link = strings.ReplaceAll(link, " ", "_") - buf.WriteString(fmt.Sprintf("* [%s](%s)\t - %s\n", pname, linkHandler(link), parent.Short)) + fmt.Fprintf(buf, "* [%s](%s)\t - %s\n", pname, linkHandler(link), parent.Short) cmd.VisitParents(func(c *cobra.Command) { if c.DisableAutoGenTag { cmd.DisableAutoGenTag = c.DisableAutoGenTag @@ -105,7 +105,7 @@ func GenMarkdownCustom(cmd *cobra.Command, w io.Writer, linkHandler func(string) cname := name + " " + child.Name() link := cname + markdownExtension link = strings.ReplaceAll(link, " ", "_") - buf.WriteString(fmt.Sprintf("* [%s](%s)\t - %s\n", cname, linkHandler(link), child.Short)) + fmt.Fprintf(buf, "* [%s](%s)\t - %s\n", cname, linkHandler(link), child.Short) } buf.WriteString("\n") } diff --git a/doc/rest_docs.go b/doc/rest_docs.go index c33acc2b..4901ca98 100644 --- a/doc/rest_docs.go +++ b/doc/rest_docs.go @@ -82,13 +82,13 @@ func GenReSTCustom(cmd *cobra.Command, w io.Writer, linkHandler func(string, str buf.WriteString("\n" + long + "\n\n") if cmd.Runnable() { - buf.WriteString(fmt.Sprintf("::\n\n %s\n\n", cmd.UseLine())) + fmt.Fprintf(buf, "::\n\n %s\n\n", cmd.UseLine()) } if len(cmd.Example) > 0 { buf.WriteString("Examples\n") buf.WriteString("~~~~~~~~\n\n") - buf.WriteString(fmt.Sprintf("::\n\n%s\n\n", indentString(cmd.Example, " "))) + fmt.Fprintf(buf, "::\n\n%s\n\n", indentString(cmd.Example, " ")) } if err := printOptionsReST(buf, cmd, name); err != nil { @@ -101,7 +101,7 @@ func GenReSTCustom(cmd *cobra.Command, w io.Writer, linkHandler func(string, str parent := cmd.Parent() pname := parent.CommandPath() ref = strings.ReplaceAll(pname, " ", "_") - buf.WriteString(fmt.Sprintf("* %s \t - %s\n", linkHandler(pname, ref), parent.Short)) + fmt.Fprintf(buf, "* %s \t - %s\n", linkHandler(pname, ref), parent.Short) cmd.VisitParents(func(c *cobra.Command) { if c.DisableAutoGenTag { cmd.DisableAutoGenTag = c.DisableAutoGenTag @@ -118,7 +118,7 @@ func GenReSTCustom(cmd *cobra.Command, w io.Writer, linkHandler func(string, str } cname := name + " " + child.Name() ref = strings.ReplaceAll(cname, " ", "_") - buf.WriteString(fmt.Sprintf("* %s \t - %s\n", linkHandler(cname, ref), child.Short)) + fmt.Fprintf(buf, "* %s \t - %s\n", linkHandler(cname, ref), child.Short) } buf.WriteString("\n") } diff --git a/doc/yaml_docs.go b/doc/yaml_docs.go index 2b26d6ec..37197170 100644 --- a/doc/yaml_docs.go +++ b/doc/yaml_docs.go @@ -153,7 +153,7 @@ func genFlagResult(flags *pflag.FlagSet) []cmdOption { // Todo, when we mark a shorthand is deprecated, but specify an empty message. // The flag.ShorthandDeprecated is empty as the shorthand is deprecated. // Using len(flag.ShorthandDeprecated) > 0 can't handle this, others are ok. - if !(len(flag.ShorthandDeprecated) > 0) && len(flag.Shorthand) > 0 { + if len(flag.ShorthandDeprecated) == 0 && len(flag.Shorthand) > 0 { opt := cmdOption{ flag.Name, flag.Shorthand,