forked from mirror/cobra
Handle linebreaks in custom completions. (#1162)
If a command/flag description contains a linebreak then the shell completion script will interpret this as new command/flag. To fix this we only use the first line from the description in the output. Signed-off-by: Paul Holzinger <paul.holzinger@web.de>
This commit is contained in:
parent
50258f15eb
commit
8a63648dd9
|
@ -132,6 +132,12 @@ func (c *Command) initCompleteCmd(args []string) {
|
||||||
comp = strings.Split(comp, "\t")[0]
|
comp = strings.Split(comp, "\t")[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Make sure we only write the first line to the output.
|
||||||
|
// This is needed if a description contains a linebreak.
|
||||||
|
// Otherwise the shell scripts will interpret the other lines as new flags
|
||||||
|
// and could therefore provide a wrong completion.
|
||||||
|
comp = strings.Split(comp, "\n")[0]
|
||||||
|
|
||||||
// Finally trim the completion. This is especially important to get rid
|
// Finally trim the completion. This is especially important to get rid
|
||||||
// of a trailing tab when there are no description following it.
|
// of a trailing tab when there are no description following it.
|
||||||
// For example, a sub-command without a description should not be completed
|
// For example, a sub-command without a description should not be completed
|
||||||
|
|
|
@ -561,7 +561,7 @@ func TestFlagNameCompletionInGoWithDesc(t *testing.T) {
|
||||||
}
|
}
|
||||||
rootCmd.AddCommand(childCmd)
|
rootCmd.AddCommand(childCmd)
|
||||||
|
|
||||||
rootCmd.Flags().IntP("first", "f", -1, "first flag")
|
rootCmd.Flags().IntP("first", "f", -1, "first flag\nlonger description for flag")
|
||||||
rootCmd.PersistentFlags().BoolP("second", "s", false, "second flag")
|
rootCmd.PersistentFlags().BoolP("second", "s", false, "second flag")
|
||||||
childCmd.Flags().String("subFlag", "", "sub flag")
|
childCmd.Flags().String("subFlag", "", "sub flag")
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue