From 130f18315556059e852fb5415ddc35fcb563ef84 Mon Sep 17 00:00:00 2001 From: Oleksandr T Date: Sun, 16 Jan 2022 10:27:22 +0200 Subject: [PATCH] feat(47439): omit optional key from jsx output --- src/compiler/transformers/jsx.ts | 12 +++++++++++- ...ArePreserved(jsx=react-jsx,module=commonjs).js | 2 +- ...nsArePreserved(jsx=react-jsx,module=system).js | 2 +- ...yExpressionNotCountedAsChild(jsx=react-jsx).js | 4 ++-- .../jsxJsxsCjsTransformChildren(jsx=react-jsx).js | 2 +- ...JsxsCjsTransformCustomImport(jsx=react-jsx).js | 2 +- ...sTransformCustomImportPragma(jsx=react-jsx).js | 4 ++-- ...nsformNestedSelfClosingChild(jsx=react-jsx).js | 6 +++--- ...CjsTransformSubstitutesNames(jsx=react-jsx).js | 2 +- ...formSubstitutesNamesFragment(jsx=react-jsx).js | 2 +- .../reference/jsxNamespaceGlobalReexport.js | 2 +- ...sxNamespaceGlobalReexportMissingAliasTarget.js | 2 +- .../jsxNamespaceImplicitImportJSXNamespace.js | 2 +- ...romConfigPickedOverGlobalOne(jsx=react-jsx).js | 2 +- ...rtJSXNamespaceFromPragmaPickedOverGlobalOne.js | 2 +- ...eactImportUnusedInNewJSXEmit(jsx=react-jsx).js | 4 ++-- .../reference/reactJsxReactResolvedNodeNext.js | 2 +- .../reference/reactJsxReactResolvedNodeNextEsm.js | 2 +- ...ng-types-found-doesn't-crash-under---strict.js | 2 +- .../with-no-backing-types-found-doesn't-crash.js | 2 +- .../jsxImportSource-option-changed.js | 2 +- ...mportSource-backing-types-added-incremental.js | 2 +- .../jsxImportSource-backing-types-added-watch.js | 2 +- ...ortSource-backing-types-removed-incremental.js | 2 +- ...jsxImportSource-backing-types-removed-watch.js | 2 +- .../jsxImportSource-option-changed-incremental.js | 4 ++-- .../jsxImportSource-option-changed-watch.js | 4 ++-- .../reference/tsxReactEmit8(jsx=react-jsx).js | 11 +++++++++++ .../tsxReactEmit8(jsx=react-jsx).symbols | 12 ++++++++++++ .../reference/tsxReactEmit8(jsx=react-jsx).types | 15 +++++++++++++++ .../reference/tsxReactEmit8(jsx=react-jsxdev).js | 12 ++++++++++++ .../tsxReactEmit8(jsx=react-jsxdev).symbols | 12 ++++++++++++ .../tsxReactEmit8(jsx=react-jsxdev).types | 15 +++++++++++++++ .../tsxReactEmitSpreadAttribute(target=es2015).js | 14 +++++++------- .../tsxReactEmitSpreadAttribute(target=es2018).js | 14 +++++++------- .../tsxReactEmitSpreadAttribute(target=esnext).js | 14 +++++++------- ...renInvalidType(jsx=react-jsx,target=es2015).js | 8 ++++---- ...ildrenInvalidType(jsx=react-jsx,target=es5).js | 8 ++++---- tests/cases/conformance/jsx/tsxReactEmit8.tsx | 6 ++++++ 39 files changed, 156 insertions(+), 63 deletions(-) create mode 100644 tests/baselines/reference/tsxReactEmit8(jsx=react-jsx).js create mode 100644 tests/baselines/reference/tsxReactEmit8(jsx=react-jsx).symbols create mode 100644 tests/baselines/reference/tsxReactEmit8(jsx=react-jsx).types create mode 100644 tests/baselines/reference/tsxReactEmit8(jsx=react-jsxdev).js create mode 100644 tests/baselines/reference/tsxReactEmit8(jsx=react-jsxdev).symbols create mode 100644 tests/baselines/reference/tsxReactEmit8(jsx=react-jsxdev).types create mode 100644 tests/cases/conformance/jsx/tsxReactEmit8.tsx diff --git a/src/compiler/transformers/jsx.ts b/src/compiler/transformers/jsx.ts index c54f79c9f66f6..d321e74817bd4 100644 --- a/src/compiler/transformers/jsx.ts +++ b/src/compiler/transformers/jsx.ts @@ -242,10 +242,19 @@ namespace ts { const nonWhitespaceChildren = getSemanticJsxChildren(children); const isStaticChildren = length(nonWhitespaceChildren) > 1 || !!(nonWhitespaceChildren[0] as JsxExpression)?.dotDotDotToken; - const args: Expression[] = [tagName, objectProperties, !keyAttr ? factory.createVoidZero() : transformJsxAttributeInitializer(keyAttr.initializer)]; + const args: Expression[] = [tagName, objectProperties]; + // function jsx(type, config, maybeKey) {} + // "maybeKey" is optional. It is acceptable to use "_jsx" without a third argument + if (keyAttr) { + args.push(transformJsxAttributeInitializer(keyAttr.initializer)); + } if (compilerOptions.jsx === JsxEmit.ReactJSXDev) { const originalFile = getOriginalNode(currentSourceFile); if (originalFile && isSourceFile(originalFile)) { + // "maybeKey" has to be replaced with "void 0" to not break the jsxDEV signature + if (keyAttr === undefined) { + args.push(factory.createVoidZero()); + } // isStaticChildren development flag args.push(isStaticChildren ? factory.createTrue() : factory.createFalse()); // __source development flag @@ -259,6 +268,7 @@ namespace ts { args.push(factory.createThis()); } } + const element = setTextRange( factory.createCallExpression(getJsxFactoryCallee(isStaticChildren), /*typeArguments*/ undefined, args), location diff --git a/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsx,module=commonjs).js b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsx,module=commonjs).js index eee8eb6aff00a..5ed8e680add05 100644 --- a/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsx,module=commonjs).js +++ b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsx,module=commonjs).js @@ -25,7 +25,7 @@ var Component = /** @class */ (function () { function Component() { } Component.prototype.render = function () { - return (0, _a.jsx)("div", { children: null /* preserved */ }, void 0); + return (0, _a.jsx)("div", { children: null /* preserved */ }); }; return Component; }()); diff --git a/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsx,module=system).js b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsx,module=system).js index c8b14c6198d70..7dfb4487e41d5 100644 --- a/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsx,module=system).js +++ b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsx,module=system).js @@ -25,7 +25,7 @@ var Component = /** @class */ (function () { function Component() { } Component.prototype.render = function () { - return _jsx("div", { children: null /* preserved */ }, void 0); + return _jsx("div", { children: null /* preserved */ }); }; return Component; }()); diff --git a/tests/baselines/reference/jsxEmptyExpressionNotCountedAsChild(jsx=react-jsx).js b/tests/baselines/reference/jsxEmptyExpressionNotCountedAsChild(jsx=react-jsx).js index 628a88e6df036..72845d881a37a 100644 --- a/tests/baselines/reference/jsxEmptyExpressionNotCountedAsChild(jsx=react-jsx).js +++ b/tests/baselines/reference/jsxEmptyExpressionNotCountedAsChild(jsx=react-jsx).js @@ -22,6 +22,6 @@ const element = ( exports.__esModule = true; var jsx_runtime_1 = require("react/jsx-runtime"); function Wrapper(props) { - return (0, jsx_runtime_1.jsx)("div", { children: props.children }, void 0); + return (0, jsx_runtime_1.jsx)("div", { children: props.children }); } -var element = ((0, jsx_runtime_1.jsx)(Wrapper, { children: (0, jsx_runtime_1.jsx)("div", { children: "Hello" }, void 0) }, void 0)); +var element = ((0, jsx_runtime_1.jsx)(Wrapper, { children: (0, jsx_runtime_1.jsx)("div", { children: "Hello" }) })); diff --git a/tests/baselines/reference/jsxJsxsCjsTransformChildren(jsx=react-jsx).js b/tests/baselines/reference/jsxJsxsCjsTransformChildren(jsx=react-jsx).js index 6bb4e171cf7fb..2bf6a140dea6f 100644 --- a/tests/baselines/reference/jsxJsxsCjsTransformChildren(jsx=react-jsx).js +++ b/tests/baselines/reference/jsxJsxsCjsTransformChildren(jsx=react-jsx).js @@ -10,4 +10,4 @@ export {}; exports.__esModule = true; var jsx_runtime_1 = require("react/jsx-runtime"); /// -var a = (0, jsx_runtime_1.jsx)("div", { children: "text" }, void 0); +var a = (0, jsx_runtime_1.jsx)("div", { children: "text" }); diff --git a/tests/baselines/reference/jsxJsxsCjsTransformCustomImport(jsx=react-jsx).js b/tests/baselines/reference/jsxJsxsCjsTransformCustomImport(jsx=react-jsx).js index 44c248f819084..5b98b87b31981 100644 --- a/tests/baselines/reference/jsxJsxsCjsTransformCustomImport(jsx=react-jsx).js +++ b/tests/baselines/reference/jsxJsxsCjsTransformCustomImport(jsx=react-jsx).js @@ -13,4 +13,4 @@ export {}; exports.__esModule = true; var jsx_runtime_1 = require("preact/jsx-runtime"); /// -var a = (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("p", {}, void 0), "text", (0, jsx_runtime_1.jsx)("div", { className: "foo" }, void 0)] }, void 0); +var a = (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("p", {}), "text", (0, jsx_runtime_1.jsx)("div", { className: "foo" })] }); diff --git a/tests/baselines/reference/jsxJsxsCjsTransformCustomImportPragma(jsx=react-jsx).js b/tests/baselines/reference/jsxJsxsCjsTransformCustomImportPragma(jsx=react-jsx).js index 04ecd0966b83f..70c683f242bbf 100644 --- a/tests/baselines/reference/jsxJsxsCjsTransformCustomImportPragma(jsx=react-jsx).js +++ b/tests/baselines/reference/jsxJsxsCjsTransformCustomImportPragma(jsx=react-jsx).js @@ -28,7 +28,7 @@ exports.__esModule = true; var jsx_runtime_1 = require("preact/jsx-runtime"); /// /* @jsxImportSource preact */ -var a = (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("p", {}, void 0), "text", (0, jsx_runtime_1.jsx)("div", { className: "foo" }, void 0)] }, void 0); +var a = (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("p", {}), "text", (0, jsx_runtime_1.jsx)("div", { className: "foo" })] }); //// [react.js] "use strict"; exports.__esModule = true; @@ -36,4 +36,4 @@ var jsx_runtime_1 = require("react/jsx-runtime"); /// /* @jsxImportSource react */ require("./preact"); -var a = (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("p", {}, void 0), "text", (0, jsx_runtime_1.jsx)("div", { className: "foo" }, void 0)] }, void 0); +var a = (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("p", {}), "text", (0, jsx_runtime_1.jsx)("div", { className: "foo" })] }); diff --git a/tests/baselines/reference/jsxJsxsCjsTransformNestedSelfClosingChild(jsx=react-jsx).js b/tests/baselines/reference/jsxJsxsCjsTransformNestedSelfClosingChild(jsx=react-jsx).js index 58aa36ae906f3..58a87dc9b86b8 100644 --- a/tests/baselines/reference/jsxJsxsCjsTransformNestedSelfClosingChild(jsx=react-jsx).js +++ b/tests/baselines/reference/jsxJsxsCjsTransformNestedSelfClosingChild(jsx=react-jsx).js @@ -25,6 +25,6 @@ console.log( "use strict"; exports.__esModule = true; var jsx_runtime_1 = require("react/jsx-runtime"); -console.log((0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)("div", {}, void 0) }, void 0)); -console.log((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("div", {}, void 0), (0, jsx_runtime_1.jsx)("div", {}, void 0)] }, void 0)); -console.log((0, jsx_runtime_1.jsx)("div", { children: [1, 2].map(function (i) { return (0, jsx_runtime_1.jsx)("div", { children: i }, i); }) }, void 0)); +console.log((0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)("div", {}) })); +console.log((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("div", {}), (0, jsx_runtime_1.jsx)("div", {})] })); +console.log((0, jsx_runtime_1.jsx)("div", { children: [1, 2].map(function (i) { return (0, jsx_runtime_1.jsx)("div", { children: i }, i); }) })); diff --git a/tests/baselines/reference/jsxJsxsCjsTransformSubstitutesNames(jsx=react-jsx).js b/tests/baselines/reference/jsxJsxsCjsTransformSubstitutesNames(jsx=react-jsx).js index 9e00c8d0152ca..912e958c96c49 100644 --- a/tests/baselines/reference/jsxJsxsCjsTransformSubstitutesNames(jsx=react-jsx).js +++ b/tests/baselines/reference/jsxJsxsCjsTransformSubstitutesNames(jsx=react-jsx).js @@ -9,4 +9,4 @@ export {}; exports.__esModule = true; var jsx_runtime_1 = require("react/jsx-runtime"); /// -var a = (0, jsx_runtime_1.jsx)("div", {}, void 0); +var a = (0, jsx_runtime_1.jsx)("div", {}); diff --git a/tests/baselines/reference/jsxJsxsCjsTransformSubstitutesNamesFragment(jsx=react-jsx).js b/tests/baselines/reference/jsxJsxsCjsTransformSubstitutesNamesFragment(jsx=react-jsx).js index 9e53d1df09c8f..15daa7806469f 100644 --- a/tests/baselines/reference/jsxJsxsCjsTransformSubstitutesNamesFragment(jsx=react-jsx).js +++ b/tests/baselines/reference/jsxJsxsCjsTransformSubstitutesNamesFragment(jsx=react-jsx).js @@ -13,4 +13,4 @@ export {}; exports.__esModule = true; var jsx_runtime_1 = require("react/jsx-runtime"); /// -var a = (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("p", {}, void 0), "text", (0, jsx_runtime_1.jsx)("div", {}, void 0)] }, void 0); +var a = (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("p", {}), "text", (0, jsx_runtime_1.jsx)("div", {})] }); diff --git a/tests/baselines/reference/jsxNamespaceGlobalReexport.js b/tests/baselines/reference/jsxNamespaceGlobalReexport.js index dab912ca0e59b..2e721ec56b9f1 100644 --- a/tests/baselines/reference/jsxNamespaceGlobalReexport.js +++ b/tests/baselines/reference/jsxNamespaceGlobalReexport.js @@ -110,5 +110,5 @@ export const Comp = () =>
; exports.__esModule = true; exports.Comp = void 0; var jsx_runtime_1 = require("preact/jsx-runtime"); -var Comp = function () { return (0, jsx_runtime_1.jsx)("div", {}, void 0); }; +var Comp = function () { return (0, jsx_runtime_1.jsx)("div", {}); }; exports.Comp = Comp; diff --git a/tests/baselines/reference/jsxNamespaceGlobalReexportMissingAliasTarget.js b/tests/baselines/reference/jsxNamespaceGlobalReexportMissingAliasTarget.js index ff1dfd19b1d21..bf3132f4e4da8 100644 --- a/tests/baselines/reference/jsxNamespaceGlobalReexportMissingAliasTarget.js +++ b/tests/baselines/reference/jsxNamespaceGlobalReexportMissingAliasTarget.js @@ -106,5 +106,5 @@ export const Comp = () =>
; exports.__esModule = true; exports.Comp = void 0; var jsx_runtime_1 = require("preact/jsx-runtime"); -var Comp = function () { return (0, jsx_runtime_1.jsx)("div", {}, void 0); }; +var Comp = function () { return (0, jsx_runtime_1.jsx)("div", {}); }; exports.Comp = Comp; diff --git a/tests/baselines/reference/jsxNamespaceImplicitImportJSXNamespace.js b/tests/baselines/reference/jsxNamespaceImplicitImportJSXNamespace.js index faf0631075199..f6aefee450f7a 100644 --- a/tests/baselines/reference/jsxNamespaceImplicitImportJSXNamespace.js +++ b/tests/baselines/reference/jsxNamespaceImplicitImportJSXNamespace.js @@ -106,5 +106,5 @@ export const Comp = () =>
; exports.__esModule = true; exports.Comp = void 0; var jsx_runtime_1 = require("preact/jsx-runtime"); -var Comp = function () { return (0, jsx_runtime_1.jsx)("div", {}, void 0); }; +var Comp = function () { return (0, jsx_runtime_1.jsx)("div", {}); }; exports.Comp = Comp; diff --git a/tests/baselines/reference/jsxNamespaceImplicitImportJSXNamespaceFromConfigPickedOverGlobalOne(jsx=react-jsx).js b/tests/baselines/reference/jsxNamespaceImplicitImportJSXNamespaceFromConfigPickedOverGlobalOne(jsx=react-jsx).js index 436bbc6930f72..9d09b3dfca13e 100644 --- a/tests/baselines/reference/jsxNamespaceImplicitImportJSXNamespaceFromConfigPickedOverGlobalOne(jsx=react-jsx).js +++ b/tests/baselines/reference/jsxNamespaceImplicitImportJSXNamespaceFromConfigPickedOverGlobalOne(jsx=react-jsx).js @@ -69,5 +69,5 @@ export const Comp = () =>
; exports.__esModule = true; exports.Comp = void 0; var jsx_runtime_1 = require("@emotion/react/jsx-runtime"); -var Comp = function () { return (0, jsx_runtime_1.jsx)("div", { css: "color: hotpink;" }, void 0); }; +var Comp = function () { return (0, jsx_runtime_1.jsx)("div", { css: "color: hotpink;" }); }; exports.Comp = Comp; diff --git a/tests/baselines/reference/jsxNamespaceImplicitImportJSXNamespaceFromPragmaPickedOverGlobalOne.js b/tests/baselines/reference/jsxNamespaceImplicitImportJSXNamespaceFromPragmaPickedOverGlobalOne.js index eb234fe58df7b..0161b0c2acf51 100644 --- a/tests/baselines/reference/jsxNamespaceImplicitImportJSXNamespaceFromPragmaPickedOverGlobalOne.js +++ b/tests/baselines/reference/jsxNamespaceImplicitImportJSXNamespaceFromPragmaPickedOverGlobalOne.js @@ -71,5 +71,5 @@ exports.__esModule = true; exports.Comp = void 0; var jsx_runtime_1 = require("@emotion/react/jsx-runtime"); /* @jsxImportSource @emotion/react */ -var Comp = function () { return (0, jsx_runtime_1.jsx)("div", { css: "color: hotpink;" }, void 0); }; +var Comp = function () { return (0, jsx_runtime_1.jsx)("div", { css: "color: hotpink;" }); }; exports.Comp = Comp; diff --git a/tests/baselines/reference/reactImportUnusedInNewJSXEmit(jsx=react-jsx).js b/tests/baselines/reference/reactImportUnusedInNewJSXEmit(jsx=react-jsx).js index 3f7b46c6bd77b..27f6c4d309260 100644 --- a/tests/baselines/reference/reactImportUnusedInNewJSXEmit(jsx=react-jsx).js +++ b/tests/baselines/reference/reactImportUnusedInNewJSXEmit(jsx=react-jsx).js @@ -17,9 +17,9 @@ exports.__esModule = true; exports.Foo = void 0; var jsx_runtime_1 = require("react/jsx-runtime"); function Bar() { - return (0, jsx_runtime_1.jsx)("div", {}, void 0); + return (0, jsx_runtime_1.jsx)("div", {}); } function Foo() { - return (0, jsx_runtime_1.jsx)(Bar, {}, void 0); + return (0, jsx_runtime_1.jsx)(Bar, {}); } exports.Foo = Foo; diff --git a/tests/baselines/reference/reactJsxReactResolvedNodeNext.js b/tests/baselines/reference/reactJsxReactResolvedNodeNext.js index 600bc4b92da82..f36fdc66c2a5b 100644 --- a/tests/baselines/reference/reactJsxReactResolvedNodeNext.js +++ b/tests/baselines/reference/reactJsxReactResolvedNodeNext.js @@ -24,4 +24,4 @@ import './'; Object.defineProperty(exports, "__esModule", { value: true }); exports.a = void 0; const jsx_runtime_1 = require("react/jsx-runtime"); -exports.a = (0, jsx_runtime_1.jsx)("div", {}, void 0); +exports.a = (0, jsx_runtime_1.jsx)("div", {}); diff --git a/tests/baselines/reference/reactJsxReactResolvedNodeNextEsm.js b/tests/baselines/reference/reactJsxReactResolvedNodeNextEsm.js index bb4cddaf74e62..834a8fa145c4e 100644 --- a/tests/baselines/reference/reactJsxReactResolvedNodeNextEsm.js +++ b/tests/baselines/reference/reactJsxReactResolvedNodeNextEsm.js @@ -29,4 +29,4 @@ import './'; //// [file.js] import { jsx as _jsx } from "react/jsx-runtime"; -export const a = _jsx("div", {}, void 0); +export const a = _jsx("div", {}); diff --git a/tests/baselines/reference/tsc/react-jsx-emit-mode/initial-build/with-no-backing-types-found-doesn't-crash-under---strict.js b/tests/baselines/reference/tsc/react-jsx-emit-mode/initial-build/with-no-backing-types-found-doesn't-crash-under---strict.js index 86a9065aca427..a552f6a790d32 100644 --- a/tests/baselines/reference/tsc/react-jsx-emit-mode/initial-build/with-no-backing-types-found-doesn't-crash-under---strict.js +++ b/tests/baselines/reference/tsc/react-jsx-emit-mode/initial-build/with-no-backing-types-found-doesn't-crash-under---strict.js @@ -57,7 +57,7 @@ exitCode:: ExitStatus.DiagnosticsPresent_OutputsGenerated exports.__esModule = true; exports.App = void 0; var jsx_runtime_1 = require("react/jsx-runtime"); -var App = function () { return (0, jsx_runtime_1.jsx)("div", { propA: true }, void 0); }; +var App = function () { return (0, jsx_runtime_1.jsx)("div", { propA: true }); }; exports.App = App; diff --git a/tests/baselines/reference/tsc/react-jsx-emit-mode/initial-build/with-no-backing-types-found-doesn't-crash.js b/tests/baselines/reference/tsc/react-jsx-emit-mode/initial-build/with-no-backing-types-found-doesn't-crash.js index c024df2326931..d1d33bd22eb58 100644 --- a/tests/baselines/reference/tsc/react-jsx-emit-mode/initial-build/with-no-backing-types-found-doesn't-crash.js +++ b/tests/baselines/reference/tsc/react-jsx-emit-mode/initial-build/with-no-backing-types-found-doesn't-crash.js @@ -49,7 +49,7 @@ exitCode:: ExitStatus.Success exports.__esModule = true; exports.App = void 0; var jsx_runtime_1 = require("react/jsx-runtime"); -var App = function () { return (0, jsx_runtime_1.jsx)("div", { propA: true }, void 0); }; +var App = function () { return (0, jsx_runtime_1.jsx)("div", { propA: true }); }; exports.App = App; diff --git a/tests/baselines/reference/tscWatch/forceConsistentCasingInFileNames/jsxImportSource-option-changed.js b/tests/baselines/reference/tscWatch/forceConsistentCasingInFileNames/jsxImportSource-option-changed.js index 417fb08c4abc8..b1d511faa2c44 100644 --- a/tests/baselines/reference/tscWatch/forceConsistentCasingInFileNames/jsxImportSource-option-changed.js +++ b/tests/baselines/reference/tscWatch/forceConsistentCasingInFileNames/jsxImportSource-option-changed.js @@ -106,7 +106,7 @@ exitCode:: ExitStatus.undefined exports.__esModule = true; exports.App = void 0; var jsx_runtime_1 = require("react/jsx-runtime"); -var App = function () { return (0, jsx_runtime_1.jsx)("div", { propA: true }, void 0); }; +var App = function () { return (0, jsx_runtime_1.jsx)("div", { propA: true }); }; exports.App = App; diff --git a/tests/baselines/reference/tscWatch/incremental/jsxImportSource-backing-types-added-incremental.js b/tests/baselines/reference/tscWatch/incremental/jsxImportSource-backing-types-added-incremental.js index bc8105dd86d3f..6b4af80386042 100644 --- a/tests/baselines/reference/tscWatch/incremental/jsxImportSource-backing-types-added-incremental.js +++ b/tests/baselines/reference/tscWatch/incremental/jsxImportSource-backing-types-added-incremental.js @@ -61,7 +61,7 @@ exitCode:: ExitStatus.DiagnosticsPresent_OutputsGenerated exports.__esModule = true; exports.App = void 0; var jsx_runtime_1 = require("react/jsx-runtime"); -var App = function () { return (0, jsx_runtime_1.jsx)("div", { propA: true }, void 0); }; +var App = function () { return (0, jsx_runtime_1.jsx)("div", { propA: true }); }; exports.App = App; diff --git a/tests/baselines/reference/tscWatch/incremental/jsxImportSource-backing-types-added-watch.js b/tests/baselines/reference/tscWatch/incremental/jsxImportSource-backing-types-added-watch.js index 5bf0dc49ee0e0..e45b207c97124 100644 --- a/tests/baselines/reference/tscWatch/incremental/jsxImportSource-backing-types-added-watch.js +++ b/tests/baselines/reference/tscWatch/incremental/jsxImportSource-backing-types-added-watch.js @@ -75,7 +75,7 @@ exitCode:: ExitStatus.undefined exports.__esModule = true; exports.App = void 0; var jsx_runtime_1 = require("react/jsx-runtime"); -var App = function () { return (0, jsx_runtime_1.jsx)("div", { propA: true }, void 0); }; +var App = function () { return (0, jsx_runtime_1.jsx)("div", { propA: true }); }; exports.App = App; diff --git a/tests/baselines/reference/tscWatch/incremental/jsxImportSource-backing-types-removed-incremental.js b/tests/baselines/reference/tscWatch/incremental/jsxImportSource-backing-types-removed-incremental.js index 98699033c4a63..1f466cf37284e 100644 --- a/tests/baselines/reference/tscWatch/incremental/jsxImportSource-backing-types-removed-incremental.js +++ b/tests/baselines/reference/tscWatch/incremental/jsxImportSource-backing-types-removed-incremental.js @@ -73,7 +73,7 @@ exitCode:: ExitStatus.Success exports.__esModule = true; exports.App = void 0; var jsx_runtime_1 = require("react/jsx-runtime"); -var App = function () { return (0, jsx_runtime_1.jsx)("div", { propA: true }, void 0); }; +var App = function () { return (0, jsx_runtime_1.jsx)("div", { propA: true }); }; exports.App = App; diff --git a/tests/baselines/reference/tscWatch/incremental/jsxImportSource-backing-types-removed-watch.js b/tests/baselines/reference/tscWatch/incremental/jsxImportSource-backing-types-removed-watch.js index 641134714d966..cd0d1e7b8b18d 100644 --- a/tests/baselines/reference/tscWatch/incremental/jsxImportSource-backing-types-removed-watch.js +++ b/tests/baselines/reference/tscWatch/incremental/jsxImportSource-backing-types-removed-watch.js @@ -96,7 +96,7 @@ exitCode:: ExitStatus.undefined exports.__esModule = true; exports.App = void 0; var jsx_runtime_1 = require("react/jsx-runtime"); -var App = function () { return (0, jsx_runtime_1.jsx)("div", { propA: true }, void 0); }; +var App = function () { return (0, jsx_runtime_1.jsx)("div", { propA: true }); }; exports.App = App; diff --git a/tests/baselines/reference/tscWatch/incremental/jsxImportSource-option-changed-incremental.js b/tests/baselines/reference/tscWatch/incremental/jsxImportSource-option-changed-incremental.js index 9ceb94fe14ca4..dbd38dbd51558 100644 --- a/tests/baselines/reference/tscWatch/incremental/jsxImportSource-option-changed-incremental.js +++ b/tests/baselines/reference/tscWatch/incremental/jsxImportSource-option-changed-incremental.js @@ -96,7 +96,7 @@ exitCode:: ExitStatus.Success exports.__esModule = true; exports.App = void 0; var jsx_runtime_1 = require("react/jsx-runtime"); -var App = function () { return (0, jsx_runtime_1.jsx)("div", { propA: true }, void 0); }; +var App = function () { return (0, jsx_runtime_1.jsx)("div", { propA: true }); }; exports.App = App; @@ -212,7 +212,7 @@ exitCode:: ExitStatus.DiagnosticsPresent_OutputsGenerated exports.__esModule = true; exports.App = void 0; var jsx_runtime_1 = require("preact/jsx-runtime"); -var App = function () { return (0, jsx_runtime_1.jsx)("div", { propA: true }, void 0); }; +var App = function () { return (0, jsx_runtime_1.jsx)("div", { propA: true }); }; exports.App = App; diff --git a/tests/baselines/reference/tscWatch/incremental/jsxImportSource-option-changed-watch.js b/tests/baselines/reference/tscWatch/incremental/jsxImportSource-option-changed-watch.js index 87dc1d5f4ca04..7725b4acdace9 100644 --- a/tests/baselines/reference/tscWatch/incremental/jsxImportSource-option-changed-watch.js +++ b/tests/baselines/reference/tscWatch/incremental/jsxImportSource-option-changed-watch.js @@ -119,7 +119,7 @@ exitCode:: ExitStatus.undefined exports.__esModule = true; exports.App = void 0; var jsx_runtime_1 = require("react/jsx-runtime"); -var App = function () { return (0, jsx_runtime_1.jsx)("div", { propA: true }, void 0); }; +var App = function () { return (0, jsx_runtime_1.jsx)("div", { propA: true }); }; exports.App = App; @@ -255,7 +255,7 @@ exitCode:: ExitStatus.undefined exports.__esModule = true; exports.App = void 0; var jsx_runtime_1 = require("preact/jsx-runtime"); -var App = function () { return (0, jsx_runtime_1.jsx)("div", { propA: true }, void 0); }; +var App = function () { return (0, jsx_runtime_1.jsx)("div", { propA: true }); }; exports.App = App; diff --git a/tests/baselines/reference/tsxReactEmit8(jsx=react-jsx).js b/tests/baselines/reference/tsxReactEmit8(jsx=react-jsx).js new file mode 100644 index 0000000000000..4b2ad79559d76 --- /dev/null +++ b/tests/baselines/reference/tsxReactEmit8(jsx=react-jsx).js @@ -0,0 +1,11 @@ +//// [tsxReactEmit8.tsx] +/// + +
1
; +
2
; + + +//// [tsxReactEmit8.js] +/// +_jsx("div", { children: "1" }); +_jsx("div", { children: "2" }, "key-attr"); diff --git a/tests/baselines/reference/tsxReactEmit8(jsx=react-jsx).symbols b/tests/baselines/reference/tsxReactEmit8(jsx=react-jsx).symbols new file mode 100644 index 0000000000000..c5e8950b7fc9a --- /dev/null +++ b/tests/baselines/reference/tsxReactEmit8(jsx=react-jsx).symbols @@ -0,0 +1,12 @@ +=== tests/cases/conformance/jsx/tsxReactEmit8.tsx === +/// + +
1
; +>div : Symbol(JSX.IntrinsicElements.div, Decl(react16.d.ts, 2546, 114)) +>div : Symbol(JSX.IntrinsicElements.div, Decl(react16.d.ts, 2546, 114)) + +
2
; +>div : Symbol(JSX.IntrinsicElements.div, Decl(react16.d.ts, 2546, 114)) +>key : Symbol(key, Decl(tsxReactEmit8.tsx, 3, 4)) +>div : Symbol(JSX.IntrinsicElements.div, Decl(react16.d.ts, 2546, 114)) + diff --git a/tests/baselines/reference/tsxReactEmit8(jsx=react-jsx).types b/tests/baselines/reference/tsxReactEmit8(jsx=react-jsx).types new file mode 100644 index 0000000000000..46799d30bdc5e --- /dev/null +++ b/tests/baselines/reference/tsxReactEmit8(jsx=react-jsx).types @@ -0,0 +1,15 @@ +=== tests/cases/conformance/jsx/tsxReactEmit8.tsx === +/// + +
1
; +>
1
: JSX.Element +>div : any +>div : any + +
2
; +>
2
: JSX.Element +>div : any +>key : string +>"key-attr" : "key-attr" +>div : any + diff --git a/tests/baselines/reference/tsxReactEmit8(jsx=react-jsxdev).js b/tests/baselines/reference/tsxReactEmit8(jsx=react-jsxdev).js new file mode 100644 index 0000000000000..898c4d9886243 --- /dev/null +++ b/tests/baselines/reference/tsxReactEmit8(jsx=react-jsxdev).js @@ -0,0 +1,12 @@ +//// [tsxReactEmit8.tsx] +/// + +
1
; +
2
; + + +//// [tsxReactEmit8.js] +const _jsxFileName = "tests/cases/conformance/jsx/tsxReactEmit8.tsx"; +/// +_jsxDEV("div", { children: "1" }, void 0, false, { fileName: _jsxFileName, lineNumber: 1, columnNumber: 1 }, this); +_jsxDEV("div", { children: "2" }, "key-attr", false, { fileName: _jsxFileName, lineNumber: 3, columnNumber: 14 }, this); diff --git a/tests/baselines/reference/tsxReactEmit8(jsx=react-jsxdev).symbols b/tests/baselines/reference/tsxReactEmit8(jsx=react-jsxdev).symbols new file mode 100644 index 0000000000000..c5e8950b7fc9a --- /dev/null +++ b/tests/baselines/reference/tsxReactEmit8(jsx=react-jsxdev).symbols @@ -0,0 +1,12 @@ +=== tests/cases/conformance/jsx/tsxReactEmit8.tsx === +/// + +
1
; +>div : Symbol(JSX.IntrinsicElements.div, Decl(react16.d.ts, 2546, 114)) +>div : Symbol(JSX.IntrinsicElements.div, Decl(react16.d.ts, 2546, 114)) + +
2
; +>div : Symbol(JSX.IntrinsicElements.div, Decl(react16.d.ts, 2546, 114)) +>key : Symbol(key, Decl(tsxReactEmit8.tsx, 3, 4)) +>div : Symbol(JSX.IntrinsicElements.div, Decl(react16.d.ts, 2546, 114)) + diff --git a/tests/baselines/reference/tsxReactEmit8(jsx=react-jsxdev).types b/tests/baselines/reference/tsxReactEmit8(jsx=react-jsxdev).types new file mode 100644 index 0000000000000..46799d30bdc5e --- /dev/null +++ b/tests/baselines/reference/tsxReactEmit8(jsx=react-jsxdev).types @@ -0,0 +1,15 @@ +=== tests/cases/conformance/jsx/tsxReactEmit8.tsx === +/// + +
1
; +>
1
: JSX.Element +>div : any +>div : any + +
2
; +>
2
: JSX.Element +>div : any +>key : string +>"key-attr" : "key-attr" +>div : any + diff --git a/tests/baselines/reference/tsxReactEmitSpreadAttribute(target=es2015).js b/tests/baselines/reference/tsxReactEmitSpreadAttribute(target=es2015).js index 24705934a296f..1e4fbe01c78ba 100644 --- a/tests/baselines/reference/tsxReactEmitSpreadAttribute(target=es2015).js +++ b/tests/baselines/reference/tsxReactEmitSpreadAttribute(target=es2015).js @@ -34,23 +34,23 @@ export function T7(a: any, b: any, c: any, d: any) { import { jsx as _jsx } from "react/jsx-runtime"; /// export function T1(a) { - return _jsx("div", Object.assign({ className: "T1" }, a, { children: "T1" }), void 0); + return _jsx("div", Object.assign({ className: "T1" }, a, { children: "T1" })); } export function T2(a, b) { - return _jsx("div", Object.assign({ className: "T2" }, a, b, { children: "T2" }), void 0); + return _jsx("div", Object.assign({ className: "T2" }, a, b, { children: "T2" })); } export function T3(a, b) { - return _jsx("div", Object.assign({}, a, { className: "T3" }, b, { children: "T3" }), void 0); + return _jsx("div", Object.assign({}, a, { className: "T3" }, b, { children: "T3" })); } export function T4(a, b) { - return _jsx("div", Object.assign({ className: "T4" }, Object.assign(Object.assign({}, a), b), { children: "T4" }), void 0); + return _jsx("div", Object.assign({ className: "T4" }, Object.assign(Object.assign({}, a), b), { children: "T4" })); } export function T5(a, b, c, d) { - return _jsx("div", Object.assign({ className: "T5" }, Object.assign(Object.assign(Object.assign({}, a), b), { c, d }), { children: "T5" }), void 0); + return _jsx("div", Object.assign({ className: "T5" }, Object.assign(Object.assign(Object.assign({}, a), b), { c, d }), { children: "T5" })); } export function T6(a, b, c, d) { - return _jsx("div", Object.assign({ className: "T6" }, Object.assign(Object.assign(Object.assign({}, a), b), Object.assign(Object.assign({}, c), d)), { children: "T6" }), void 0); + return _jsx("div", Object.assign({ className: "T6" }, Object.assign(Object.assign(Object.assign({}, a), b), Object.assign(Object.assign({}, c), d)), { children: "T6" })); } export function T7(a, b, c, d) { - return _jsx("div", { children: "T7" }, void 0); + return _jsx("div", { children: "T7" }); } diff --git a/tests/baselines/reference/tsxReactEmitSpreadAttribute(target=es2018).js b/tests/baselines/reference/tsxReactEmitSpreadAttribute(target=es2018).js index 5e870a365bc81..0aa58a3f27284 100644 --- a/tests/baselines/reference/tsxReactEmitSpreadAttribute(target=es2018).js +++ b/tests/baselines/reference/tsxReactEmitSpreadAttribute(target=es2018).js @@ -34,23 +34,23 @@ export function T7(a: any, b: any, c: any, d: any) { import { jsx as _jsx } from "react/jsx-runtime"; /// export function T1(a) { - return _jsx("div", { className: "T1", ...a, children: "T1" }, void 0); + return _jsx("div", { className: "T1", ...a, children: "T1" }); } export function T2(a, b) { - return _jsx("div", { className: "T2", ...a, ...b, children: "T2" }, void 0); + return _jsx("div", { className: "T2", ...a, ...b, children: "T2" }); } export function T3(a, b) { - return _jsx("div", { ...a, className: "T3", ...b, children: "T3" }, void 0); + return _jsx("div", { ...a, className: "T3", ...b, children: "T3" }); } export function T4(a, b) { - return _jsx("div", { className: "T4", ...{ ...a, ...b }, children: "T4" }, void 0); + return _jsx("div", { className: "T4", ...{ ...a, ...b }, children: "T4" }); } export function T5(a, b, c, d) { - return _jsx("div", { className: "T5", ...{ ...a, ...b, ...{ c, d } }, children: "T5" }, void 0); + return _jsx("div", { className: "T5", ...{ ...a, ...b, ...{ c, d } }, children: "T5" }); } export function T6(a, b, c, d) { - return _jsx("div", { className: "T6", ...{ ...a, ...b, ...{ ...c, ...d } }, children: "T6" }, void 0); + return _jsx("div", { className: "T6", ...{ ...a, ...b, ...{ ...c, ...d } }, children: "T6" }); } export function T7(a, b, c, d) { - return _jsx("div", { children: "T7" }, void 0); + return _jsx("div", { children: "T7" }); } diff --git a/tests/baselines/reference/tsxReactEmitSpreadAttribute(target=esnext).js b/tests/baselines/reference/tsxReactEmitSpreadAttribute(target=esnext).js index 5e870a365bc81..0aa58a3f27284 100644 --- a/tests/baselines/reference/tsxReactEmitSpreadAttribute(target=esnext).js +++ b/tests/baselines/reference/tsxReactEmitSpreadAttribute(target=esnext).js @@ -34,23 +34,23 @@ export function T7(a: any, b: any, c: any, d: any) { import { jsx as _jsx } from "react/jsx-runtime"; /// export function T1(a) { - return _jsx("div", { className: "T1", ...a, children: "T1" }, void 0); + return _jsx("div", { className: "T1", ...a, children: "T1" }); } export function T2(a, b) { - return _jsx("div", { className: "T2", ...a, ...b, children: "T2" }, void 0); + return _jsx("div", { className: "T2", ...a, ...b, children: "T2" }); } export function T3(a, b) { - return _jsx("div", { ...a, className: "T3", ...b, children: "T3" }, void 0); + return _jsx("div", { ...a, className: "T3", ...b, children: "T3" }); } export function T4(a, b) { - return _jsx("div", { className: "T4", ...{ ...a, ...b }, children: "T4" }, void 0); + return _jsx("div", { className: "T4", ...{ ...a, ...b }, children: "T4" }); } export function T5(a, b, c, d) { - return _jsx("div", { className: "T5", ...{ ...a, ...b, ...{ c, d } }, children: "T5" }, void 0); + return _jsx("div", { className: "T5", ...{ ...a, ...b, ...{ c, d } }, children: "T5" }); } export function T6(a, b, c, d) { - return _jsx("div", { className: "T6", ...{ ...a, ...b, ...{ ...c, ...d } }, children: "T6" }, void 0); + return _jsx("div", { className: "T6", ...{ ...a, ...b, ...{ ...c, ...d } }, children: "T6" }); } export function T7(a, b, c, d) { - return _jsx("div", { children: "T7" }, void 0); + return _jsx("div", { children: "T7" }); } diff --git a/tests/baselines/reference/tsxSpreadChildrenInvalidType(jsx=react-jsx,target=es2015).js b/tests/baselines/reference/tsxSpreadChildrenInvalidType(jsx=react-jsx,target=es2015).js index 75ff44138c806..9314082e933a4 100644 --- a/tests/baselines/reference/tsxSpreadChildrenInvalidType(jsx=react-jsx,target=es2015).js +++ b/tests/baselines/reference/tsxSpreadChildrenInvalidType(jsx=react-jsx,target=es2015).js @@ -34,14 +34,14 @@ let x: TodoListProps; //// [tsxSpreadChildrenInvalidType.js] function Todo(prop) { - return _jsx("div", { children: prop.key.toString() + prop.todo }, void 0); + return _jsx("div", { children: prop.key.toString() + prop.todo }); } function TodoList({ todos }) { - return _jsxs("div", { children: [..._jsx(Todo, { todo: todos[0].todo }, todos[0].id)] }, void 0); + return _jsxs("div", { children: [..._jsx(Todo, { todo: todos[0].todo }, todos[0].id)] }); } function TodoListNoError({ todos }) { // any is not checked - return _jsxs("div", { children: [..._jsx(Todo, { todo: todos[0].todo }, todos[0].id)] }, void 0); + return _jsxs("div", { children: [..._jsx(Todo, { todo: todos[0].todo }, todos[0].id)] }); } let x; -_jsx(TodoList, Object.assign({}, x), void 0); +_jsx(TodoList, Object.assign({}, x)); diff --git a/tests/baselines/reference/tsxSpreadChildrenInvalidType(jsx=react-jsx,target=es5).js b/tests/baselines/reference/tsxSpreadChildrenInvalidType(jsx=react-jsx,target=es5).js index 00f8cda36dd54..bf484ee6c15b1 100644 --- a/tests/baselines/reference/tsxSpreadChildrenInvalidType(jsx=react-jsx,target=es5).js +++ b/tests/baselines/reference/tsxSpreadChildrenInvalidType(jsx=react-jsx,target=es5).js @@ -54,16 +54,16 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { return to.concat(ar || Array.prototype.slice.call(from)); }; function Todo(prop) { - return (0, _a.jsx)("div", { children: prop.key.toString() + prop.todo }, void 0); + return (0, _a.jsx)("div", { children: prop.key.toString() + prop.todo }); } function TodoList(_a) { var todos = _a.todos; - return (0, _b.jsxs)("div", { children: __spreadArray([], (0, _a.jsx)(Todo, { todo: todos[0].todo }, todos[0].id), true) }, void 0); + return (0, _b.jsxs)("div", { children: __spreadArray([], (0, _a.jsx)(Todo, { todo: todos[0].todo }, todos[0].id), true) }); } function TodoListNoError(_a) { var todos = _a.todos; // any is not checked - return (0, _b.jsxs)("div", { children: __spreadArray([], (0, _a.jsx)(Todo, { todo: todos[0].todo }, todos[0].id), true) }, void 0); + return (0, _b.jsxs)("div", { children: __spreadArray([], (0, _a.jsx)(Todo, { todo: todos[0].todo }, todos[0].id), true) }); } var x; -(0, _a.jsx)(TodoList, __assign({}, x), void 0); +(0, _a.jsx)(TodoList, __assign({}, x)); diff --git a/tests/cases/conformance/jsx/tsxReactEmit8.tsx b/tests/cases/conformance/jsx/tsxReactEmit8.tsx new file mode 100644 index 0000000000000..23bd2e4c5a220 --- /dev/null +++ b/tests/cases/conformance/jsx/tsxReactEmit8.tsx @@ -0,0 +1,6 @@ +// @jsx: react-jsx,react-jsxdev +// @target: esnext +/// + +
1
; +
2
;