From fcac74b4b06ac679e02e7976b79dcdad1e593810 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Wed, 4 Mar 2026 11:41:35 +0200 Subject: chore: fix code-quality and 100-go-mistakes findings Addresses Taskwarrior findings for golangci-lint v2 config, deprecated APIs, unchecked test errors, dead code, and staticcheck cleanups. Task UUIDs: 461c529c-5de3-4ceb-a761-5534f9f4342e, 8696d39e-d911-4ffe-8708-af1652a084b7, 0f63064b-be12-4fd6-a412-2904f94eb3dd, c051e84f-0e7b-48bc-8f16-e65133636ceb, 076cf172-e5fb-4f55-a1d6-1bce71e2f131, 1ed5b895-da61-4114-8321-cb129b24d6e1, 659311db-10af-4ec5-a08a-92240fa23489 --- .golangci.yml | 6 ++---- internal/cli/timer.go | 3 ++- internal/cli/tui.go | 3 ++- internal/timer/operations_test.go | 30 +++++++++++++++++++++++------- internal/tui/entries.go | 2 +- internal/tui/tui_test.go | 3 +-- internal/worktime/report.go | 15 +-------------- 7 files changed, 32 insertions(+), 30 deletions(-) diff --git a/.golangci.yml b/.golangci.yml index 9aa3b5c..6359905 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -1,14 +1,12 @@ -run: - timeout: 5m - +version: "2" linters: + default: none enable: - errcheck - govet - ineffassign - staticcheck - unused - issues: max-issues-per-linter: 0 max-same-issues: 0 diff --git a/internal/cli/timer.go b/internal/cli/timer.go index e9889c4..222b7df 100644 --- a/internal/cli/timer.go +++ b/internal/cli/timer.go @@ -195,7 +195,8 @@ func newTimerLiveCmd() *cobra.Command { return err } program := tea.NewProgram(model) - return program.Start() + _, err = program.Run() + return err }, } diff --git a/internal/cli/tui.go b/internal/cli/tui.go index 474ffc2..e3b6426 100644 --- a/internal/cli/tui.go +++ b/internal/cli/tui.go @@ -18,7 +18,8 @@ func newTUICmd() *cobra.Command { return err } program := tea.NewProgram(model) - return program.Start() + _, err = program.Run() + return err }, } diff --git a/internal/timer/operations_test.go b/internal/timer/operations_test.go index c0480d7..68764c4 100644 --- a/internal/timer/operations_test.go +++ b/internal/timer/operations_test.go @@ -241,11 +241,16 @@ func TestTrackTime(t *testing.T) { tracker := &mockTracker{} // Start timer and let it run for a bit - state, _ := LoadState() + state, err := LoadState() + if err != nil { + t.Fatalf("LoadState() error = %v", err) + } state.Running = true state.StartTime = time.Now().Add(-5 * time.Minute) state.ElapsedTime = 0 - state.Save() + if err := state.Save(); err != nil { + t.Fatalf("state.Save() error = %v", err) + } msg, err := TrackTimeWithTracker("test description", tracker) if err != nil { @@ -261,7 +266,10 @@ func TestTrackTime(t *testing.T) { t.Fatalf("tracker minutes = %d, want around 5", tracker.minutes) } - state, _ = LoadState() + state, err = LoadState() + if err != nil { + t.Fatalf("LoadState() error = %v", err) + } if state.Running || state.ElapsedTime != 0 { t.Fatalf("state after tracking = %+v, want reset stopped state", state) } @@ -272,17 +280,25 @@ func TestTrackTime(t *testing.T) { tracker := &mockTracker{err: errTestTracker} // Set up a stopped timer with some elapsed time - state, _ := LoadState() + state, err := LoadState() + if err != nil { + t.Fatalf("LoadState() error = %v", err) + } state.Running = false state.ElapsedTime = 10 * time.Minute - state.Save() + if err := state.Save(); err != nil { + t.Fatalf("state.Save() error = %v", err) + } - _, err := TrackTimeWithTracker("another test", tracker) + _, err = TrackTimeWithTracker("another test", tracker) if err == nil { t.Fatal("TrackTimeWithTracker() error = nil, want tracker error") } - state, _ = LoadState() + state, err = LoadState() + if err != nil { + t.Fatalf("LoadState() error = %v", err) + } if state.Running { t.Fatal("state.Running = true, want false after failed tracking") } diff --git a/internal/tui/entries.go b/internal/tui/entries.go index 2d35708..e0e76bf 100644 --- a/internal/tui/entries.go +++ b/internal/tui/entries.go @@ -1064,7 +1064,7 @@ func (m *EntriesModel) renderTimelineTable(styles Styles) string { for colIdx := range row { cellStyles[colIdx] = styles.TableCell if idx == m.cursor { - cellStyles[colIdx] = styles.TableCell.Copy().Bold(true) + cellStyles[colIdx] = styles.TableCell.Bold(true) if entriesColumn(colIdx) == m.selectedColumn { cellStyles[colIdx] = styles.TableSelected } diff --git a/internal/tui/tui_test.go b/internal/tui/tui_test.go index eb64f14..e41317d 100644 --- a/internal/tui/tui_test.go +++ b/internal/tui/tui_test.go @@ -76,8 +76,7 @@ func TestQuitKeys(t *testing.T) { modelAny, _ = model.Update(tea.KeyMsg{Type: tea.KeyRunes, Runes: []rune{'Z'}}) model = modelAny.(*Model) - modelAny, cmd = model.Update(tea.KeyMsg{Type: tea.KeyRunes, Runes: []rune{'Q'}}) - model = modelAny.(*Model) + _, cmd = model.Update(tea.KeyMsg{Type: tea.KeyRunes, Runes: []rune{'Q'}}) if cmd == nil { t.Fatal("quit cmd is nil for ZQ") } diff --git a/internal/worktime/report.go b/internal/worktime/report.go index 11890a9..c289b55 100644 --- a/internal/worktime/report.go +++ b/internal/worktime/report.go @@ -3,7 +3,6 @@ package worktime import ( "fmt" "math" - "sort" "strings" "time" @@ -289,7 +288,7 @@ func formatData(values map[string]int64, bufferSeconds int64, epoch int64, verbo } if verbose && epoch > 0 { - out.WriteString(fmt.Sprintf(" epoch:%d(%s)", epoch, time.Unix(epoch, 0))) + _, _ = fmt.Fprintf(&out, " epoch:%d(%s)", epoch, time.Unix(epoch, 0)) } return out.String() @@ -411,15 +410,3 @@ func newWeekAccumulator() weekAccumulator { values: map[string]int64{}, } } - -func sortedWeekReports(reports []WeekReport) { - sort.SliceStable(reports, func(i, j int) bool { - if reports[i].WeekLabel != reports[j].WeekLabel { - return reports[i].WeekLabel < reports[j].WeekLabel - } - if len(reports[i].Days) == 0 || len(reports[j].Days) == 0 { - return len(reports[i].Days) < len(reports[j].Days) - } - return reports[i].Days[0].Epoch < reports[j].Days[0].Epoch - }) -} -- cgit v1.2.3