diff --git a/.github/workflows/rsr-antipattern.yml b/.github/workflows/rsr-antipattern.yml index 7b81df1..ffeff13 100644 --- a/.github/workflows/rsr-antipattern.yml +++ b/.github/workflows/rsr-antipattern.yml @@ -23,12 +23,38 @@ jobs: - name: Check for TypeScript run: | - if find . -name "*.ts" -o -name "*.tsx" | grep -v node_modules | grep -q .; then + # Allowlist (TS legitimate as a bridge/adapter to a non-ReScript ecosystem): + # bindings/ - language bindings (Deno/TS/AssemblyScript FFI) + # *.d.ts - TypeScript type declarations for ReScript FFI + # tests/, test/ - Deno test runners + # scripts/ - Deno build scripts + # mcp-adapter/ - MCP server adapters (MCP is Deno/TS-typed by spec) + # *vscode* - VSCode extensions (TS is the ecosystem default) + # cli/ - CLI entry points (Deno scripts) + # mod.ts - canonical Deno module entrypoint + # *lsp-server.ts, *lsp.ts - Language Server Protocol implementations + # deno-*/ - subprojects explicitly named for Deno + TS_FILES=$(find . \( -name "*.ts" -o -name "*.tsx" \) \ + | grep -v node_modules \ + | grep -v '/bindings/' \ + | grep -v '\.d\.ts$' \ + | grep -v '/tests/' \ + | grep -v '/test/' \ + | grep -v '/scripts/' \ + | grep -v '/mcp-adapter/' \ + | grep -Ev '/[^/]*vscode[^/]*/' \ + | grep -v '/cli/' \ + | grep -v '/mod\.ts$' \ + | grep -Ev 'lsp[-_]?server\.ts$' \ + | grep -Ev '[/-]lsp\.ts$' \ + | grep -Ev '/deno-[^/]+/' \ + || true) + if [ -n "$TS_FILES" ]; then echo "❌ TypeScript files detected - use ReScript instead" - find . -name "*.ts" -o -name "*.tsx" | grep -v node_modules + echo "$TS_FILES" exit 1 fi - echo "✅ No TypeScript files" + echo "✅ No TypeScript files outside allowlisted bridge/adapter paths" - name: Check for Go run: |