Static safety/lint runner for the BlockNinja codebase. ~25 invariant
checks across Go and frontend sources. Was at git.dev.alexdunmow.com:block/ninja
in backend/cmd/check-safety/ until the 2026-06-06 consolidation moved
the BlockNinja repos under a shared ~/src/blockninja/ parent.
This repo is the standalone extraction:
- Own go.mod (git.dev.alexdunmow.com/block/check-safety, go 1.26.4)
- Vendored internal/{helpers,theme} from CMS (Go's internal/ rule
blocks cross-module imports; vendoring is the workaround)
- CLI contract unchanged: `check-safety <target-dir> [--flags]`
- CMS Makefile shells into ../check-safety for safety-check /
install-safety-checker targets
Co-Authored-By: Claude Opus 4.7 <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)
|
|
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)
|
|
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)
|
|
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)
|
|
if len(warnings) != 0 {
|
|
t.Fatalf("checkTypeScriptAnyUsage() returned %d warnings, want 0: %#v", len(warnings), warnings)
|
|
}
|
|
}
|