diff options
author | Jesse Duffield <jessedduffield@gmail.com> | 2021-10-31 22:29:43 +1100 |
---|---|---|
committer | Jesse Duffield <jessedduffield@gmail.com> | 2021-10-31 22:33:39 +1100 |
commit | 9989c96321685ac3493642fb8e1fa511896175e3 (patch) | |
tree | 1742d16e270373c0a6ffdffa792506fc80f08157 /pkg/utils/formatting.go | |
parent | f91892b8f1180f43c6b0cf18cc118d42f3648a1a (diff) |
better formatting
Diffstat (limited to 'pkg/utils/formatting.go')
-rw-r--r-- | pkg/utils/formatting.go | 53 |
1 files changed, 46 insertions, 7 deletions
diff --git a/pkg/utils/formatting.go b/pkg/utils/formatting.go index 55c04c85f..80717bfad 100644 --- a/pkg/utils/formatting.go +++ b/pkg/utils/formatting.go @@ -17,14 +17,48 @@ func WithPadding(str string, padding int) string { } func RenderDisplayStrings(displayStringsArr [][]string) string { + displayStringsArr = excludeBlankColumns(displayStringsArr) padWidths := getPadWidths(displayStringsArr) - paddedDisplayStrings := getPaddedDisplayStrings(displayStringsArr, padWidths) + output := getPaddedDisplayStrings(displayStringsArr, padWidths) - return strings.Join(paddedDisplayStrings, "\n") + return output } -func getPaddedDisplayStrings(stringArrays [][]string, padWidths []int) []string { - paddedDisplayStrings := make([]string, len(stringArrays)) +// NOTE: this mutates the input slice for the sake of performance +func excludeBlankColumns(displayStringsArr [][]string) [][]string { + if len(displayStringsArr) == 0 { + return displayStringsArr + } + + // if all rows share a blank column, we want to remove that column + toRemove := []int{} +outer: + for i := range displayStringsArr[0] { + for _, strings := range displayStringsArr { + if strings[i] != "" { + continue outer + } + } + toRemove = append(toRemove, i) + } + + if len(toRemove) == 0 { + return displayStringsArr + } + + // remove the columns + for i, strings := range displayStringsArr { + for j := len(toRemove) - 1; j >= 0; j-- { + strings = append(strings[:toRemove[j]], strings[toRemove[j]+1:]...) + } + displayStringsArr[i] = strings + } + + return displayStringsArr +} + +func getPaddedDisplayStrings(stringArrays [][]string, padWidths []int) string { + builder := strings.Builder{} for i, stringArray := range stringArrays { if len(stringArray) == 0 { continue @@ -33,14 +67,19 @@ func getPaddedDisplayStrings(stringArrays [][]string, padWidths []int) []string if len(stringArray)-1 < j { continue } - paddedDisplayStrings[i] += WithPadding(stringArray[j], padWidth) + " " + builder.WriteString(WithPadding(stringArray[j], padWidth)) + builder.WriteString(" ") } if len(stringArray)-1 < len(padWidths) { continue } - paddedDisplayStrings[i] += stringArray[len(padWidths)] + builder.WriteString(stringArray[len(padWidths)]) + + if i < len(stringArrays)-1 { + builder.WriteString("\n") + } } - return paddedDisplayStrings + return builder.String() } func getPadWidths(stringArrays [][]string) []int { |