Add indent helper function

This commit is contained in:
Mislav Marohnić 2020-07-16 16:24:25 +02:00
parent 4e15982046
commit 065496781e
2 changed files with 56 additions and 7 deletions

View file

@ -3,6 +3,7 @@ package command
import (
"bytes"
"fmt"
"regexp"
"strings"
"github.com/cli/cli/utils"
@ -27,9 +28,7 @@ func rootUsageFunc(command *cobra.Command) error {
flagUsages := command.LocalFlags().FlagUsages()
if flagUsages != "" {
command.Println("\n\nFlags:")
for _, l := range strings.Split(strings.Trim(dedent(flagUsages), "\n\r"), "\n") {
command.Println(" " + l)
}
command.Print(indent(dedent(flagUsages), " "))
}
return nil
}
@ -144,10 +143,7 @@ Read the manual at https://cli.github.com/manual`})
if e.Title != "" {
// If there is a title, add indentation to each line in the body
fmt.Fprintln(out, utils.Bold(e.Title))
for _, l := range strings.Split(strings.Trim(e.Body, "\n\r"), "\n") {
fmt.Fprintln(out, " "+l)
}
fmt.Fprint(out, indent(e.Body, " "))
} else {
// If there is no title print the body as is
fmt.Fprintln(out, e.Body)
@ -162,6 +158,15 @@ func rpad(s string, padding int) string {
return fmt.Sprintf(template, s)
}
var lineRE = regexp.MustCompile(`(?m)^`)
func indent(s, indent string) string {
if len(strings.TrimSpace(s)) == 0 {
return s
}
return lineRE.ReplaceAllLiteralString(s, indent)
}
func dedent(s string) string {
lines := strings.Split(s, "\n")
minIndent := -1

View file

@ -44,3 +44,47 @@ func TestDedent(t *testing.T) {
}
}
}
func Test_indent(t *testing.T) {
type args struct {
s string
indent string
}
tests := []struct {
name string
args args
want string
}{
{
name: "empty",
args: args{
s: "",
indent: "--",
},
want: "",
},
{
name: "blank",
args: args{
s: "\n",
indent: "--",
},
want: "\n",
},
{
name: "indent",
args: args{
s: "one\ntwo\nthree",
indent: "--",
},
want: "--one\n--two\n--three",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := indent(tt.args.s, tt.args.indent); got != tt.want {
t.Errorf("indent() = %q, want %q", got, tt.want)
}
})
}
}