Ts — Screener
for (const file of files) const report = this.analyzeFile(file); reports.push(report);
program.parse(); import ScreenerReport from '../types.js'; export function consoleReporter(report: ScreenerReport): void console.log('\n📊 TypeScript Screener Report\n'); console.log( ✅ Files scanned: $report.summary.filesScanned ); console.log( 🎯 Type coverage: $report.summary.typeCoveragePercent% ); console.log( ⚠️ Total 'any' usage: $report.summary.totalAnyUsage ); console.log( ❓ Missing type annotations: $report.summary.totalMissingTypes ); console.log( 🏁 Status: $report.summary.passed ? 'PASSED ✅' : 'FAILED ❌' ); ts screener
private buildReport(reports: FileReport[]): ScreenerReport } #!/usr/bin/env node import Command from 'commander'; import TypeScriptScreener from './screener.js'; import consoleReporter from './reporters/console.js'; import jsonReporter from './reporters/json.js'; for (const file of files) const report = this
visit(sourceFile);
"name": "ts-screener", "version": "1.0.0", "type": "module", "bin": "ts-screener": "./dist/cli.js" , "scripts": "build": "tsc", "start": "node dist/cli.js" , "dependencies": "commander": "^11.0.0", "glob": "^10.3.0", "typescript": "^5.0.0" , "devDependencies": "@types/node": "^20.0.0" import ScreenerReport from '../types.js'
if (!report.summary.passed && report.details.length) console.log('\n🔍 Problematic files:'); for (const file of report.details) file.anyCount) console.log( \n📄 $file.filePath ); if (file.missingTypes.length) console.log( Missing types: $file.missingTypes.slice(0, 3).join(', ') );
private checkStrictOptions(sourceFile: ts.SourceFile): string[] const errors: string[] = []; if (this.options.noImplicitAny) // Check compiler flags via parsing tsconfig.json if needed // Simplified: we already flagged implicitAnyLines