diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 32ea13b6338..a8f43c185e8 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -6463,7 +6463,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi function trimReactWhitespace(node: JsxText): string { let result: string = undefined; - let text = getTextOfNode(node); + let text = getTextOfNode(node, true); let firstNonWhitespace = 0; let lastNonWhitespace = -1; @@ -6498,7 +6498,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi switch (compilerOptions.jsx) { case JsxEmit.React: let text = trimReactWhitespace(node); - if (text.length === 0) { + if (text === undefined || text.length === 0) { return undefined; } else { diff --git a/tests/baselines/reference/tsxReactEmit1.js b/tests/baselines/reference/tsxReactEmit1.js index f1799e5bb77..260bd9cd228 100644 --- a/tests/baselines/reference/tsxReactEmit1.js +++ b/tests/baselines/reference/tsxReactEmit1.js @@ -69,6 +69,6 @@ var SomeClass = (function () { }; return SomeClass; })(); -var whitespace1 = React.createElement("div", null); -var whitespace2 = React.createElement("div", null, p); +var whitespace1 = React.createElement("div", null, " "); +var whitespace2 = React.createElement("div", null, " ", p, " "); var whitespace3 = React.createElement("div", null, p); diff --git a/tests/baselines/reference/tsxReactEmit3.js b/tests/baselines/reference/tsxReactEmit3.js index 1a6ba037230..23910548534 100644 --- a/tests/baselines/reference/tsxReactEmit3.js +++ b/tests/baselines/reference/tsxReactEmit3.js @@ -8,4 +8,4 @@ declare var Foo, Bar, baz; q s ; //// [tsxReactEmit3.js] -React.createElement(Foo, null, React.createElement(Bar, null, "q "), React.createElement(Bar, null), "s ", React.createElement(Bar, null), React.createElement(Bar, null)); +React.createElement(Foo, null, " ", React.createElement(Bar, null, " q "), " ", React.createElement(Bar, null), " s ", React.createElement(Bar, null), React.createElement(Bar, null)); diff --git a/tests/baselines/reference/tsxReactEmitWhitespace.js b/tests/baselines/reference/tsxReactEmitWhitespace.js index a124ce73312..a1b5894106f 100644 --- a/tests/baselines/reference/tsxReactEmitWhitespace.js +++ b/tests/baselines/reference/tsxReactEmitWhitespace.js @@ -57,17 +57,17 @@ var p = 0; // WHITESPACE, DO NOT RUN 'FORMAT DOCUMENT' ON IT var p = 0; // Emit " " -React.createElement("div", null); +React.createElement("div", null, " "); // Emit " ", p, " " -React.createElement("div", null, p); +React.createElement("div", null, " ", p, " "); // Emit only p React.createElement("div", null, p); // Emit only p React.createElement("div", null, p); // Emit " 3" -React.createElement("div", null, "3"); +React.createElement("div", null, " 3"); // Emit " 3 " -React.createElement("div", null, "3 "); +React.createElement("div", null, " 3 "); // Emit "3" React.createElement("div", null, "3"); // Emit no args diff --git a/tests/baselines/reference/tsxReactEmitWhitespace2.js b/tests/baselines/reference/tsxReactEmitWhitespace2.js new file mode 100644 index 00000000000..091a193cdc5 --- /dev/null +++ b/tests/baselines/reference/tsxReactEmitWhitespace2.js @@ -0,0 +1,25 @@ +//// [tsxReactEmitWhitespace2.tsx] +declare module JSX { + interface Element { } + interface IntrinsicElements { + [s: string]: any; + } +} +declare var React: any; + +// Emit ' word' in the last string +
word code word
; +// Same here +
code word
; +// And here +
word
; + + + +//// [tsxReactEmitWhitespace2.js] +// Emit ' word' in the last string +React.createElement("div", null, "word ", React.createElement("code", null, "code"), " word"); +// Same here +React.createElement("div", null, React.createElement("code", null, "code"), " word"); +// And here +React.createElement("div", null, React.createElement("code", null), " word"); diff --git a/tests/baselines/reference/tsxReactEmitWhitespace2.symbols b/tests/baselines/reference/tsxReactEmitWhitespace2.symbols new file mode 100644 index 00000000000..44ff4cba292 --- /dev/null +++ b/tests/baselines/reference/tsxReactEmitWhitespace2.symbols @@ -0,0 +1,38 @@ +=== tests/cases/conformance/jsx/tsxReactEmitWhitespace2.tsx === +declare module JSX { +>JSX : Symbol(JSX, Decl(tsxReactEmitWhitespace2.tsx, 0, 0)) + + interface Element { } +>Element : Symbol(Element, Decl(tsxReactEmitWhitespace2.tsx, 0, 20)) + + interface IntrinsicElements { +>IntrinsicElements : Symbol(IntrinsicElements, Decl(tsxReactEmitWhitespace2.tsx, 1, 22)) + + [s: string]: any; +>s : Symbol(s, Decl(tsxReactEmitWhitespace2.tsx, 3, 3)) + } +} +declare var React: any; +>React : Symbol(React, Decl(tsxReactEmitWhitespace2.tsx, 6, 11)) + +// Emit ' word' in the last string +
word code word
; +>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmitWhitespace2.tsx, 1, 22)) +>code : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmitWhitespace2.tsx, 1, 22)) +>code : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmitWhitespace2.tsx, 1, 22)) +>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmitWhitespace2.tsx, 1, 22)) + +// Same here +
code word
; +>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmitWhitespace2.tsx, 1, 22)) +>code : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmitWhitespace2.tsx, 1, 22)) +>code : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmitWhitespace2.tsx, 1, 22)) +>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmitWhitespace2.tsx, 1, 22)) + +// And here +
word
; +>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmitWhitespace2.tsx, 1, 22)) +>code : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmitWhitespace2.tsx, 1, 22)) +>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmitWhitespace2.tsx, 1, 22)) + + diff --git a/tests/baselines/reference/tsxReactEmitWhitespace2.types b/tests/baselines/reference/tsxReactEmitWhitespace2.types new file mode 100644 index 00000000000..7287e59b9b1 --- /dev/null +++ b/tests/baselines/reference/tsxReactEmitWhitespace2.types @@ -0,0 +1,44 @@ +=== tests/cases/conformance/jsx/tsxReactEmitWhitespace2.tsx === +declare module JSX { +>JSX : any + + interface Element { } +>Element : Element + + interface IntrinsicElements { +>IntrinsicElements : IntrinsicElements + + [s: string]: any; +>s : string + } +} +declare var React: any; +>React : any + +// Emit ' word' in the last string +
word code word
; +>
word code word
: JSX.Element +>div : any +>code : JSX.Element +>code : any +>code : any +>div : any + +// Same here +
code word
; +>
code word
: JSX.Element +>div : any +>code : JSX.Element +>code : any +>code : any +>div : any + +// And here +
word
; +>
word
: JSX.Element +>div : any +> : JSX.Element +>code : any +>div : any + + diff --git a/tests/cases/conformance/jsx/tsxReactEmitWhitespace2.tsx b/tests/cases/conformance/jsx/tsxReactEmitWhitespace2.tsx new file mode 100644 index 00000000000..964064979ec --- /dev/null +++ b/tests/cases/conformance/jsx/tsxReactEmitWhitespace2.tsx @@ -0,0 +1,17 @@ +//@filename: file.tsx +//@jsx: react +declare module JSX { + interface Element { } + interface IntrinsicElements { + [s: string]: any; + } +} +declare var React: any; + +// Emit ' word' in the last string +
word code word
; +// Same here +
code word
; +// And here +
word
; +