cmd/tailscale/cli/ffcomplete: omit and clean completion results

Updates #3793

Signed-off-by: Paul Scott <paul@tailscale.com>
ox/11854-3-sftp
Paul Scott 7 months ago committed by Paul Scott
parent fa1303d632
commit ba34943133

@ -193,12 +193,26 @@ walk:
} }
// Strip any descriptions if they were suppressed. // Strip any descriptions if they were suppressed.
clean := words[:0]
for _, w := range words {
if !descs { if !descs {
for i := range words { w, _, _ = strings.Cut(w, "\t")
words[i], _, _ = strings.Cut(words[i], "\t")
} }
w = cutAny(w, "\n\r")
if w == "" || w[0] == '\t' {
continue
}
clean = append(clean, w)
}
return clean, dir, nil
}
func cutAny(s, cutset string) string {
i := strings.IndexAny(s, cutset)
if i == -1 {
return s
} }
return words, dir, nil return s[:i]
} }
// splitFlagArgs separates a list of command-line arguments into arguments // splitFlagArgs separates a list of command-line arguments into arguments

@ -50,11 +50,17 @@ func TestComplete(t *testing.T) {
cmd := &ffcli.Command{ cmd := &ffcli.Command{
Name: "ping", Name: "ping",
FlagSet: newFlagSet("prog ping", flag.ContinueOnError, func(fs *flag.FlagSet) { FlagSet: newFlagSet("prog ping", flag.ContinueOnError, func(fs *flag.FlagSet) {
fs.String("until", "", "when pinging should end") fs.String("until", "", "when pinging should end\nline break!")
ffcomplete.Flag(fs, "until", ffcomplete.Fixed("forever", "direct")) ffcomplete.Flag(fs, "until", ffcomplete.Fixed("forever", "direct"))
}), }),
} }
ffcomplete.Args(cmd, ffcomplete.Fixed("jupiter", "neptune", "venus")) ffcomplete.Args(cmd, ffcomplete.Fixed(
"jupiter\t5th planet\nand largets",
"neptune\t8th planet",
"venus\t2nd planet",
"\tonly description",
"\nonly line break",
))
return cmd return cmd
}(), }(),
}, },
@ -170,9 +176,9 @@ func TestComplete(t *testing.T) {
showDescs: true, showDescs: true,
wantComp: []string{ wantComp: []string{
"--until\twhen pinging should end", "--until\twhen pinging should end",
"jupiter", "jupiter\t5th planet",
"neptune", "neptune\t8th planet",
"venus", "venus\t2nd planet",
}, },
wantDir: ffcomplete.ShellCompDirectiveNoFileComp, wantDir: ffcomplete.ShellCompDirectiveNoFileComp,
}, },

Loading…
Cancel
Save