check-safety/any_usage_test.go
Alex Dunmow c4d01de82c feat: concise output + diff-scoped any check
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>
2026-07-04 01:16:56 +08:00

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)
}
}