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 29, 2019
1 parent fa6797b commit 7ef02a3
Show file tree
Hide file tree
Showing 6 changed files with 15 additions and 9 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",
},
StringFlag{Name: "flag, fl, f"},
Expand Down
10 changes: 8 additions & 2 deletions fish.go
Expand Up @@ -82,7 +82,8 @@ func (a *App) prepareFishCommands(
))

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 @@ -149,7 +150,8 @@ func (a *App) prepareFishFlags(
}

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 All @@ -169,3 +171,7 @@ func (a *App) fishSubcommandHelper(allCommands []string) string {
return fishHelper

}

func escapeSingleQuotes(input string) string {
return strings.Replace(input, `'`, `\'`, -1)
}
6 changes: 3 additions & 3 deletions testdata/expected-doc-full.man
@@ -1,5 +1,5 @@
.nh
.TH greet(8)
.TH greet(8)

.SH Harrison

Expand Down 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 Expand Up @@ -77,4 +77,4 @@ another usage test
.PP
retrieve generic information

.SH some\-command
.SH some\-command
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 -f -n '__fish_greet_no_subcommand' -l socket -s s -r -d 'some usage text'
complete -c greet -f -n '__fish_greet_no_subcommand' -l socket -s s -r -d 'some \'usage\' text'
complete -c greet -f -n '__fish_greet_no_subcommand' -l flag -s fl -s f -r
complete -c greet -f -n '__fish_greet_no_subcommand' -l another-flag -s b -d 'another usage text'
complete -c greet -f -n '__fish_greet_no_subcommand' -l help -s h -d 'show help'
Expand Down

0 comments on commit 7ef02a3

Please sign in to comment.