Skip to content

Commit

Permalink
Escape single quotes in fish shell completion
Browse files Browse the repository at this point in the history
Single quotes can break the generated fish shell completion and should
be escaped correctly.

Signed-off-by: Sascha Grunert <sgrunert@suse.com>
  • Loading branch information
saschagrunert committed Aug 30, 2019
1 parent 38a6c56 commit 4bbff84
Show file tree
Hide file tree
Showing 6 changed files with 13 additions and 7 deletions.
2 changes: 1 addition & 1 deletion docs_test.go
Expand Up @@ -11,7 +11,7 @@ func testApp() *App {
app.Flags = []Flag{
StringFlag{
Name: "socket, s",
Usage: "some usage text",
Usage: "some 'usage' text",
Value: "value",
TakesFile: true,
},
Expand Down
10 changes: 8 additions & 2 deletions fish.go
Expand Up @@ -78,7 +78,8 @@ func (a *App) prepareFishCommands(commands []Command, allCommands *[]string, pre
))

if command.Usage != "" {
completion.WriteString(fmt.Sprintf(" -d '%s'", command.Usage))
completion.WriteString(fmt.Sprintf(" -d '%s'",
escapeSingleQuotes(command.Usage)))
}

if !command.HideHelp {
Expand Down Expand Up @@ -144,7 +145,8 @@ func (a *App) prepareFishFlags(flags []Flag, previousCommands []string) []string
}

if flag.GetUsage() != "" {
completion.WriteString(fmt.Sprintf(" -d '%s'", flag.GetUsage()))
completion.WriteString(fmt.Sprintf(" -d '%s'",
escapeSingleQuotes(flag.GetUsage())))
}

completions = append(completions, completion.String())
Expand Down Expand Up @@ -182,3 +184,7 @@ func (a *App) fishSubcommandHelper(allCommands []string) string {
return fishHelper

}

func escapeSingleQuotes(input string) string {
return strings.Replace(input, `'`, `\'`, -1)
}
2 changes: 1 addition & 1 deletion testdata/expected-doc-full.man
Expand Up @@ -49,7 +49,7 @@ greet [GLOBAL OPTIONS] command [COMMAND OPTIONS] [ARGUMENTS...]
\fB\-\-flag, \-\-fl, \-f\fP="":

.PP
\fB\-\-socket, \-s\fP="": some usage text (default: value)
\fB\-\-socket, \-s\fP="": some 'usage' text (default: value)


.SH COMMANDS
Expand Down
2 changes: 1 addition & 1 deletion testdata/expected-doc-full.md
Expand Up @@ -32,7 +32,7 @@ greet [GLOBAL OPTIONS] command [COMMAND OPTIONS] [ARGUMENTS...]

**--flag, --fl, -f**="":

**--socket, -s**="": some usage text (default: value)
**--socket, -s**="": some 'usage' text (default: value)


# COMMANDS
Expand Down
2 changes: 1 addition & 1 deletion testdata/expected-doc-no-commands.md
Expand Up @@ -32,5 +32,5 @@ greet [GLOBAL OPTIONS] command [COMMAND OPTIONS] [ARGUMENTS...]

**--flag, --fl, -f**="":

**--socket, -s**="": some usage text (default: value)
**--socket, -s**="": some 'usage' text (default: value)

2 changes: 1 addition & 1 deletion testdata/expected-fish-full.fish
Expand Up @@ -9,7 +9,7 @@ function __fish_greet_no_subcommand --description 'Test if there has been any su
return 0
end

complete -c greet -n '__fish_greet_no_subcommand' -l socket -s s -r -d 'some usage text'
complete -c greet -n '__fish_greet_no_subcommand' -l socket -s s -r -d 'some \'usage\' text'
complete -c greet -n '__fish_greet_no_subcommand' -f -l flag -s fl -s f -r
complete -c greet -n '__fish_greet_no_subcommand' -f -l another-flag -s b -d 'another usage text'
complete -c greet -n '__fish_greet_no_subcommand' -f -l help -s h -d 'show help'
Expand Down

0 comments on commit 4bbff84

Please sign in to comment.