diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts
index 3432b0b3c3b..5fb7e97863e 100644
--- a/src/compiler/emitter.ts
+++ b/src/compiler/emitter.ts
@@ -2864,7 +2864,8 @@ namespace ts {
}
pos = writeTokenText(token, writer, pos);
if (isSimilarNode && contextNode.end !== pos) {
- emitTrailingCommentsOfPosition(pos, /*prefixSpace*/ true);
+ const isJsxExprContext = contextNode.kind === SyntaxKind.JsxExpression;
+ emitTrailingCommentsOfPosition(pos, /*prefixSpace*/ !isJsxExprContext, /*forceNoNewline*/ isJsxExprContext);
}
return pos;
}
@@ -3421,12 +3422,35 @@ namespace ts {
writePunctuation("}");
}
+ function hasTrailingCommentsAtPosition(pos: number) {
+ let result = false;
+ forEachTrailingCommentRange(currentSourceFile?.text || "", pos + 1, () => result = true);
+ return result;
+ }
+
+ function hasLeadingCommentsAtPosition(pos: number) {
+ let result = false;
+ forEachLeadingCommentRange(currentSourceFile?.text || "", pos + 1, () => result = true);
+ return result;
+ }
+
+ function hasCommentsAtPosition(pos: number) {
+ return hasTrailingCommentsAtPosition(pos) || hasLeadingCommentsAtPosition(pos);
+ }
+
function emitJsxExpression(node: JsxExpression) {
- if (node.expression) {
- writePunctuation("{");
+ if (node.expression || (!commentsDisabled && !nodeIsSynthesized(node) && hasCommentsAtPosition(node.pos))) { // preserve empty expressions if they contain comments!
+ const isMultiline = currentSourceFile && !nodeIsSynthesized(node) && getLineAndCharacterOfPosition(currentSourceFile, node.pos).line !== getLineAndCharacterOfPosition(currentSourceFile, node.end).line;
+ if (isMultiline) {
+ writer.increaseIndent();
+ }
+ const end = emitTokenWithComment(SyntaxKind.OpenBraceToken, node.pos, writePunctuation, node);
emit(node.dotDotDotToken);
emitExpression(node.expression);
- writePunctuation("}");
+ emitTokenWithComment(SyntaxKind.CloseBraceToken, node.expression?.end || end, writePunctuation, node);
+ if (isMultiline) {
+ writer.decreaseIndent();
+ }
}
}
@@ -5274,15 +5298,27 @@ namespace ts {
}
}
- function emitTrailingCommentsOfPosition(pos: number, prefixSpace?: boolean) {
+ function emitTrailingCommentsOfPosition(pos: number, prefixSpace?: boolean, forceNoNewline?: boolean) {
if (commentsDisabled) {
return;
}
enterComment();
- forEachTrailingCommentToEmit(pos, prefixSpace ? emitTrailingComment : emitTrailingCommentOfPosition);
+ forEachTrailingCommentToEmit(pos, prefixSpace ? emitTrailingComment : forceNoNewline ? emitTrailingCommentOfPositionNoNewline : emitTrailingCommentOfPosition);
exitComment();
}
+ function emitTrailingCommentOfPositionNoNewline(commentPos: number, commentEnd: number, kind: SyntaxKind) {
+ // trailing comments of a position are emitted at /*trailing comment1 */space/*trailing comment*/space
+
+ emitPos(commentPos);
+ writeCommentRange(currentSourceFile!.text, getCurrentLineMap(), writer, commentPos, commentEnd, newLine);
+ emitPos(commentEnd);
+
+ if (kind === SyntaxKind.SingleLineCommentTrivia) {
+ writer.writeLine(); // still write a newline for single-line comments, so closing tokens aren't written on the same line
+ }
+ }
+
function emitTrailingCommentOfPosition(commentPos: number, commentEnd: number, _kind: SyntaxKind, hasTrailingNewLine: boolean) {
// trailing comments of a position are emitted at /*trailing comment1 */space/*trailing comment*/space
diff --git a/src/compiler/transformers/module/module.ts b/src/compiler/transformers/module/module.ts
index b3053f7b137..12871142561 100644
--- a/src/compiler/transformers/module/module.ts
+++ b/src/compiler/transformers/module/module.ts
@@ -1790,7 +1790,7 @@ namespace ts {
const name = importDeclaration.propertyName || importDeclaration.name;
return setTextRange(
factory.createPropertyAccessExpression(
- factory.getGeneratedNameForNode(importDeclaration.parent.parent.parent),
+ factory.getGeneratedNameForNode(importDeclaration.parent?.parent?.parent || importDeclaration),
factory.cloneNode(name)
),
/*location*/ node
diff --git a/src/compiler/transformers/module/system.ts b/src/compiler/transformers/module/system.ts
index 07e99ed1261..5935a3e7f5e 100644
--- a/src/compiler/transformers/module/system.ts
+++ b/src/compiler/transformers/module/system.ts
@@ -1678,7 +1678,7 @@ namespace ts {
factory.createPropertyAssignment(
factory.cloneNode(name),
factory.createPropertyAccessExpression(
- factory.getGeneratedNameForNode(importDeclaration.parent.parent.parent),
+ factory.getGeneratedNameForNode(importDeclaration.parent?.parent?.parent || importDeclaration),
factory.cloneNode(importDeclaration.propertyName || importDeclaration.name)
),
),
@@ -1747,7 +1747,7 @@ namespace ts {
else if (isImportSpecifier(importDeclaration)) {
return setTextRange(
factory.createPropertyAccessExpression(
- factory.getGeneratedNameForNode(importDeclaration.parent.parent.parent),
+ factory.getGeneratedNameForNode(importDeclaration.parent?.parent?.parent || importDeclaration),
factory.cloneNode(importDeclaration.propertyName || importDeclaration.name)
),
/*location*/ node
diff --git a/tests/baselines/reference/commentEmittingInPreserveJsx1.js b/tests/baselines/reference/commentEmittingInPreserveJsx1.js
index 45e2148e007..5f510427b2c 100644
--- a/tests/baselines/reference/commentEmittingInPreserveJsx1.js
+++ b/tests/baselines/reference/commentEmittingInPreserveJsx1.js
@@ -39,19 +39,21 @@ var React = require("react");
;
// Not Comment
-
+ {
+ //Comment just Fine
+ }
// Another not Comment
;
// Not Comment
{
-//Comment just Fine
-"Hi"}
+ //Comment just Fine
+ "Hi"}
// Another not Comment
;
/* Not Comment */
{
-//Comment just Fine
-"Hi"}
+ //Comment just Fine
+ "Hi"}
;
diff --git a/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=preserve,module=commonjs).js b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=preserve,module=commonjs).js
new file mode 100644
index 00000000000..f68279f3f58
--- /dev/null
+++ b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=preserve,module=commonjs).js
@@ -0,0 +1,44 @@
+//// [commentsOnJSXExpressionsArePreserved.tsx]
+// file is intentionally not a module - this tests for a crash in the module/system transforms alongside the `react-jsx` and `react-jsxdev` outputs
+namespace JSX {}
+class Component {
+ render() {
+ return
+ {/* missing */}
+ {null/* preserved */}
+ {
+ // ??? 1
+ }
+ { // ??? 2
+ }
+ {// ??? 3
+ }
+ {
+ // ??? 4
+ /* ??? 5 */}
+
;
+ }
+}
+
+//// [commentsOnJSXExpressionsArePreserved.jsx]
+var Component = /** @class */ (function () {
+ function Component() {
+ }
+ Component.prototype.render = function () {
+ return
+ {/* missing */}
+ {null /* preserved */}
+ {
+ // ??? 1
+ }
+ {// ??? 2
+ }
+ {// ??? 3
+ }
+ {
+ // ??? 4
+ /* ??? 5 */ }
+
;
+ };
+ return Component;
+}());
diff --git a/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=preserve,module=commonjs).symbols b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=preserve,module=commonjs).symbols
new file mode 100644
index 00000000000..95b7eeda062
--- /dev/null
+++ b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=preserve,module=commonjs).symbols
@@ -0,0 +1,27 @@
+=== tests/cases/compiler/commentsOnJSXExpressionsArePreserved.tsx ===
+// file is intentionally not a module - this tests for a crash in the module/system transforms alongside the `react-jsx` and `react-jsxdev` outputs
+namespace JSX {}
+>JSX : Symbol(JSX, Decl(commentsOnJSXExpressionsArePreserved.tsx, 0, 0))
+
+class Component {
+>Component : Symbol(Component, Decl(commentsOnJSXExpressionsArePreserved.tsx, 1, 16))
+
+ render() {
+>render : Symbol(Component.render, Decl(commentsOnJSXExpressionsArePreserved.tsx, 2, 17))
+
+ return
+ {/* missing */}
+ {null/* preserved */}
+ {
+ // ??? 1
+ }
+ { // ??? 2
+ }
+ {// ??? 3
+ }
+ {
+ // ??? 4
+ /* ??? 5 */}
+
;
+ }
+}
diff --git a/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=preserve,module=commonjs).types b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=preserve,module=commonjs).types
new file mode 100644
index 00000000000..113455cf53d
--- /dev/null
+++ b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=preserve,module=commonjs).types
@@ -0,0 +1,30 @@
+=== tests/cases/compiler/commentsOnJSXExpressionsArePreserved.tsx ===
+// file is intentionally not a module - this tests for a crash in the module/system transforms alongside the `react-jsx` and `react-jsxdev` outputs
+namespace JSX {}
+class Component {
+>Component : Component
+
+ render() {
+>render : () => any
+
+ return
+>
{/* missing */} {null/* preserved */} { // ??? 1 } { // ??? 2 } {// ??? 3 } { // ??? 4 /* ??? 5 */}
: error
+>div : any
+
+ {/* missing */}
+ {null/* preserved */}
+>null : null
+ {
+ // ??? 1
+ }
+ { // ??? 2
+ }
+ {// ??? 3
+ }
+ {
+ // ??? 4
+ /* ??? 5 */}
+
;
+>div : any
+ }
+}
diff --git a/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=preserve,module=system).js b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=preserve,module=system).js
new file mode 100644
index 00000000000..f68279f3f58
--- /dev/null
+++ b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=preserve,module=system).js
@@ -0,0 +1,44 @@
+//// [commentsOnJSXExpressionsArePreserved.tsx]
+// file is intentionally not a module - this tests for a crash in the module/system transforms alongside the `react-jsx` and `react-jsxdev` outputs
+namespace JSX {}
+class Component {
+ render() {
+ return
+ {/* missing */}
+ {null/* preserved */}
+ {
+ // ??? 1
+ }
+ { // ??? 2
+ }
+ {// ??? 3
+ }
+ {
+ // ??? 4
+ /* ??? 5 */}
+
;
+ }
+}
+
+//// [commentsOnJSXExpressionsArePreserved.jsx]
+var Component = /** @class */ (function () {
+ function Component() {
+ }
+ Component.prototype.render = function () {
+ return
+ {/* missing */}
+ {null /* preserved */}
+ {
+ // ??? 1
+ }
+ {// ??? 2
+ }
+ {// ??? 3
+ }
+ {
+ // ??? 4
+ /* ??? 5 */ }
+
;
+ };
+ return Component;
+}());
diff --git a/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=preserve,module=system).symbols b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=preserve,module=system).symbols
new file mode 100644
index 00000000000..95b7eeda062
--- /dev/null
+++ b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=preserve,module=system).symbols
@@ -0,0 +1,27 @@
+=== tests/cases/compiler/commentsOnJSXExpressionsArePreserved.tsx ===
+// file is intentionally not a module - this tests for a crash in the module/system transforms alongside the `react-jsx` and `react-jsxdev` outputs
+namespace JSX {}
+>JSX : Symbol(JSX, Decl(commentsOnJSXExpressionsArePreserved.tsx, 0, 0))
+
+class Component {
+>Component : Symbol(Component, Decl(commentsOnJSXExpressionsArePreserved.tsx, 1, 16))
+
+ render() {
+>render : Symbol(Component.render, Decl(commentsOnJSXExpressionsArePreserved.tsx, 2, 17))
+
+ return
+ {/* missing */}
+ {null/* preserved */}
+ {
+ // ??? 1
+ }
+ { // ??? 2
+ }
+ {// ??? 3
+ }
+ {
+ // ??? 4
+ /* ??? 5 */}
+
;
+ }
+}
diff --git a/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=preserve,module=system).types b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=preserve,module=system).types
new file mode 100644
index 00000000000..113455cf53d
--- /dev/null
+++ b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=preserve,module=system).types
@@ -0,0 +1,30 @@
+=== tests/cases/compiler/commentsOnJSXExpressionsArePreserved.tsx ===
+// file is intentionally not a module - this tests for a crash in the module/system transforms alongside the `react-jsx` and `react-jsxdev` outputs
+namespace JSX {}
+class Component {
+>Component : Component
+
+ render() {
+>render : () => any
+
+ return
+>
{/* missing */} {null/* preserved */} { // ??? 1 } { // ??? 2 } {// ??? 3 } { // ??? 4 /* ??? 5 */}
: error
+>div : any
+
+ {/* missing */}
+ {null/* preserved */}
+>null : null
+ {
+ // ??? 1
+ }
+ { // ??? 2
+ }
+ {// ??? 3
+ }
+ {
+ // ??? 4
+ /* ??? 5 */}
+
;
+>div : any
+ }
+}
diff --git a/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react,module=commonjs).errors.txt b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react,module=commonjs).errors.txt
new file mode 100644
index 00000000000..388601f8ae8
--- /dev/null
+++ b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react,module=commonjs).errors.txt
@@ -0,0 +1,26 @@
+tests/cases/compiler/commentsOnJSXExpressionsArePreserved.tsx(5,17): error TS2304: Cannot find name 'React'.
+
+
+==== tests/cases/compiler/commentsOnJSXExpressionsArePreserved.tsx (1 errors) ====
+ // file is intentionally not a module - this tests for a crash in the module/system transforms alongside the `react-jsx` and `react-jsxdev` outputs
+ namespace JSX {}
+ class Component {
+ render() {
+ return
+ ~~~
+!!! error TS2304: Cannot find name 'React'.
+ {/* missing */}
+ {null/* preserved */}
+ {
+ // ??? 1
+ }
+ { // ??? 2
+ }
+ {// ??? 3
+ }
+ {
+ // ??? 4
+ /* ??? 5 */}
+
;
+ }
+ }
\ No newline at end of file
diff --git a/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react,module=commonjs).js b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react,module=commonjs).js
new file mode 100644
index 00000000000..5cc6523cd07
--- /dev/null
+++ b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react,module=commonjs).js
@@ -0,0 +1,31 @@
+//// [commentsOnJSXExpressionsArePreserved.tsx]
+// file is intentionally not a module - this tests for a crash in the module/system transforms alongside the `react-jsx` and `react-jsxdev` outputs
+namespace JSX {}
+class Component {
+ render() {
+ return
+ {/* missing */}
+ {null/* preserved */}
+ {
+ // ??? 1
+ }
+ { // ??? 2
+ }
+ {// ??? 3
+ }
+ {
+ // ??? 4
+ /* ??? 5 */}
+
;
+ }
+}
+
+//// [commentsOnJSXExpressionsArePreserved.js]
+var Component = /** @class */ (function () {
+ function Component() {
+ }
+ Component.prototype.render = function () {
+ return React.createElement("div", null, null /* preserved */);
+ };
+ return Component;
+}());
diff --git a/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react,module=commonjs).symbols b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react,module=commonjs).symbols
new file mode 100644
index 00000000000..95b7eeda062
--- /dev/null
+++ b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react,module=commonjs).symbols
@@ -0,0 +1,27 @@
+=== tests/cases/compiler/commentsOnJSXExpressionsArePreserved.tsx ===
+// file is intentionally not a module - this tests for a crash in the module/system transforms alongside the `react-jsx` and `react-jsxdev` outputs
+namespace JSX {}
+>JSX : Symbol(JSX, Decl(commentsOnJSXExpressionsArePreserved.tsx, 0, 0))
+
+class Component {
+>Component : Symbol(Component, Decl(commentsOnJSXExpressionsArePreserved.tsx, 1, 16))
+
+ render() {
+>render : Symbol(Component.render, Decl(commentsOnJSXExpressionsArePreserved.tsx, 2, 17))
+
+ return
+ {/* missing */}
+ {null/* preserved */}
+ {
+ // ??? 1
+ }
+ { // ??? 2
+ }
+ {// ??? 3
+ }
+ {
+ // ??? 4
+ /* ??? 5 */}
+
;
+ }
+}
diff --git a/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react,module=commonjs).types b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react,module=commonjs).types
new file mode 100644
index 00000000000..5acb76daa70
--- /dev/null
+++ b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react,module=commonjs).types
@@ -0,0 +1,30 @@
+=== tests/cases/compiler/commentsOnJSXExpressionsArePreserved.tsx ===
+// file is intentionally not a module - this tests for a crash in the module/system transforms alongside the `react-jsx` and `react-jsxdev` outputs
+namespace JSX {}
+class Component {
+>Component : Component
+
+ render() {
+>render : () => any
+
+ return
+>
{/* missing */} {null/* preserved */} { // ??? 1 } { // ??? 2 } {// ??? 3 } { // ??? 4 /* ??? 5 */}
: any
+>div : any
+
+ {/* missing */}
+ {null/* preserved */}
+>null : null
+ {
+ // ??? 1
+ }
+ { // ??? 2
+ }
+ {// ??? 3
+ }
+ {
+ // ??? 4
+ /* ??? 5 */}
+
;
+>div : any
+ }
+}
diff --git a/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react,module=system).errors.txt b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react,module=system).errors.txt
new file mode 100644
index 00000000000..388601f8ae8
--- /dev/null
+++ b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react,module=system).errors.txt
@@ -0,0 +1,26 @@
+tests/cases/compiler/commentsOnJSXExpressionsArePreserved.tsx(5,17): error TS2304: Cannot find name 'React'.
+
+
+==== tests/cases/compiler/commentsOnJSXExpressionsArePreserved.tsx (1 errors) ====
+ // file is intentionally not a module - this tests for a crash in the module/system transforms alongside the `react-jsx` and `react-jsxdev` outputs
+ namespace JSX {}
+ class Component {
+ render() {
+ return
+ ~~~
+!!! error TS2304: Cannot find name 'React'.
+ {/* missing */}
+ {null/* preserved */}
+ {
+ // ??? 1
+ }
+ { // ??? 2
+ }
+ {// ??? 3
+ }
+ {
+ // ??? 4
+ /* ??? 5 */}
+
;
+ }
+ }
\ No newline at end of file
diff --git a/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react,module=system).js b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react,module=system).js
new file mode 100644
index 00000000000..5cc6523cd07
--- /dev/null
+++ b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react,module=system).js
@@ -0,0 +1,31 @@
+//// [commentsOnJSXExpressionsArePreserved.tsx]
+// file is intentionally not a module - this tests for a crash in the module/system transforms alongside the `react-jsx` and `react-jsxdev` outputs
+namespace JSX {}
+class Component {
+ render() {
+ return
+ {/* missing */}
+ {null/* preserved */}
+ {
+ // ??? 1
+ }
+ { // ??? 2
+ }
+ {// ??? 3
+ }
+ {
+ // ??? 4
+ /* ??? 5 */}
+
;
+ }
+}
+
+//// [commentsOnJSXExpressionsArePreserved.js]
+var Component = /** @class */ (function () {
+ function Component() {
+ }
+ Component.prototype.render = function () {
+ return React.createElement("div", null, null /* preserved */);
+ };
+ return Component;
+}());
diff --git a/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react,module=system).symbols b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react,module=system).symbols
new file mode 100644
index 00000000000..95b7eeda062
--- /dev/null
+++ b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react,module=system).symbols
@@ -0,0 +1,27 @@
+=== tests/cases/compiler/commentsOnJSXExpressionsArePreserved.tsx ===
+// file is intentionally not a module - this tests for a crash in the module/system transforms alongside the `react-jsx` and `react-jsxdev` outputs
+namespace JSX {}
+>JSX : Symbol(JSX, Decl(commentsOnJSXExpressionsArePreserved.tsx, 0, 0))
+
+class Component {
+>Component : Symbol(Component, Decl(commentsOnJSXExpressionsArePreserved.tsx, 1, 16))
+
+ render() {
+>render : Symbol(Component.render, Decl(commentsOnJSXExpressionsArePreserved.tsx, 2, 17))
+
+ return
+ {/* missing */}
+ {null/* preserved */}
+ {
+ // ??? 1
+ }
+ { // ??? 2
+ }
+ {// ??? 3
+ }
+ {
+ // ??? 4
+ /* ??? 5 */}
+
;
+ }
+}
diff --git a/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react,module=system).types b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react,module=system).types
new file mode 100644
index 00000000000..5acb76daa70
--- /dev/null
+++ b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react,module=system).types
@@ -0,0 +1,30 @@
+=== tests/cases/compiler/commentsOnJSXExpressionsArePreserved.tsx ===
+// file is intentionally not a module - this tests for a crash in the module/system transforms alongside the `react-jsx` and `react-jsxdev` outputs
+namespace JSX {}
+class Component {
+>Component : Component
+
+ render() {
+>render : () => any
+
+ return
+>
{/* missing */} {null/* preserved */} { // ??? 1 } { // ??? 2 } {// ??? 3 } { // ??? 4 /* ??? 5 */}
: any
+>div : any
+
+ {/* missing */}
+ {null/* preserved */}
+>null : null
+ {
+ // ??? 1
+ }
+ { // ??? 2
+ }
+ {// ??? 3
+ }
+ {
+ // ??? 4
+ /* ??? 5 */}
+
;
+>div : any
+ }
+}
diff --git a/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsx,module=commonjs).errors.txt b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsx,module=commonjs).errors.txt
new file mode 100644
index 00000000000..0f9a371c783
--- /dev/null
+++ b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsx,module=commonjs).errors.txt
@@ -0,0 +1,39 @@
+tests/cases/compiler/commentsOnJSXExpressionsArePreserved.tsx(5,16): error TS2307: Cannot find module 'react/jsx-runtime' or its corresponding type declarations.
+
+
+==== tests/cases/compiler/commentsOnJSXExpressionsArePreserved.tsx (1 errors) ====
+ // file is intentionally not a module - this tests for a crash in the module/system transforms alongside the `react-jsx` and `react-jsxdev` outputs
+ namespace JSX {}
+ class Component {
+ render() {
+ return
+ ~~~~~
+ {/* missing */}
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ {null/* preserved */}
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ {
+ ~~~~~~~~~~~~~
+ // ??? 1
+ ~~~~~~~~~~~~~~~~~~~~~~~~
+ }
+ ~~~~~~~~~~~~~
+ { // ??? 2
+ ~~~~~~~~~~~~~~~~~~~~~~
+ }
+ ~~~~~~~~~~~~~
+ {// ??? 3
+ ~~~~~~~~~~~~~~~~~~~~~
+ }
+ ~~~~~~~~~~~~~
+ {
+ ~~~~~~~~~~~~~
+ // ??? 4
+ ~~~~~~~~~~~~~~~~~~~~~~~~
+ /* ??? 5 */}
+ ~~~~~~~~~~~~~~~~~~~~~~~~
+
;
+ ~~~~~~~~~~~~~~
+!!! error TS2307: Cannot find module 'react/jsx-runtime' or its corresponding type declarations.
+ }
+ }
\ No newline at end of file
diff --git a/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsx,module=commonjs).js b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsx,module=commonjs).js
new file mode 100644
index 00000000000..0a7d6bb920b
--- /dev/null
+++ b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsx,module=commonjs).js
@@ -0,0 +1,31 @@
+//// [commentsOnJSXExpressionsArePreserved.tsx]
+// file is intentionally not a module - this tests for a crash in the module/system transforms alongside the `react-jsx` and `react-jsxdev` outputs
+namespace JSX {}
+class Component {
+ render() {
+ return
+ {/* missing */}
+ {null/* preserved */}
+ {
+ // ??? 1
+ }
+ { // ??? 2
+ }
+ {// ??? 3
+ }
+ {
+ // ??? 4
+ /* ??? 5 */}
+
;
+ }
+}
+
+//// [commentsOnJSXExpressionsArePreserved.js]
+var Component = /** @class */ (function () {
+ function Component() {
+ }
+ Component.prototype.render = function () {
+ return _a.jsx("div", { children: null /* preserved */ }, void 0);
+ };
+ return Component;
+}());
diff --git a/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsx,module=commonjs).symbols b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsx,module=commonjs).symbols
new file mode 100644
index 00000000000..95b7eeda062
--- /dev/null
+++ b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsx,module=commonjs).symbols
@@ -0,0 +1,27 @@
+=== tests/cases/compiler/commentsOnJSXExpressionsArePreserved.tsx ===
+// file is intentionally not a module - this tests for a crash in the module/system transforms alongside the `react-jsx` and `react-jsxdev` outputs
+namespace JSX {}
+>JSX : Symbol(JSX, Decl(commentsOnJSXExpressionsArePreserved.tsx, 0, 0))
+
+class Component {
+>Component : Symbol(Component, Decl(commentsOnJSXExpressionsArePreserved.tsx, 1, 16))
+
+ render() {
+>render : Symbol(Component.render, Decl(commentsOnJSXExpressionsArePreserved.tsx, 2, 17))
+
+ return
+ {/* missing */}
+ {null/* preserved */}
+ {
+ // ??? 1
+ }
+ { // ??? 2
+ }
+ {// ??? 3
+ }
+ {
+ // ??? 4
+ /* ??? 5 */}
+
;
+ }
+}
diff --git a/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsx,module=commonjs).types b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsx,module=commonjs).types
new file mode 100644
index 00000000000..5acb76daa70
--- /dev/null
+++ b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsx,module=commonjs).types
@@ -0,0 +1,30 @@
+=== tests/cases/compiler/commentsOnJSXExpressionsArePreserved.tsx ===
+// file is intentionally not a module - this tests for a crash in the module/system transforms alongside the `react-jsx` and `react-jsxdev` outputs
+namespace JSX {}
+class Component {
+>Component : Component
+
+ render() {
+>render : () => any
+
+ return
+>
{/* missing */} {null/* preserved */} { // ??? 1 } { // ??? 2 } {// ??? 3 } { // ??? 4 /* ??? 5 */}
: any
+>div : any
+
+ {/* missing */}
+ {null/* preserved */}
+>null : null
+ {
+ // ??? 1
+ }
+ { // ??? 2
+ }
+ {// ??? 3
+ }
+ {
+ // ??? 4
+ /* ??? 5 */}
+
;
+>div : any
+ }
+}
diff --git a/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsx,module=system).errors.txt b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsx,module=system).errors.txt
new file mode 100644
index 00000000000..610a0fa29c5
--- /dev/null
+++ b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsx,module=system).errors.txt
@@ -0,0 +1,39 @@
+tests/cases/compiler/commentsOnJSXExpressionsArePreserved.tsx(5,16): error TS2792: Cannot find module 'react/jsx-runtime'. Did you mean to set the 'moduleResolution' option to 'node', or to add aliases to the 'paths' option?
+
+
+==== tests/cases/compiler/commentsOnJSXExpressionsArePreserved.tsx (1 errors) ====
+ // file is intentionally not a module - this tests for a crash in the module/system transforms alongside the `react-jsx` and `react-jsxdev` outputs
+ namespace JSX {}
+ class Component {
+ render() {
+ return
+ ~~~~~
+ {/* missing */}
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ {null/* preserved */}
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ {
+ ~~~~~~~~~~~~~
+ // ??? 1
+ ~~~~~~~~~~~~~~~~~~~~~~~~
+ }
+ ~~~~~~~~~~~~~
+ { // ??? 2
+ ~~~~~~~~~~~~~~~~~~~~~~
+ }
+ ~~~~~~~~~~~~~
+ {// ??? 3
+ ~~~~~~~~~~~~~~~~~~~~~
+ }
+ ~~~~~~~~~~~~~
+ {
+ ~~~~~~~~~~~~~
+ // ??? 4
+ ~~~~~~~~~~~~~~~~~~~~~~~~
+ /* ??? 5 */}
+ ~~~~~~~~~~~~~~~~~~~~~~~~
+
;
+ ~~~~~~~~~~~~~~
+!!! error TS2792: Cannot find module 'react/jsx-runtime'. Did you mean to set the 'moduleResolution' option to 'node', or to add aliases to the 'paths' option?
+ }
+ }
\ No newline at end of file
diff --git a/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsx,module=system).js b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsx,module=system).js
new file mode 100644
index 00000000000..c8b14c6198d
--- /dev/null
+++ b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsx,module=system).js
@@ -0,0 +1,31 @@
+//// [commentsOnJSXExpressionsArePreserved.tsx]
+// file is intentionally not a module - this tests for a crash in the module/system transforms alongside the `react-jsx` and `react-jsxdev` outputs
+namespace JSX {}
+class Component {
+ render() {
+ return
+ {/* missing */}
+ {null/* preserved */}
+ {
+ // ??? 1
+ }
+ { // ??? 2
+ }
+ {// ??? 3
+ }
+ {
+ // ??? 4
+ /* ??? 5 */}
+
;
+ }
+}
+
+//// [commentsOnJSXExpressionsArePreserved.js]
+var Component = /** @class */ (function () {
+ function Component() {
+ }
+ Component.prototype.render = function () {
+ return _jsx("div", { children: null /* preserved */ }, void 0);
+ };
+ return Component;
+}());
diff --git a/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsx,module=system).symbols b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsx,module=system).symbols
new file mode 100644
index 00000000000..95b7eeda062
--- /dev/null
+++ b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsx,module=system).symbols
@@ -0,0 +1,27 @@
+=== tests/cases/compiler/commentsOnJSXExpressionsArePreserved.tsx ===
+// file is intentionally not a module - this tests for a crash in the module/system transforms alongside the `react-jsx` and `react-jsxdev` outputs
+namespace JSX {}
+>JSX : Symbol(JSX, Decl(commentsOnJSXExpressionsArePreserved.tsx, 0, 0))
+
+class Component {
+>Component : Symbol(Component, Decl(commentsOnJSXExpressionsArePreserved.tsx, 1, 16))
+
+ render() {
+>render : Symbol(Component.render, Decl(commentsOnJSXExpressionsArePreserved.tsx, 2, 17))
+
+ return
+ {/* missing */}
+ {null/* preserved */}
+ {
+ // ??? 1
+ }
+ { // ??? 2
+ }
+ {// ??? 3
+ }
+ {
+ // ??? 4
+ /* ??? 5 */}
+
;
+ }
+}
diff --git a/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsx,module=system).types b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsx,module=system).types
new file mode 100644
index 00000000000..5acb76daa70
--- /dev/null
+++ b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsx,module=system).types
@@ -0,0 +1,30 @@
+=== tests/cases/compiler/commentsOnJSXExpressionsArePreserved.tsx ===
+// file is intentionally not a module - this tests for a crash in the module/system transforms alongside the `react-jsx` and `react-jsxdev` outputs
+namespace JSX {}
+class Component {
+>Component : Component
+
+ render() {
+>render : () => any
+
+ return
+>
{/* missing */} {null/* preserved */} { // ??? 1 } { // ??? 2 } {// ??? 3 } { // ??? 4 /* ??? 5 */}
: any
+>div : any
+
+ {/* missing */}
+ {null/* preserved */}
+>null : null
+ {
+ // ??? 1
+ }
+ { // ??? 2
+ }
+ {// ??? 3
+ }
+ {
+ // ??? 4
+ /* ??? 5 */}
+
;
+>div : any
+ }
+}
diff --git a/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsxdev,module=commonjs).errors.txt b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsxdev,module=commonjs).errors.txt
new file mode 100644
index 00000000000..7ecc135630b
--- /dev/null
+++ b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsxdev,module=commonjs).errors.txt
@@ -0,0 +1,39 @@
+tests/cases/compiler/commentsOnJSXExpressionsArePreserved.tsx(5,16): error TS2307: Cannot find module 'react/jsx-dev-runtime' or its corresponding type declarations.
+
+
+==== tests/cases/compiler/commentsOnJSXExpressionsArePreserved.tsx (1 errors) ====
+ // file is intentionally not a module - this tests for a crash in the module/system transforms alongside the `react-jsx` and `react-jsxdev` outputs
+ namespace JSX {}
+ class Component {
+ render() {
+ return
+ ~~~~~
+ {/* missing */}
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ {null/* preserved */}
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ {
+ ~~~~~~~~~~~~~
+ // ??? 1
+ ~~~~~~~~~~~~~~~~~~~~~~~~
+ }
+ ~~~~~~~~~~~~~
+ { // ??? 2
+ ~~~~~~~~~~~~~~~~~~~~~~
+ }
+ ~~~~~~~~~~~~~
+ {// ??? 3
+ ~~~~~~~~~~~~~~~~~~~~~
+ }
+ ~~~~~~~~~~~~~
+ {
+ ~~~~~~~~~~~~~
+ // ??? 4
+ ~~~~~~~~~~~~~~~~~~~~~~~~
+ /* ??? 5 */}
+ ~~~~~~~~~~~~~~~~~~~~~~~~
+
;
+ ~~~~~~~~~~~~~~
+!!! error TS2307: Cannot find module 'react/jsx-dev-runtime' or its corresponding type declarations.
+ }
+ }
\ No newline at end of file
diff --git a/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsxdev,module=commonjs).js b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsxdev,module=commonjs).js
new file mode 100644
index 00000000000..7956996a0e0
--- /dev/null
+++ b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsxdev,module=commonjs).js
@@ -0,0 +1,32 @@
+//// [commentsOnJSXExpressionsArePreserved.tsx]
+// file is intentionally not a module - this tests for a crash in the module/system transforms alongside the `react-jsx` and `react-jsxdev` outputs
+namespace JSX {}
+class Component {
+ render() {
+ return
+ {/* missing */}
+ {null/* preserved */}
+ {
+ // ??? 1
+ }
+ { // ??? 2
+ }
+ {// ??? 3
+ }
+ {
+ // ??? 4
+ /* ??? 5 */}
+
;
+ }
+}
+
+//// [commentsOnJSXExpressionsArePreserved.js]
+var _jsxFileName = "tests/cases/compiler/commentsOnJSXExpressionsArePreserved.tsx";
+var Component = /** @class */ (function () {
+ function Component() {
+ }
+ Component.prototype.render = function () {
+ return _a.jsxDEV("div", { children: null /* preserved */ }, void 0, false, { fileName: _jsxFileName, lineNumber: 5, columnNumber: 15 }, this);
+ };
+ return Component;
+}());
diff --git a/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsxdev,module=commonjs).symbols b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsxdev,module=commonjs).symbols
new file mode 100644
index 00000000000..95b7eeda062
--- /dev/null
+++ b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsxdev,module=commonjs).symbols
@@ -0,0 +1,27 @@
+=== tests/cases/compiler/commentsOnJSXExpressionsArePreserved.tsx ===
+// file is intentionally not a module - this tests for a crash in the module/system transforms alongside the `react-jsx` and `react-jsxdev` outputs
+namespace JSX {}
+>JSX : Symbol(JSX, Decl(commentsOnJSXExpressionsArePreserved.tsx, 0, 0))
+
+class Component {
+>Component : Symbol(Component, Decl(commentsOnJSXExpressionsArePreserved.tsx, 1, 16))
+
+ render() {
+>render : Symbol(Component.render, Decl(commentsOnJSXExpressionsArePreserved.tsx, 2, 17))
+
+ return
+ {/* missing */}
+ {null/* preserved */}
+ {
+ // ??? 1
+ }
+ { // ??? 2
+ }
+ {// ??? 3
+ }
+ {
+ // ??? 4
+ /* ??? 5 */}
+
;
+ }
+}
diff --git a/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsxdev,module=commonjs).types b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsxdev,module=commonjs).types
new file mode 100644
index 00000000000..5acb76daa70
--- /dev/null
+++ b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsxdev,module=commonjs).types
@@ -0,0 +1,30 @@
+=== tests/cases/compiler/commentsOnJSXExpressionsArePreserved.tsx ===
+// file is intentionally not a module - this tests for a crash in the module/system transforms alongside the `react-jsx` and `react-jsxdev` outputs
+namespace JSX {}
+class Component {
+>Component : Component
+
+ render() {
+>render : () => any
+
+ return
+>
{/* missing */} {null/* preserved */} { // ??? 1 } { // ??? 2 } {// ??? 3 } { // ??? 4 /* ??? 5 */}
: any
+>div : any
+
+ {/* missing */}
+ {null/* preserved */}
+>null : null
+ {
+ // ??? 1
+ }
+ { // ??? 2
+ }
+ {// ??? 3
+ }
+ {
+ // ??? 4
+ /* ??? 5 */}
+
;
+>div : any
+ }
+}
diff --git a/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsxdev,module=system).errors.txt b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsxdev,module=system).errors.txt
new file mode 100644
index 00000000000..072fbae9425
--- /dev/null
+++ b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsxdev,module=system).errors.txt
@@ -0,0 +1,39 @@
+tests/cases/compiler/commentsOnJSXExpressionsArePreserved.tsx(5,16): error TS2792: Cannot find module 'react/jsx-dev-runtime'. Did you mean to set the 'moduleResolution' option to 'node', or to add aliases to the 'paths' option?
+
+
+==== tests/cases/compiler/commentsOnJSXExpressionsArePreserved.tsx (1 errors) ====
+ // file is intentionally not a module - this tests for a crash in the module/system transforms alongside the `react-jsx` and `react-jsxdev` outputs
+ namespace JSX {}
+ class Component {
+ render() {
+ return
+ ~~~~~
+ {/* missing */}
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ {null/* preserved */}
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ {
+ ~~~~~~~~~~~~~
+ // ??? 1
+ ~~~~~~~~~~~~~~~~~~~~~~~~
+ }
+ ~~~~~~~~~~~~~
+ { // ??? 2
+ ~~~~~~~~~~~~~~~~~~~~~~
+ }
+ ~~~~~~~~~~~~~
+ {// ??? 3
+ ~~~~~~~~~~~~~~~~~~~~~
+ }
+ ~~~~~~~~~~~~~
+ {
+ ~~~~~~~~~~~~~
+ // ??? 4
+ ~~~~~~~~~~~~~~~~~~~~~~~~
+ /* ??? 5 */}
+ ~~~~~~~~~~~~~~~~~~~~~~~~
+
;
+ ~~~~~~~~~~~~~~
+!!! error TS2792: Cannot find module 'react/jsx-dev-runtime'. Did you mean to set the 'moduleResolution' option to 'node', or to add aliases to the 'paths' option?
+ }
+ }
\ No newline at end of file
diff --git a/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsxdev,module=system).js b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsxdev,module=system).js
new file mode 100644
index 00000000000..36b00916de4
--- /dev/null
+++ b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsxdev,module=system).js
@@ -0,0 +1,32 @@
+//// [commentsOnJSXExpressionsArePreserved.tsx]
+// file is intentionally not a module - this tests for a crash in the module/system transforms alongside the `react-jsx` and `react-jsxdev` outputs
+namespace JSX {}
+class Component {
+ render() {
+ return
+ {/* missing */}
+ {null/* preserved */}
+ {
+ // ??? 1
+ }
+ { // ??? 2
+ }
+ {// ??? 3
+ }
+ {
+ // ??? 4
+ /* ??? 5 */}
+
;
+ }
+}
+
+//// [commentsOnJSXExpressionsArePreserved.js]
+var _jsxFileName = "tests/cases/compiler/commentsOnJSXExpressionsArePreserved.tsx";
+var Component = /** @class */ (function () {
+ function Component() {
+ }
+ Component.prototype.render = function () {
+ return _jsxDEV("div", { children: null /* preserved */ }, void 0, false, { fileName: _jsxFileName, lineNumber: 5, columnNumber: 15 }, this);
+ };
+ return Component;
+}());
diff --git a/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsxdev,module=system).symbols b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsxdev,module=system).symbols
new file mode 100644
index 00000000000..95b7eeda062
--- /dev/null
+++ b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsxdev,module=system).symbols
@@ -0,0 +1,27 @@
+=== tests/cases/compiler/commentsOnJSXExpressionsArePreserved.tsx ===
+// file is intentionally not a module - this tests for a crash in the module/system transforms alongside the `react-jsx` and `react-jsxdev` outputs
+namespace JSX {}
+>JSX : Symbol(JSX, Decl(commentsOnJSXExpressionsArePreserved.tsx, 0, 0))
+
+class Component {
+>Component : Symbol(Component, Decl(commentsOnJSXExpressionsArePreserved.tsx, 1, 16))
+
+ render() {
+>render : Symbol(Component.render, Decl(commentsOnJSXExpressionsArePreserved.tsx, 2, 17))
+
+ return
+ {/* missing */}
+ {null/* preserved */}
+ {
+ // ??? 1
+ }
+ { // ??? 2
+ }
+ {// ??? 3
+ }
+ {
+ // ??? 4
+ /* ??? 5 */}
+
;
+ }
+}
diff --git a/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsxdev,module=system).types b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsxdev,module=system).types
new file mode 100644
index 00000000000..5acb76daa70
--- /dev/null
+++ b/tests/baselines/reference/commentsOnJSXExpressionsArePreserved(jsx=react-jsxdev,module=system).types
@@ -0,0 +1,30 @@
+=== tests/cases/compiler/commentsOnJSXExpressionsArePreserved.tsx ===
+// file is intentionally not a module - this tests for a crash in the module/system transforms alongside the `react-jsx` and `react-jsxdev` outputs
+namespace JSX {}
+class Component {
+>Component : Component
+
+ render() {
+>render : () => any
+
+ return
+>
{/* missing */} {null/* preserved */} { // ??? 1 } { // ??? 2 } {// ??? 3 } { // ??? 4 /* ??? 5 */}
: any
+>div : any
+
+ {/* missing */}
+ {null/* preserved */}
+>null : null
+ {
+ // ??? 1
+ }
+ { // ??? 2
+ }
+ {// ??? 3
+ }
+ {
+ // ??? 4
+ /* ??? 5 */}
+
;
+>div : any
+ }
+}
diff --git a/tests/baselines/reference/jsxAndTypeAssertion.js b/tests/baselines/reference/jsxAndTypeAssertion.js
index fb51acd6fd4..ecfdce488ef 100644
--- a/tests/baselines/reference/jsxAndTypeAssertion.js
+++ b/tests/baselines/reference/jsxAndTypeAssertion.js
@@ -40,9 +40,9 @@ x = }>hello{}};
x = x, x = ;
-{{/foo/.test(x) ? : }}
- :
-}
+ {{/foo/.test(x) ? : }}
+ :
+ }
->>}>>}/>>>>;
+ >>}>>}/>>>>;
diff --git a/tests/baselines/reference/jsxEsprimaFbTestSuite.js b/tests/baselines/reference/jsxEsprimaFbTestSuite.js
index 8fe51d678f7..7a6bec81dbf 100644
--- a/tests/baselines/reference/jsxEsprimaFbTestSuite.js
+++ b/tests/baselines/reference/jsxEsprimaFbTestSuite.js
@@ -69,7 +69,7 @@ baz
;
: }/>;
;
-;
+{/* this is a comment */};
@test content
;
7x invalid-js-identifier
;
, ;
diff --git a/tests/baselines/reference/jsxNestedWithinTernaryParsesCorrectly.js b/tests/baselines/reference/jsxNestedWithinTernaryParsesCorrectly.js
index f431e1224cc..47fc2b1d2e7 100644
--- a/tests/baselines/reference/jsxNestedWithinTernaryParsesCorrectly.js
+++ b/tests/baselines/reference/jsxNestedWithinTernaryParsesCorrectly.js
@@ -17,9 +17,9 @@ const a = (
var emptyMessage = null;
var a = (
{0 ? (emptyMessage // must be identifier?
-) : (
-// must be exactly two expression holes
-
+ ) : (
+ // must be exactly two expression holes
+
{0}{0}
)}
);
diff --git a/tests/baselines/reference/jsxReactTestSuite.js b/tests/baselines/reference/jsxReactTestSuite.js
index 3d11e01c51a..12d24718bc3 100644
--- a/tests/baselines/reference/jsxReactTestSuite.js
+++ b/tests/baselines/reference/jsxReactTestSuite.js
@@ -133,19 +133,21 @@ var x =
;
var x =
+ "baz" + "bug"} attr3={"foo" + "bar" +
+ "baz" + "bug"
+ // Extra line here.
+ } attr4="baz">
;
(
-
-
+ {/* A comment at the beginning */}
+ {/* A second comment at the beginning */}
-
+ {/* A nested comment */}
-
+ {/* A sandwiched comment */}
-
-
+ {/* A comment at the end */}
+ {/* A second comment at the end */}
);
(
-
+ {/* JsxSelfClosingElement */}
@@ -55,7 +55,7 @@ function Foo() {
-
+ {/* JsxOpeningElement */}
diff --git a/tests/cases/compiler/commentsOnJSXExpressionsArePreserved.tsx b/tests/cases/compiler/commentsOnJSXExpressionsArePreserved.tsx
new file mode 100644
index 00000000000..64e3f2b77f6
--- /dev/null
+++ b/tests/cases/compiler/commentsOnJSXExpressionsArePreserved.tsx
@@ -0,0 +1,22 @@
+// @module: system,commonjs
+// @jsx: react,react-jsx,react-jsxdev,preserve
+// file is intentionally not a module - this tests for a crash in the module/system transforms alongside the `react-jsx` and `react-jsxdev` outputs
+namespace JSX {}
+class Component {
+ render() {
+ return
+ {/* missing */}
+ {null/* preserved */}
+ {
+ // ??? 1
+ }
+ { // ??? 2
+ }
+ {// ??? 3
+ }
+ {
+ // ??? 4
+ /* ??? 5 */}
+
;
+ }
+}
\ No newline at end of file