How close is tsc-rs to tsc?
tsc-rs is measured against the TypeScript project's own test suites, using the baseline files that the real compiler produced. This page reports every lane, including the ones that are far from done.
Baseline lanes
One configuration per test case, compared with the baseline file that tsc itself produced. The emit lane skips 497 compiler and 519 conformance cases that have no .js oracle (mostly noEmit); the diagnostics lane exercises all of them.
Wave of 27 September 2026JavaScript emit
Byte-for-byte match with the tsc .js baseline, one configuration per case.
Diagnostics
Whole-case match with the tsc .errors.txt baseline: message, position and code.
Every option variant
Many TypeScript tests run under several compiler options. This opt-in report expands each one. The failures are mostly ES5 downlevel transforms and .d.ts emit.
Measured 7 September 2026Expanded option variants
Every stored option variant of every case: 14,819 identities.
Type-check accuracy and symbols
Recall and precision count individual diagnostics over every option variant, so they are stricter about coverage and looser about wording than the whole-case diagnostics lane. The symbols lane skips 95 and 290 cases without a uniquely selected oracle.
Earlier snapshot, not rerunType-check recall
Share of expected diagnostics found, matched per (file, line, code) over every option variant.
Type-check precision
Share of reported diagnostics that tsc also reports, same matching rule.
Symbols
Match with the tsc .symbols baseline.
Language server
The language server is tested against the TypeScript fourslash suite, the same editor-behaviour tests tsc uses. The total is the sum of the five operations; it excludes rename.
Last recorded run| Operation | Passed | Failed | Skipped | Pass rate | Share |
|---|---|---|---|---|---|
| QuickInfo (hover) | 250 | 279 | 10 | 47.3% | |
| Completions | 839 | 292 | 0 | 74.2% | |
| Go-to-definition | 172 | 39 | 2 | 81.5% | |
| Find-all-references | 305 | 42 | 0 | 87.9% | |
| Signature help | 120 | 25 | 7 | 82.8% | |
| Total | 1,686 | 677 | 19 | 71.3% |
Where the work is
What the failing cases have in common, lane by lane.
- Default emit matches every case that has a JavaScript oracle. The remaining emit work is in the expanded variants: ES5 downlevel transforms and declaration files.
- Diagnostics are the active front. A whole-case pass needs every message and column to match, which is where the remaining 1,797 compiler and 2,341 conformance failures come from: 4,138 mismatches in total.
- Language server gaps are type inference. Hover misses are contextual typing, generics, JSDoc type tags and cross-file aliases. Completion misses are auto-imports and cross-file members.
- Symbols and declaration emit are early.
Method
The test corpus is the TypeScript repository's own cases and reference baselines, vendored unmodified under tests/. Wave by wave results are in docs/verified-waves.md.
- Pass rate is
passed / (passed + failed). Skipped cases are excluded and never counted as passes. - The oracle is chosen from the effective compiler options, never from whichever candidate output happens to match.
- Results are cached by a hash of the compiler sources, so published numbers are always taken with
--no-cache. - Each wave records newly passing cases, lost passes and unchanged skips before it is merged.
cargo build --release -p tsc_rs_harness
# JavaScript emit and diagnostics (drop --baseline errors for emit)
target/release/baseline-report --suite compiler --baseline errors --no-cache
target/release/baseline-report --suite conformance --baseline errors --no-cache
# Symbols
target/release/baseline-report --suite compiler --baseline symbols --no-cache
# Type-check recall and precision (run the full corpus)
target/release/typecheck-report --suite compiler --json
# Language server
target/release/lsp-report --op all --json