diff --git a/api/queries_issue.go b/api/queries_issue.go index 690180feb..08e0cf1d9 100644 --- a/api/queries_issue.go +++ b/api/queries_issue.go @@ -78,7 +78,7 @@ const fragments = ` url state updatedAt - labels(first: 3) { + labels(first: 100) { nodes { name } diff --git a/pkg/cmd/issue/shared/display.go b/pkg/cmd/issue/shared/display.go index 2e88eea6e..ff9b83e1e 100644 --- a/pkg/cmd/issue/shared/display.go +++ b/pkg/cmd/issue/shared/display.go @@ -33,7 +33,7 @@ func PrintIssues(io *iostreams.IOStreams, prefix string, totalCount int, issues table.AddField(issue.State, nil, nil) } table.AddField(text.ReplaceExcessiveWhitespace(issue.Title), nil, nil) - table.AddField(labels, nil, cs.Gray) + table.AddField(labels, truncateLabels, cs.Gray) if table.IsTTY() { table.AddField(utils.FuzzyAgo(ago), nil, cs.Gray) } else { @@ -48,6 +48,14 @@ func PrintIssues(io *iostreams.IOStreams, prefix string, totalCount int, issues } } +func truncateLabels(w int, t string) string { + if len(t) < 2 { + return t + } + truncated := text.Truncate(w-2, t[1:len(t)-1]) + return fmt.Sprintf("(%s)", truncated) +} + func IssueLabelList(issue api.Issue) string { if len(issue.Labels.Nodes) == 0 { return "" @@ -58,9 +66,5 @@ func IssueLabelList(issue api.Issue) string { labelNames = append(labelNames, label.Name) } - list := strings.Join(labelNames, ", ") - if issue.Labels.TotalCount > len(issue.Labels.Nodes) { - list += ", …" - } - return list + return strings.Join(labelNames, ", ") } diff --git a/pkg/cmd/issue/shared/display_test.go b/pkg/cmd/issue/shared/display_test.go new file mode 100644 index 000000000..d6e97f7e8 --- /dev/null +++ b/pkg/cmd/issue/shared/display_test.go @@ -0,0 +1,15 @@ +package shared + +import "testing" + +func Test_truncateLabels(t *testing.T) { + got := truncateLabels(12, "(one, two, three)") + expected := "(one, tw...)" + if got != expected { + t.Errorf("expected %q, got %q", expected, got) + } + + if truncateLabels(10, "") != "" { + t.Error("blank value error") + } +}