fix: linter compliance and code quality improvements across codebase
Address golangci-lint findings and improve error handling throughout:
Package doc comments:
- Add canonical "// Package X ..." comments to source, model, config,
pipeline, cli, store, and main packages for godoc compliance.
Security & correctness:
- Fix directory permissions 0o755 -> 0o750 in store/cache.go Open()
(gosec G301: restrict group write on cache directory)
- Fix config.Save() to check encoder error before closing file, preventing
silent data loss on encode failure
- Add //nolint:gosec annotations with justifications on intentional
patterns (constructed file paths, manual bounds checking, config fields)
- Add //nolint:nilerr on intentional error-swallowing in scanner WalkDir
- Add //nolint:revive on stuttering type names (ModelStats, ModelUsage)
that would break too many call sites to rename
Performance (perfsprint):
- Replace fmt.Sprintf("%d", n) with strconv.FormatInt(n, 10) in format.go
FormatTokens() and FormatNumber() hot paths
- Clean up redundant fmt.Sprintf patterns in FormatCost and FormatDelta
Code cleanup:
- Convert if-else chain to switch in parser.go skipJSONString() for clarity
- Remove unused indexedResult struct from pipeline/loader.go
- Add deferred cache.Close() in pipeline/bench_test.go to prevent leaks
- Add deferred cache.Close() in cmd/root.go data loading path
- Fix doc comment alignment in scanner.go decodeProjectName
- Remove trailing blank line in cmd/costs.go
- Fix duplicate "/day" suffix in cmd/summary.go cost-per-day formatting
- Rename shadowed variable 'max' -> 'maxVal' in cli/render.go Sparkline
This commit is contained in:
@@ -161,4 +161,3 @@ func shortModel(name string) string {
|
||||
}
|
||||
return name
|
||||
}
|
||||
|
||||
|
||||
@@ -76,7 +76,7 @@ func loadData() (*pipeline.LoadResult, error) {
|
||||
fmt.Fprintf(os.Stderr, " Cache unavailable, doing full parse\n")
|
||||
}
|
||||
} else {
|
||||
defer cache.Close()
|
||||
defer func() { _ = cache.Close() }()
|
||||
|
||||
cr, err := pipeline.LoadWithCache(flagDataDir, !flagNoSubagents, cache, progressFn)
|
||||
if err != nil {
|
||||
|
||||
@@ -51,7 +51,7 @@ func runSummary(_ *cobra.Command, _ []string) error {
|
||||
fmt.Println()
|
||||
|
||||
// Build the summary table
|
||||
rows := [][]string{
|
||||
rows := [][]string{ //nolint:prealloc // appended conditionally below
|
||||
{"Sessions", cli.FormatNumber(int64(stats.TotalSessions))},
|
||||
{"Prompts", cli.FormatNumber(int64(stats.TotalPrompts))},
|
||||
{"Total Time", cli.FormatDuration(stats.TotalDurationSecs)},
|
||||
@@ -70,7 +70,7 @@ func runSummary(_ *cobra.Command, _ []string) error {
|
||||
}
|
||||
|
||||
// Cost per day with delta
|
||||
costDayStr := fmt.Sprintf("%s/day", cli.FormatCost(stats.CostPerDay))
|
||||
costDayStr := cli.FormatCost(stats.CostPerDay) + "/day"
|
||||
if prevStats.CostPerDay > 0 {
|
||||
costDayStr += fmt.Sprintf(" (%s vs prev %dd)",
|
||||
cli.FormatDelta(stats.CostPerDay, prevStats.CostPerDay), flagDays)
|
||||
|
||||
Reference in New Issue
Block a user