Skip to content
Progress

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.

Waves 37From 8 September 2026To 27 September 2026

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%
0+50+100+150+2008 Sep27 Sep

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

  1. Comma-operator unused left side (TS2695) follows tsc exactly

    +1 compiler+7 conformanceTS2695

    The 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 timings
  2. Super in non-derived classes (TS2335) and computed keys (TS2466)

    +3 compiler+9 conformanceTS2335TS2466

    TS2335: 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 through class_info by name. super.x whose nearest container is a member of a non-derived class is TS2335. So is...

    4,731 compiler · 3,559 conformance cases passingValidation and timings
  3. Property/accessor override kinds (TS2610 / TS2611)

    +2 compiler+11 conformanceTS2610TS2611

    As 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 timings
  4. Multiple default exports (TS2528)

    +5 conformanceTS2528

    TS2528 follows tsc's binder, which declares one default symbol. A new default declaration conflicts when its exclusions meet the symbol's flags:

    4,726 compiler · 3,539 conformance cases passingValidation and timings
  5. Await as a binding name (TS1262 / TS1359)

    +21 conformanceTS1262TS1359

    The new await_bindings.rs reports binding names spelled await in await contexts, as tsc's parser does:

    4,726 compiler · 3,534 conformance cases passingValidation and timings
  6. Private names are lexically scoped (TS18013)

    +9 conformanceTS18013

    x.#p is now TS18013 when no lexically enclosing class declares #p but the receiver's class declares it. For instances, a base class that declares it also counts, since a Derived instance carries Base's #p. For constructors it does not, because static private names aren't inherited; tsc...

    4,726 compiler · 3,513 conformance cases passingValidation and timings
  7. Computed property name key types (TS2464)

    +8 conformanceTS2464

    TS2464 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 timings
  8. Bare return; checked as undefined (TS2322)

    +3 compilerTS2322

    As in tsc's checkReturnStatement, a bare return; in a non-generator, non-constructor function whose declared return type excludes undefined (and is not void, any or unknown) is now TS2322, "Type 'undefined' is not assignable...", at the return keyword under strictNullChecks. It adds...

    4,726 compiler · 3,496 conformance cases passingValidation and timings
  9. Value used as a type (TS2749)

    +1 compilerTS2749

    An identifier type reference to a name that the file declares only as a top-level value (var, let, const or 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 timings
  10. JSX factory namespace in scope (TS2874) and factory option validation (TS5067/TS5059)

    +7 compiler+1 conformanceTS2874TS5067TS5059

    TS2874: under jsx: react, each opening or self-closing tag needs the factory namespace as a value in scope, as in tsc's markJsxAliasReferenced. The namespace comes from a file @jsx pragma, else a valid jsxFactory, else reactNamespace as written, else React. It is resolved directly...

    4,722 compiler · 3,496 conformance cases passingValidation and timings
  11. Import assignments under ES module kinds (TS1202)

    +4 compiler+1 conformanceTS1202

    With module set to es2015, es2020, es2022 or esnext, a non-type-only, non-ambient import x = require(...) is now TS1202 on the whole statement, as in tsc's checkImportEqualsDeclaration, 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 timings
  12. Alias root hidden by a local declaration (TS2437)

    +4 compilerTS2437

    In a namespace block, import X = A.b whose target has a value meaning is now TS2437 at A when A resolves, for value or namespace meaning, to a local non-namespace declaration of that block (var, function or class). This follows tsc's checkImportEqualsDeclaration. There are no TS2437 false...

    4,711 compiler · 3,494 conformance cases passingValidation and timings
  13. Recursive interface bases (TS2310) and type-only namespaces as values (TS2708)

    +5 compilerTS2310TS2708

    TS2310: each interface whose extends graph (from interface_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 timings
  14. Built-in global redeclarations (TS2397) and TDZ gaps (TS2448)

    +7 compiler+3 conformanceTS2397TS2448

    TS2397: in a script file, any top-level declaration named globalThis is reported at its name. So is a variable, function or namespace (not a type) named undefined. TS2448, three changes: A let/const loop binding of for...in/of is now ready only after the iterated expression, so `for (let...

    4,702 compiler · 3,494 conformance cases passingValidation and timings
  15. Merge conflict markers (TS1185) and value-less shorthands (TS18004)

    +7 compiler+1 conformanceTS1185TS18004

    TS1185: the scanner already skipped merge conflict markers as trivia but reported nothing. It now records each marker's start on its cold path. parse reports "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 timings
  16. Import-equals aliases that collide with a var (TS2440)

    +4 compilerTS2440

    The binder binds import x = <entity> as a function-scoped variable, so it merged silently with var x. The new import_alias_conflicts.rs follows tsc's checkAliasSymbol. Such a pair is TS2440, reported at the import statement, when the alias target has a value meaning: a var, function,...

    4,688 compiler · 3,490 conformance cases passingValidation and timings
  17. Directive options located in the test's tsconfig

    +5 compiler

    When 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 timings
  18. Unused renamings in bodyless signatures (TS2842)

    +5 compiler+2 conformanceTS2842

    { p: name } in a parameter of a signature with no body is now TS2842 when name is unused. This covers function and constructor types, call, construct and method signatures, overloads, and declare functions. A typeof name or name is T in the signature counts as a use. An unannotated...

    4,679 compiler · 3,490 conformance cases passingValidation and timings
  19. Namespace used as a type (TS2709)

    +3 compilerTS2709

    An 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 timings
  20. Emit-helper diagnostics under importHelpers (TS2354/TS2343)

    +15 compiler+46 conformanceTS2354TS2343

    The new external_helpers.rs ports tsc's checkExternalEmitHelpers. 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 class extends, object spread/rest, legacy and ES decorators (including...

    4,671 compiler · 3,488 conformance cases passingValidation and timings
  21. Super property access outside a method (TS2660)

    +4 compilerTS2660

    super.x must have a class member, or an object-literal method or accessor, as its nearest non-arrow container. This follows tsc's getSuperContainer. Function scopes now carry a marker saying whether super properties are legal there. Class members, property initializers, static blocks and...

    4,656 compiler · 3,442 conformance cases passingValidation and timings
  22. Switch-case comparability (TS2678)

    +4 compiler+6 conformanceTS2678

    case expressions are now related to the switch expression's type, as in tsc's checkSwitchStatement. The rule reuses the TS2367 no-overlap logic, which was moved into comparison_no_overlap. That logic is now decided per union member, so string and number | "hello" overlap through...

    4,652 compiler · 3,442 conformance cases passingValidation and timings
  23. Unreachable-code ranges follow tsc

    +4 compiler

    TS7027 now follows tsc's checkSourceElementUnreachable:

    4,648 compiler · 3,436 conformance cases passingValidation and timings
  24. Strict-mode parameter names and missing super() calls

    +10 compiler+15 conformance

    TS1100 now covers parameters named eval or arguments in strict code, in every signature (declarations, expressions, arrows, and type-position signatures), matching tsc's bindParameter; 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 timings
  25. Overload implementation notes and single-arity candidates

    +4 compiler

    Overload 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 timings
  26. Declaration notes for anonymous types and unconstrained type parameters

    +13 compiler+3 conformance

    Starting 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

  1. 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

  1. Public constructor overloads

    +8 compiler+2 conformance

    Class 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 timings
  2. Instance member compatibility

    +10 compiler+3 conformance

    Instance 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 timings
  3. Circular module aliases

    +7 compiler

    A 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 timings
  4. Jump targets and duplicate labels

    +13 compiler+21 conformance

    break and continue now 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 timings
  5. Static inheritance compatibility

    +6 compiler+5 conformance

    Class 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 timings
  6. Strictness defaults and option precedence

    +10 compiler+6 conformance

    Explicit noImplicitAny, strictNullChecks, strictFunctionTypes, and strictPropertyInitialization settings now override strict in 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 timings
  7. Implicit return types in signatures

    +9 compiler+1 conformance

    Add 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 timings
  8. Function completion diagnostics

    +15 compiler+3 conformance

    Add 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 timings
  9. Restore 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 timings
  10. Missing binding-pattern argument notes

    Commit 04b90c6db adds 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.