Properly escape help text

Closes #989

Authored-by: Cornelius Weig <https://github.com/corneliusweig>
Signed-off-by: Chmouel Boudjnah <chmouel@chmouel.com>
This commit is contained in:
Chmouel Boudjnah 2019-11-12 14:32:04 +01:00
parent 8d84e2e222
commit ee8ca02120
No known key found for this signature in database
GPG key ID: 8E00E7B02807E02D
2 changed files with 24 additions and 2 deletions

View file

@ -25,6 +25,7 @@ var (
"extractFlags": zshCompExtractFlag, "extractFlags": zshCompExtractFlag,
"genFlagEntryForZshArguments": zshCompGenFlagEntryForArguments, "genFlagEntryForZshArguments": zshCompGenFlagEntryForArguments,
"extractArgsCompletions": zshCompExtractArgumentCompletionHintsForRendering, "extractArgsCompletions": zshCompExtractArgumentCompletionHintsForRendering,
"escapeText": zshCompQuoteFlagDescription,
} }
zshCompletionText = ` zshCompletionText = `
{{/* should accept Command (that contains subcommands) as parameter */}} {{/* should accept Command (that contains subcommands) as parameter */}}
@ -41,7 +42,7 @@ function {{$cmdPath}} {
case $state in case $state in
cmnds) cmnds)
commands=({{range .Commands}}{{if not .Hidden}} commands=({{range .Commands}}{{if not .Hidden}}
"{{.Name}}:{{.Short}}"{{end}}{{end}} "{{.Name}}:{{.Short | escapeText}}"{{end}}{{end}}
) )
_describe "command" commands _describe "command" commands
;; ;;
@ -334,5 +335,7 @@ func zshCompFlagCouldBeSpecifiedMoreThenOnce(f *pflag.Flag) bool {
func zshCompQuoteFlagDescription(s string) string { func zshCompQuoteFlagDescription(s string) string {
return strings.NewReplacer("'", `'\''`, return strings.NewReplacer("'", `'\''`,
"[", `\[`, "[", `\[`,
"]", `\]`).Replace(s) "]", `\]`,
"$(", `\$(`,
).Replace(s)
} }

View file

@ -240,6 +240,25 @@ func TestGenZshCompletion(t *testing.T) {
`--ptest\[ptest]:filename:_files -g "-\(/\)"`, `--ptest\[ptest]:filename:_files -g "-\(/\)"`,
}, },
}, },
{
name: "escape text in subcommand description",
root: func() *Command {
r := &Command{
Use: "rootcmd",
Long: "Long rootcmd description",
}
d := &Command{
Use: "subcmd1",
Short: "$(echo foo)",
Run: emptyRun,
}
r.AddCommand(d)
return r
}(),
expectedExpressions: []string{
`\$\(echo foo\)`,
},
},
} }
for _, tc := range tcs { for _, tc := range tcs {