Reporter is now a collector: checks declare a verdict (OK/Skip/Warn/Fail/ Fatal) plus findings, and a single central render() prints output. Default output is silent on pass/skip — only FAIL/WARN/ERR checks print, followed by one tally line, so a clean run is two lines. --verbose restores full per-check output. All ~30 checks were converted to this API; orphaned guidance/label helpers (printPerTargetOKLines, per-check *Help blocks, colors_format.go) were removed. The any-usage check (2e) now defaults to only the unstaged working-tree diff (changed lines), via a new per-repo git-diff index in changedlines.go; --all-any restores the full scan. Not-a-git-repo / no-diff warns on nothing. Golden fixtures regenerated; integration tests updated to the new format; added unit tests for the diff index. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
71 lines
1.7 KiB
Go
71 lines
1.7 KiB
Go
package main
|
|
|
|
import (
|
|
"path/filepath"
|
|
"testing"
|
|
)
|
|
|
|
func TestCheckGoAnyUsageFlagsAnyTypes(t *testing.T) {
|
|
root := t.TempDir()
|
|
writeTestFile(t, filepath.Join(root, "sample.go"), `package sample
|
|
|
|
type Payload struct {
|
|
Value any
|
|
Items []any
|
|
}
|
|
|
|
func Map() map[string]any {
|
|
return nil
|
|
}
|
|
`, 0644)
|
|
|
|
warnings := checkGoAnyUsage(root, nil)
|
|
if len(warnings) < 3 {
|
|
t.Fatalf("checkGoAnyUsage() returned %d warnings, want at least 3: %#v", len(warnings), warnings)
|
|
}
|
|
}
|
|
|
|
func TestCheckGoAnyUsageSkipsTestsAndGeneratedFiles(t *testing.T) {
|
|
root := t.TempDir()
|
|
writeTestFile(t, filepath.Join(root, "sample_test.go"), `package sample
|
|
|
|
func TestThing(value any) {}
|
|
`, 0644)
|
|
writeTestFile(t, filepath.Join(root, "sample.pb.go"), `package sample
|
|
|
|
type Payload struct {
|
|
Value any
|
|
}
|
|
`, 0644)
|
|
|
|
warnings := checkGoAnyUsage(root, nil)
|
|
if len(warnings) != 0 {
|
|
t.Fatalf("checkGoAnyUsage() returned %d warnings, want 0: %#v", len(warnings), warnings)
|
|
}
|
|
}
|
|
|
|
func TestCheckTypeScriptAnyUsageFlagsAnyPatterns(t *testing.T) {
|
|
root := t.TempDir()
|
|
writeTestFile(t, filepath.Join(root, "sample.ts"), `export type Row = any
|
|
export const fn = (value: any[]): any => value as any
|
|
`, 0644)
|
|
|
|
warnings := checkTypeScriptAnyUsage(root, nil)
|
|
if len(warnings) < 2 {
|
|
t.Fatalf("checkTypeScriptAnyUsage() returned %d warnings, want at least 2: %#v", len(warnings), warnings)
|
|
}
|
|
}
|
|
|
|
func TestCheckTypeScriptAnyUsageSkipsCommentsAndStrings(t *testing.T) {
|
|
root := t.TempDir()
|
|
writeTestFile(t, filepath.Join(root, "sample.ts"), `// any should not count
|
|
const label = "any";
|
|
/* any */
|
|
`, 0644)
|
|
|
|
warnings := checkTypeScriptAnyUsage(root, nil)
|
|
if len(warnings) != 0 {
|
|
t.Fatalf("checkTypeScriptAnyUsage() returned %d warnings, want 0: %#v", len(warnings), warnings)
|
|
}
|
|
}
|