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

View file

@ -240,6 +240,25 @@ func TestGenZshCompletion(t *testing.T) {
`--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 {