Parent: #67
Scope
Close the 114 byte-for-byte diagnostic mismatches in the upstream tests/cases/conformance/jsx/** cluster by porting the corresponding JSX checker/parser semantics from tsgo. Port semantics, not fixture-specific text.
Verified 2026-07-17 in the full exact sweep (see #67 frontier comment).
Root-cause patterns visible so far
- Literal widening in rendered diagnostics — Home renders object literal types with unwidened literal members (
{ a: 10; b: "hi" }) where tsgo renders widened ({ a: number; b: string }) in TS2741/TS2322-family messages (e.g.checkJsxChildrenProperty2). - Diagnostic anchoring — e.g. TS2710 (
'children' are specified twice) anchored on the attribute value (col 25) instead of the attribute name (col 11) incheckJsxChildrenProperty2. - Overload vs. children-prop diagnostic selection — Home picks TS2746 (
children prop expects a single child…) where tsgo picks TS2769 (No overload matches this call) for tuple-typed children (checkJsxChildrenCanBeTupleType). - Spread-attributes resolution, SFC overload resolution, element/attribute resolution, and parser error-recovery clusters (fixtures below) still to be mined; each lands as its own focused commit.
Failing fixtures (114)
Full list (paths under tests/cases/conformance/jsx/)
checkJsxChildrenCanBeTupleType, checkJsxChildrenProperty10, checkJsxChildrenProperty11,
checkJsxChildrenProperty15, checkJsxChildrenProperty2, checkJsxChildrenProperty4,
checkJsxChildrenProperty5, checkJsxChildrenProperty7, checkJsxGenericTagHasCorrectInferences,
checkJsxIntersectionElementPropsType, checkJsxNamespaceNamesQuestionableForms,
commentEmittingInPreserveJsx1, correctlyMarkAliasAsReferences1-4,
inline/inlineJsxAndJsxFragPragma, inline/inlineJsxFactoryDeclarations,
inline/inlineJsxFactoryDeclarationsLocalTypes, inline/inlineJsxFactoryLocalTypeGlobalFallback,
inline/inlineJsxFactoryWithFragmentIsError, jsxAndTypeAssertion, jsxAttributeInitializer,
jsxCheckJsxNoTypeArgumentsAllowed, jsxEsprimaFbTestSuite, jsxInvalidEsprimaTestSuite,
jsxParsingError2, jsxParsingError3, jsxParsingErrorImmediateSpreadInAttributeValue,
jsxReactTestSuite, jsxSpreadOverwritesAttributeStrict, jsxUnclosedParserRecovery,
jsxs/jsxJsxsCjsTransformCustomImport(Pragma), jsxs/jsxJsxsCjsTransformKeyPropCustomImport(Pragma),
tsxAttributeInvalidNames, tsxAttributeResolution1/2/5/6/7/12/15,
tsxCorrectlyParseLessThanComparison1, tsxDefaultAttributesResolution3,
tsxDynamicTagName2/3/7, tsxElementResolution(1,6,7,9,10,11,12,15), tsxEmit1, tsxEmit3,
tsxErrorRecovery1/2/3, tsxExternalModuleEmit1/2, tsxFragmentErrors,
tsxGenericArrowFunctionParsing, tsxGenericAttributesType1/5/6/7/8,
tsxIntrinsicAttributeErrors, tsxLibraryManagedAttributes, tsxNamespacedTagName1/2,
tsxReactComponentWithDefaultTypeParameter3, tsxReactEmit1/7, tsxReactEmitNesting,
tsxSfcReturnUndefinedStrictNullChecks, tsxSpreadAttributesResolution2/4/5/6/10/11/12/13/17,
tsxSpreadChildren, tsxSpreadChildrenInvalidType, tsxSpreadInvalidType,
tsxStatelessFunctionComponentOverload1-6,
tsxStatelessFunctionComponentWithDefaultTypeParameter2, tsxStatelessFunctionComponents1/2Reproduction
HOME_TS_CONFORMANCE_ROOT=~/Code/typescript-go \
HOME_TS_CONFORMANCE_FULL=1 HOME_TS_CONFORMANCE_EXACT=1 \
HOME_TS_CONFORMANCE_FILTER=<fixtureName> \
./pantry/.bin/zig build test -Dfilter=ts_conformance \
'-Dts-conformance-test-filter=opt-in full local TypeScript corpus survey' \
--summary failures(Run the compiled suite binary directly for repeated surveys — the zig build run-step cache does not key on these env vars.)
Completion gate
- All 114 fixtures pass exact byte-for-byte baselines.
- No regressions in
ts_checkerpackage tests or adjacent exact fixtures. - Each root cause lands in a focused conventional commit referencing this issue.