One verified wave at a time.
tsc-rs moves in small waves. Each one targets a family of diagnostics, and is merged only with a cache-free before and after comparison that shows which cases newly pass and that no passing case was lost.
Diagnostic cases gained
Whole-case diagnostic matches gained since the first recorded wave, by test suite.
- Compiler suite+1934,732 of 6,529 passing, 72.5%
- Conformance suite+1893,566 of 5,907 passing, 60.4%
Each step is one wave. JavaScript emit stayed at 100% of baselines throughout. Hover or tap the chart for a wave; the full list is below.
The wave log
Newest first. Each entry links to its validation record: the tests added, the manifest comparison, and the timing of the change.
27 September 2026
Comma-operator unused left side (TS2695) follows tsc exactly
+1 compiler+7 conformanceTS2695The side-effect test now mirrors tsc's
isSideEffectFree. Identifiers, literals, templates, functions, arrows, classes, array and object literals,typeof,!x/+x/-x/~x, non-null and JSX count as side-effect free. So do non-assigning binaries and conditionals when their parts are....4,732 compiler · 3,566 conformance cases passingValidation and timingsSuper in non-derived classes (TS2335) and computed keys (TS2466)
+3 compiler+9 conformanceTS2335TS2466TS2335: class members now mark their scope with whether their class has
extends, taken from the AST (enclosing_class_derived), because nested and local classes don't resolve throughclass_infoby name.super.xwhose nearest container is a member of a non-derived class is TS2335. So is...4,731 compiler · 3,559 conformance cases passingValidation and timingsProperty/accessor override kinds (TS2610 / TS2611)
+2 compiler+11 conformanceTS2610TS2611As in tsc's
checkKindsOfPropertyMemberOverrides, overriding a base accessor with an instance property is now TS2610. Overriding a base property with an accessor is TS2611. The nearest base class declaring the member is found through the file's own class declarations. Ambiguous names and bases...4,728 compiler · 3,550 conformance cases passingValidation and timingsMultiple default exports (TS2528)
+5 conformanceTS2528TS2528 follows tsc's binder, which declares one
defaultsymbol. A new default declaration conflicts when its exclusions meet the symbol's flags:4,726 compiler · 3,539 conformance cases passingValidation and timingsAwait as a binding name (TS1262 / TS1359)
+21 conformanceTS1262TS1359The new
await_bindings.rsreports binding names spelledawaitin await contexts, as tsc's parser does:4,726 compiler · 3,534 conformance cases passingValidation and timingsPrivate names are lexically scoped (TS18013)
+9 conformanceTS18013x.#pis now TS18013 when no lexically enclosing class declares#pbut the receiver's class declares it. For instances, a base class that declares it also counts, since aDerivedinstance carriesBase's#p. For constructors it does not, because static private names aren't inherited; tsc...4,726 compiler · 3,513 conformance cases passingValidation and timingsComputed property name key types (TS2464)
+8 conformanceTS2464TS2464 now follows tsc's
checkComputedPropertyName: the key's type must be string-, number- or symbol-like as a whole. Every union member must qualify, an intersection needs one qualifying member, and a type parameter is judged by its constraint (an unconstrained one fails). Types we cannot...4,726 compiler · 3,504 conformance cases passingValidation and timingsBare return; checked as undefined (TS2322)
+3 compilerTS2322As in tsc's
checkReturnStatement, a barereturn;in a non-generator, non-constructor function whose declared return type excludesundefined(and is notvoid,anyorunknown) is now TS2322, "Type 'undefined' is not assignable...", at thereturnkeyword under strictNullChecks. It adds...4,726 compiler · 3,496 conformance cases passingValidation and timingsValue used as a type (TS2749)
+1 compilerTS2749An identifier type reference to a name that the file declares only as a top-level value (
var,let,constor function) is now TS2749. It applies when there is no same-named class, interface, alias, enum, namespace, import or global type, and no type parameter or nested type declaration shadows...4,723 compiler · 3,496 conformance cases passingValidation and timingsJSX factory namespace in scope (TS2874) and factory option validation (TS5067/TS5059)
+7 compiler+1 conformanceTS2874TS5067TS5059TS2874: under
jsx: react, each opening or self-closing tag needs the factory namespace as a value in scope, as in tsc'smarkJsxAliasReferenced. The namespace comes from a file@jsxpragma, else a validjsxFactory, elsereactNamespaceas written, elseReact. It is resolved directly...4,722 compiler · 3,496 conformance cases passingValidation and timingsImport assignments under ES module kinds (TS1202)
+4 compiler+1 conformanceTS1202With
moduleset to es2015, es2020, es2022 or esnext, a non-type-only, non-ambientimport x = require(...)is now TS1202 on the whole statement, as in tsc'scheckImportEqualsDeclaration, whatever the file extension. It is a grammar error, so it is skipped in files with syntax errors. There are...4,715 compiler · 3,495 conformance cases passingValidation and timingsAlias root hidden by a local declaration (TS2437)
+4 compilerTS2437In a namespace block,
import X = A.bwhose target has a value meaning is now TS2437 atAwhenAresolves, for value or namespace meaning, to a local non-namespace declaration of that block (var, function or class). This follows tsc'scheckImportEqualsDeclaration. There are no TS2437 false...4,711 compiler · 3,494 conformance cases passingValidation and timingsRecursive interface bases (TS2310) and type-only namespaces as values (TS2708)
+5 compilerTS2310TS2708TS2310: each interface whose
extendsgraph (frominterface_info) leads back to itself is reported at its name, printed with its type parameters (I1<T>). Class cycles (TS2506) are not included. TS2708: a value-position identifier that resolves at root scope to one of the file's namespaces with...4,707 compiler · 3,494 conformance cases passingValidation and timingsBuilt-in global redeclarations (TS2397) and TDZ gaps (TS2448)
+7 compiler+3 conformanceTS2397TS2448TS2397: in a script file, any top-level declaration named
globalThisis reported at its name. So is a variable, function or namespace (not a type) namedundefined. TS2448, three changes: Alet/constloop binding offor...in/ofis now ready only after the iterated expression, so `for (let...4,702 compiler · 3,494 conformance cases passingValidation and timingsMerge conflict markers (TS1185) and value-less shorthands (TS18004)
+7 compiler+1 conformanceTS1185TS18004TS1185: the scanner already skipped merge conflict markers as trivia but reported nothing. It now records each marker's start on its cold path.
parsereports "Merge conflict marker encountered." at the seven marker characters. This code does not count as a syntax error, so semantic checking...4,695 compiler · 3,491 conformance cases passingValidation and timingsImport-equals aliases that collide with a var (TS2440)
+4 compilerTS2440The binder binds
import x = <entity>as a function-scoped variable, so it merged silently withvar x. The newimport_alias_conflicts.rsfollows tsc'scheckAliasSymbol. Such a pair is TS2440, reported at the import statement, when the alias target has a value meaning: avar, function,...4,688 compiler · 3,490 conformance cases passingValidation and timingsDirective options located in the test's tsconfig
+5 compilerWhen a test has a
tsconfig.json, a deprecated option set only by a// @directive is now reported at the tsconfig's"compilerOptions"key, as tsc's harness does. Previously it was reported as a global error. This change is harness-only.4,684 compiler · 3,490 conformance cases passingValidation and timingsUnused renamings in bodyless signatures (TS2842)
+5 compiler+2 conformanceTS2842{ p: name }in a parameter of a signature with no body is now TS2842 whennameis unused. This covers function and constructor types, call, construct and method signatures, overloads, anddeclarefunctions. Atypeof nameorname is Tin the signature counts as a use. An unannotated...4,679 compiler · 3,490 conformance cases passingValidation and timingsNamespace used as a type (TS2709)
+3 compilerTS2709An identifier type reference that names one of the file's namespaces is now TS2709 when that name has no type meaning. A class, interface, alias, enum, type parameter, import or global type of the same name counts as a type meaning, as does a type declaration in an enclosing block or function...
4,674 compiler · 3,488 conformance cases passingValidation and timingsEmit-helper diagnostics under importHelpers (TS2354/TS2343)
+15 compiler+46 conformanceTS2354TS2343The new
external_helpers.rsports tsc'scheckExternalEmitHelpers. Syntax that lowers to a tslib helper records a request, using tsc's target and option gates, its helper bits and its error location. This covers classextends, object spread/rest, legacy and ES decorators (including...4,671 compiler · 3,488 conformance cases passingValidation and timingsSuper property access outside a method (TS2660)
+4 compilerTS2660super.xmust have a class member, or an object-literal method or accessor, as its nearest non-arrow container. This follows tsc'sgetSuperContainer. Function scopes now carry a marker saying whethersuperproperties are legal there. Class members, property initializers, static blocks and...4,656 compiler · 3,442 conformance cases passingValidation and timingsSwitch-case comparability (TS2678)
+4 compiler+6 conformanceTS2678caseexpressions are now related to the switch expression's type, as in tsc'scheckSwitchStatement. The rule reuses the TS2367 no-overlap logic, which was moved intocomparison_no_overlap. That logic is now decided per union member, sostringandnumber | "hello"overlap through...4,652 compiler · 3,442 conformance cases passingValidation and timingsUnreachable-code ranges follow tsc
+4 compilerTS7027 now follows tsc's
checkSourceElementUnreachable:4,648 compiler · 3,436 conformance cases passingValidation and timingsStrict-mode parameter names and missing super() calls
+10 compiler+15 conformanceTS1100 now covers parameters named
evalorargumentsin strict code, in every signature (declarations, expressions, arrows, and type-position signatures), matching tsc'sbindParameter; ambient signatures are exempt. Class members keep TS1210; modules (TS1215) are not yet covered. TS2377: a...4,644 compiler · 3,436 conformance cases passingValidation and timingsOverload implementation notes and single-arity candidates
+4 compilerOverload sets now remember their bodied implementation (top-level functions and class methods, keyed by the callable signatures). When every overload rejects a call that the implementation would accept, the error carries tsc's TS2793 note at the implementation's name. When exactly one overload has...
4,634 compiler · 3,421 conformance cases passingValidation and timingsDeclaration notes for anonymous types and unconstrained type parameters
+13 compiler+3 conformanceStarting from
b72e8c656, two related-information notes that tsc attaches to relation errors are now produced:4,630 compiler · 3,421 conformance cases passingValidation and timings
26 September 2026
Constructor diagnostic spans without rescanning
Starting from
cb92e8bc0, constructors retain the parser's keyword span in the AST. Overload compatibility uses that span instead of allocating a token stream for the entire constructor body. Missing-implementation diagnostics use the same endpoint. Both diagnostics include accessibility modifiers...4,617 compiler · 3,418 conformance cases passingValidation and timings
8 September 2026
Public constructor overloads
+8 compiler+2 conformanceClass constructor relations, construction expressions, and
super(...)calls now use public overload declarations, excluding the implementation signature. Ambient overload declarations remain separate signatures. Inherited signatures substitute each base's type arguments and dependent defaults...4,617 compiler · 3,418 conformance cases passingValidation and timingsInstance member compatibility
+10 compiler+3 conformanceInstance inheritance and implementation checks now share the signature relation used for static members. They check overload sets, required parameters, generic constraints, instantiated base arguments, and method versus function-property variance. Inherited method metadata survives intermediate...
4,609 compiler · 3,416 conformance cases passingValidation and timingsCircular module aliases
+7 compilerA shared program index now detects TS2303 cycles through import-equals, named and default imports, re-exports, ambient modules, and UMD namespace aliases. Dependency-first file order and declaration identity determine which alias receives the error. Export-assignment files have their own module...
4,599 compiler · 3,413 conformance cases passingValidation and timingsJump targets and duplicate labels
+13 compiler+21 conformancebreakandcontinuenow resolve their enclosing loop, switch, or label during the normal statement traversal. Invalid jumps report TS1104, TS1105, TS1107, TS1115, or TS1116 as appropriate. Chained labels preserve their iteration target, and duplicate enclosing labels report TS1114 with the...4,592 compiler · 3,413 conformance cases passingValidation and timingsStatic inheritance compatibility
+6 compiler+5 conformanceClass declarations and expressions now report TS2417 when their own static members conflict with the nearest inherited declaration. The check preserves source declaration order, private/protected visibility, optionality, getter read types, and callable overloads without their implementation...
4,579 compiler · 3,392 conformance cases passingValidation and timingsStrictness defaults and option precedence
+10 compiler+6 conformanceExplicit
noImplicitAny,strictNullChecks,strictFunctionTypes, andstrictPropertyInitializationsettings now overridestrictin either direction. Omitted settings inherit TypeScript 6's strict-by-default behavior. Property initialization and local definite-assignment checks use the...4,573 compiler · 3,387 conformance cases passingValidation and timingsImplicit return types in signatures
+9 compiler+1 conformanceAdd TS7013 for construct signatures and TS7020 for call signatures without return annotations under
noImplicitAny. Named method signatures now use the same annotation traversals, covering inline and nested type literals as well as interfaces. TS7010 preserves quoted and computed name spelling and...4,563 compiler · 3,381 conformance cases passingValidation and timingsFunction completion diagnostics
+15 compiler+3 conformanceAdd TS2355, TS2366, TS2534, and endpoint TS7030 checks for functions, arrows, methods, and getters. Shared flow analysis accounts for reachable returns, loops and labels, switch fallthrough, and try/catch/finally. Statement checking records explicit never-call and exhaustive-switch evidence while...
4,554 compiler · 3,380 conformance cases passingValidation and timingsRestore the workspace test gate
The next wave restores test fixtures for added type metadata and updates stale expectations for literal types, diagnostic codes, declaration output, and enum properties. Checks against the installed TypeScript 6.0.3 compiler distinguish outdated assertions from implementation bugs.
4,539 compiler · 3,377 conformance cases passingValidation and timingsMissing binding-pattern argument notes
Commit
04b90c6dbadds TS6211 related information for omitted destructured parameters in functions, methods, and constructors. Three regression tests cover named parameters, object/array patterns, inherited constructors, supplied arguments, and defaults.4,539 compilerValidation and timings