print issue list in cli better

This commit is contained in:
Robin Olsen
2026-03-11 15:31:47 +01:00
parent 85e0bf698d
commit dc48ddf0e0

View File

@@ -3,7 +3,9 @@ package models
import ( import (
"fmt" "fmt"
"os" "os"
"strings"
"text/tabwriter" "text/tabwriter"
"unicode"
"charm.land/lipgloss/v2" "charm.land/lipgloss/v2"
"github.com/muesli/reflow/truncate" "github.com/muesli/reflow/truncate"
@@ -33,11 +35,11 @@ type (
// Status constants // Status constants
const ( const (
StatusOpen = beads.StatusOpen StatusOpen = beads.StatusOpen
StatusInProgress = beads.StatusInProgress StatusInProgress = beads.StatusInProgress
StatusBlocked = beads.StatusBlocked StatusBlocked = beads.StatusBlocked
StatusDeferred = beads.StatusDeferred StatusDeferred = beads.StatusDeferred
StatusClosed = beads.StatusClosed StatusClosed = beads.StatusClosed
StatusReadyToSprint Status = "ready_to_sprint" StatusReadyToSprint Status = "ready_to_sprint"
) )
@@ -114,20 +116,39 @@ func IssuesPtrToIssues(issuePtr []*Issue) []Issue {
return issues return issues
} }
func sanitizeCell(s string) string {
s = strings.Map(func(r rune) rune {
switch r {
case '\n', '\r', '\t':
return ' '
default:
return r
}
}, s)
return strings.Join(strings.FieldsFunc(s, unicode.IsSpace), " ")
}
func FormatIssueRow(issue Issue) string { func FormatIssueRow(issue Issue) string {
id := truncate.String(sanitizeCell(issue.ID), 10)
title := truncate.StringWithTail(sanitizeCell(issue.Title), 35, "...")
description := truncate.StringWithTail(sanitizeCell(issue.Description), 40, "...")
status := sanitizeCell(string(issue.Status))
issueType := sanitizeCell(string(issue.IssueType))
return fmt.Sprintf( return fmt.Sprintf(
"%s\t%s\t%s\t%s\t%s\t%d", "%s\t%s\t%s\t%s\t%s\t%d",
truncate.String(issue.ID, 10), id,
truncate.StringWithTail(issue.Title, 25, "..."), title,
truncate.StringWithTail(issue.Description, 40, "..."), description,
issue.Status, status,
issue.IssueType, issueType,
issue.Priority, issue.Priority,
) )
} }
func PrintIssues(issues []Issue) { func PrintIssues(issues []Issue) {
w := tabwriter.NewWriter(os.Stdout, 8, 10, 5, ' ', 0) w := tabwriter.NewWriter(os.Stdout, 0, 0, 2, ' ', 0)
fmt.Fprintln(w, "ID\tTITLE\tDESCRIPTION\tSTATUS\tTYPE\tPRIORITY") fmt.Fprintln(w, "ID\tTITLE\tDESCRIPTION\tSTATUS\tTYPE\tPRIORITY")
@@ -135,5 +156,5 @@ func PrintIssues(issues []Issue) {
fmt.Fprintln(w, FormatIssueRow(issue)) fmt.Fprintln(w, FormatIssueRow(issue))
} }
w.Flush() _ = w.Flush()
} }