mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-06-10 18:04:18 -05:00
Fix React whitespace emit #4376
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -8,4 +8,4 @@ declare var Foo, Bar, baz;
|
||||
<Foo> <Bar> q </Bar> <Bar/> s <Bar/><Bar/></Foo>;
|
||||
|
||||
//// [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));
|
||||
|
||||
@@ -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
|
||||
|
||||
25
tests/baselines/reference/tsxReactEmitWhitespace2.js
Normal file
25
tests/baselines/reference/tsxReactEmitWhitespace2.js
Normal file
@@ -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
|
||||
<div>word <code>code</code> word</div>;
|
||||
// Same here
|
||||
<div><code>code</code> word</div>;
|
||||
// And here
|
||||
<div><code /> word</div>;
|
||||
|
||||
|
||||
|
||||
//// [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");
|
||||
38
tests/baselines/reference/tsxReactEmitWhitespace2.symbols
Normal file
38
tests/baselines/reference/tsxReactEmitWhitespace2.symbols
Normal file
@@ -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
|
||||
<div>word <code>code</code> word</div>;
|
||||
>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
|
||||
<div><code>code</code> word</div>;
|
||||
>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
|
||||
<div><code /> word</div>;
|
||||
>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))
|
||||
|
||||
|
||||
44
tests/baselines/reference/tsxReactEmitWhitespace2.types
Normal file
44
tests/baselines/reference/tsxReactEmitWhitespace2.types
Normal file
@@ -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
|
||||
<div>word <code>code</code> word</div>;
|
||||
><div>word <code>code</code> word</div> : JSX.Element
|
||||
>div : any
|
||||
><code>code</code> : JSX.Element
|
||||
>code : any
|
||||
>code : any
|
||||
>div : any
|
||||
|
||||
// Same here
|
||||
<div><code>code</code> word</div>;
|
||||
><div><code>code</code> word</div> : JSX.Element
|
||||
>div : any
|
||||
><code>code</code> : JSX.Element
|
||||
>code : any
|
||||
>code : any
|
||||
>div : any
|
||||
|
||||
// And here
|
||||
<div><code /> word</div>;
|
||||
><div><code /> word</div> : JSX.Element
|
||||
>div : any
|
||||
><code /> : JSX.Element
|
||||
>code : any
|
||||
>div : any
|
||||
|
||||
|
||||
17
tests/cases/conformance/jsx/tsxReactEmitWhitespace2.tsx
Normal file
17
tests/cases/conformance/jsx/tsxReactEmitWhitespace2.tsx
Normal file
@@ -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
|
||||
<div>word <code>code</code> word</div>;
|
||||
// Same here
|
||||
<div><code>code</code> word</div>;
|
||||
// And here
|
||||
<div><code /> word</div>;
|
||||
|
||||
Reference in New Issue
Block a user