SonarSource/SonarJS
SonarSource Static Analyzer for JavaScript and TypeScript
What's novel
SonarSource Static Analyzer for JavaScript and TypeScript
Code Analysis
27 files read · 7 roundsA production-grade static analysis engine for JavaScript, TypeScript, and CSS that implements 1000+ rules using ESLint as the execution framework, with deep TypeScript type-system integration, dataflow analysis, and gRPC-based communication with SonarQube Server and IDE.
Strengths
Exceptional depth of implementation with 535+ rules backed by 99+ helper modules providing AST manipulation, TypeScript type checking, scope analysis, and dataflow algorithms (reaching definitions). The architecture is well-layered with clean separation between gRPC transport, analysis orchestration, rule execution, and issue transformation, supported by a comprehensive multi-layer testing strategy (unit, check-based, integration, ruling).
Weaknesses
The Linter class is a large static singleton (20kb) that accumulates state, making it harder to test in isolation and reason about. Some helper files (ast.ts at 25kb, type.ts at 21kb) are large and could benefit from further decomposition. The dependency on ESLint's internal APIs (e.g., getSuppressedMessages cast) creates fragility across ESLint versions.
Score Breakdown
Signal breakdown
Innovation
Craft
Traction
Scope
Evidence
Commits
1182
Contributors
90
Files
10061
Active weeks
51
Repository
Language
TypeScript
Stars
1207
Forks
192
License
NOASSERTION