Skip to content

Commit d67f0af

Browse files
authored
fix(jsx): correct source location when react-jsx and whitespace before jsx (#61534)
1 parent f09a0e5 commit d67f0af

File tree

22 files changed

+42
-40
lines changed

22 files changed

+42
-40
lines changed

src/compiler/transformers/jsx.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
createExpressionForJsxFragment,
88
createExpressionFromEntityName,
99
createJsxFactoryExpression,
10+
createRange,
1011
Debug,
1112
emptyArray,
1213
Expression,
@@ -70,6 +71,7 @@ import {
7071
setParentRecursive,
7172
setTextRange,
7273
singleOrUndefined,
74+
skipTrivia,
7375
SourceFile,
7476
spanMap,
7577
startOnNewLine,
@@ -283,17 +285,17 @@ export function transformJsx(context: TransformationContext): (x: SourceFile | B
283285

284286
function visitJsxElement(node: JsxElement, isChild: boolean) {
285287
const tagTransform = shouldUseCreateElement(node.openingElement) ? visitJsxOpeningLikeElementCreateElement : visitJsxOpeningLikeElementJSX;
286-
return tagTransform(node.openingElement, node.children, isChild, /*location*/ node);
288+
return tagTransform(node.openingElement, node.children, isChild, /*location*/ createRange(skipTrivia(currentSourceFile.text, node.pos), node.end));
287289
}
288290

289291
function visitJsxSelfClosingElement(node: JsxSelfClosingElement, isChild: boolean) {
290292
const tagTransform = shouldUseCreateElement(node) ? visitJsxOpeningLikeElementCreateElement : visitJsxOpeningLikeElementJSX;
291-
return tagTransform(node, /*children*/ undefined, isChild, /*location*/ node);
293+
return tagTransform(node, /*children*/ undefined, isChild, /*location*/ createRange(skipTrivia(currentSourceFile.text, node.pos), node.end));
292294
}
293295

294296
function visitJsxFragment(node: JsxFragment, isChild: boolean) {
295297
const tagTransform = currentFileState.importSpecifier === undefined ? visitJsxOpeningFragmentCreateElement : visitJsxOpeningFragmentJSX;
296-
return tagTransform(node.openingFragment, node.children, isChild, /*location*/ node);
298+
return tagTransform(node.openingFragment, node.children, isChild, /*location*/ createRange(skipTrivia(currentSourceFile.text, node.pos), node.end));
297299
}
298300

299301
function convertJsxChildrenToChildrenPropObject(children: readonly JsxChild[]) {

tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsxdev,module=commonjs,moduledetection=auto).js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,6 @@ const jsx_dev_runtime_1 = require("react/jsx-dev-runtime");
2929
const _jsxFileName = "commentsOnJSXExpressionsArePreserved.tsx";
3030
class Component {
3131
render() {
32-
return (0, jsx_dev_runtime_1.jsxDEV)("div", { children: null /* preserved */ }, void 0, false, { fileName: _jsxFileName, lineNumber: 5, columnNumber: 15 }, this);
32+
return (0, jsx_dev_runtime_1.jsxDEV)("div", { children: null /* preserved */ }, void 0, false, { fileName: _jsxFileName, lineNumber: 5, columnNumber: 16 }, this);
3333
}
3434
}

tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsxdev,module=commonjs,moduledetection=force).js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,6 @@ const jsx_dev_runtime_1 = require("react/jsx-dev-runtime");
2929
const _jsxFileName = "commentsOnJSXExpressionsArePreserved.tsx";
3030
class Component {
3131
render() {
32-
return (0, jsx_dev_runtime_1.jsxDEV)("div", { children: null /* preserved */ }, void 0, false, { fileName: _jsxFileName, lineNumber: 5, columnNumber: 15 }, this);
32+
return (0, jsx_dev_runtime_1.jsxDEV)("div", { children: null /* preserved */ }, void 0, false, { fileName: _jsxFileName, lineNumber: 5, columnNumber: 16 }, this);
3333
}
3434
}

tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsxdev,module=commonjs,moduledetection=legacy).js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,6 @@ class Component {
2727
const _jsxFileName = "commentsOnJSXExpressionsArePreserved.tsx";
2828
class Component {
2929
render() {
30-
return (0, _a.jsxDEV)("div", { children: null /* preserved */ }, void 0, false, { fileName: _jsxFileName, lineNumber: 5, columnNumber: 15 }, this);
30+
return (0, _a.jsxDEV)("div", { children: null /* preserved */ }, void 0, false, { fileName: _jsxFileName, lineNumber: 5, columnNumber: 16 }, this);
3131
}
3232
}

tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsxdev,module=system,moduledetection=auto).js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ System.register(["react/jsx-dev-runtime"], function (exports_1, context_1) {
3737
_jsxFileName = "commentsOnJSXExpressionsArePreserved.tsx";
3838
Component = class Component {
3939
render() {
40-
return _jsxDEV("div", { children: null /* preserved */ }, void 0, false, { fileName: _jsxFileName, lineNumber: 5, columnNumber: 15 }, this);
40+
return _jsxDEV("div", { children: null /* preserved */ }, void 0, false, { fileName: _jsxFileName, lineNumber: 5, columnNumber: 16 }, this);
4141
}
4242
};
4343
}

tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsxdev,module=system,moduledetection=force).js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ System.register(["react/jsx-dev-runtime"], function (exports_1, context_1) {
3737
_jsxFileName = "commentsOnJSXExpressionsArePreserved.tsx";
3838
Component = class Component {
3939
render() {
40-
return _jsxDEV("div", { children: null /* preserved */ }, void 0, false, { fileName: _jsxFileName, lineNumber: 5, columnNumber: 15 }, this);
40+
return _jsxDEV("div", { children: null /* preserved */ }, void 0, false, { fileName: _jsxFileName, lineNumber: 5, columnNumber: 16 }, this);
4141
}
4242
};
4343
}

tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsxdev,module=system,moduledetection=legacy).js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,6 @@ class Component {
2727
const _jsxFileName = "commentsOnJSXExpressionsArePreserved.tsx";
2828
class Component {
2929
render() {
30-
return _jsxDEV("div", { children: null /* preserved */ }, void 0, false, { fileName: _jsxFileName, lineNumber: 5, columnNumber: 15 }, this);
30+
return _jsxDEV("div", { children: null /* preserved */ }, void 0, false, { fileName: _jsxFileName, lineNumber: 5, columnNumber: 16 }, this);
3131
}
3232
}

tests/baselines/reference/jsxEmptyExpressionNotCountedAsChild(jsx=react-jsxdev).js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
2525
const jsx_dev_runtime_1 = require("react/jsx-dev-runtime");
2626
const _jsxFileName = "jsxEmptyExpressionNotCountedAsChild.tsx";
2727
function Wrapper(props) {
28-
return (0, jsx_dev_runtime_1.jsxDEV)("div", { children: props.children }, void 0, false, { fileName: _jsxFileName, lineNumber: 9, columnNumber: 11 }, this);
28+
return (0, jsx_dev_runtime_1.jsxDEV)("div", { children: props.children }, void 0, false, { fileName: _jsxFileName, lineNumber: 9, columnNumber: 12 }, this);
2929
}
30-
const element = ((0, jsx_dev_runtime_1.jsxDEV)(Wrapper, { children: (0, jsx_dev_runtime_1.jsxDEV)("div", { children: "Hello" }, void 0, false, { fileName: _jsxFileName, lineNumber: 15, columnNumber: 6 }, this) }, void 0, false, { fileName: _jsxFileName, lineNumber: 12, columnNumber: 18 }, this));
30+
const element = ((0, jsx_dev_runtime_1.jsxDEV)(Wrapper, { children: (0, jsx_dev_runtime_1.jsxDEV)("div", { children: "Hello" }, void 0, false, { fileName: _jsxFileName, lineNumber: 15, columnNumber: 6 }, this) }, void 0, false, { fileName: _jsxFileName, lineNumber: 13, columnNumber: 5 }, this));

tests/baselines/reference/jsxJsxsCjsTransformChildren(jsx=react-jsxdev).js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,4 @@ Object.defineProperty(exports, "__esModule", { value: true });
1313
const jsx_dev_runtime_1 = require("react/jsx-dev-runtime");
1414
const _jsxFileName = "jsxJsxsCjsTransformChildren.tsx";
1515
/// <reference path="/.lib/react16.d.ts" />
16-
const a = (0, jsx_dev_runtime_1.jsxDEV)("div", { children: "text" }, void 0, false, { fileName: _jsxFileName, lineNumber: 2, columnNumber: 10 }, this);
16+
const a = (0, jsx_dev_runtime_1.jsxDEV)("div", { children: "text" }, void 0, false, { fileName: _jsxFileName, lineNumber: 2, columnNumber: 11 }, this);

tests/baselines/reference/jsxJsxsCjsTransformCustomImport(jsx=react-jsxdev).js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,4 @@ Object.defineProperty(exports, "__esModule", { value: true });
1616
const jsx_dev_runtime_1 = require("preact/jsx-dev-runtime");
1717
const _jsxFileName = "jsxJsxsCjsTransformCustomImport.tsx";
1818
/// <reference path="/.lib/react16.d.ts" />
19-
const a = (0, jsx_dev_runtime_1.jsxDEV)(jsx_dev_runtime_1.Fragment, { children: [(0, jsx_dev_runtime_1.jsxDEV)("p", {}, void 0, false, { fileName: _jsxFileName, lineNumber: 3, columnNumber: 3 }, this), "text", (0, jsx_dev_runtime_1.jsxDEV)("div", { className: "foo" }, void 0, false, { fileName: _jsxFileName, lineNumber: 5, columnNumber: 3 }, this)] }, void 0, true, { fileName: _jsxFileName, lineNumber: 2, columnNumber: 10 }, this);
19+
const a = (0, jsx_dev_runtime_1.jsxDEV)(jsx_dev_runtime_1.Fragment, { children: [(0, jsx_dev_runtime_1.jsxDEV)("p", {}, void 0, false, { fileName: _jsxFileName, lineNumber: 3, columnNumber: 3 }, this), "text", (0, jsx_dev_runtime_1.jsxDEV)("div", { className: "foo" }, void 0, false, { fileName: _jsxFileName, lineNumber: 5, columnNumber: 3 }, this)] }, void 0, true, { fileName: _jsxFileName, lineNumber: 2, columnNumber: 11 }, this);

0 commit comments

Comments
 (0)