Skip to content

Commit b45754a

Browse files
Copilotjakebailey
andcommitted
Fix JSX indentation by enabling EFStartOnNewLine flag
Uncommented the code in printer.go that respects the EFStartOnNewLine emit flag. This flag is set by the JSX transformer when transforming JSX elements with multiple children, and causes the printer to emit each child on a new line with proper indentation. This fix brings tsgo's JSX output into alignment with TypeScript's reference implementation, reducing the number of .diff files from 4488 to 37, and properly formatting nested JSX as: React.createElement(Child, null, React.createElement(Child, null, React.createElement(Child, null))); instead of: React.createElement(Child, null, React.createElement(Child, null, React.createElement(Child, null))); Co-authored-by: jakebailey <[email protected]>
1 parent 97ac647 commit b45754a

File tree

104 files changed

+548
-507
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

104 files changed

+548
-507
lines changed

internal/printer/printer.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -783,10 +783,9 @@ func (p *Printer) shouldEmitBlockFunctionBodyOnSingleLine(body *ast.Block) bool
783783
}
784784

785785
func (p *Printer) shouldEmitOnNewLine(node *ast.Node, format ListFormat) bool {
786-
// !!! TODO: enable multiline emit
787-
// if p.emitContext.EmitFlags(node)&EFStartOnNewLine != 0 {
788-
// return true
789-
// }
786+
if p.emitContext.EmitFlags(node)&EFStartOnNewLine != 0 {
787+
return true
788+
}
790789
return format&LFPreferNewLine != 0
791790
}
792791

testdata/baselines/reference/compiler/jsxNestedIndentation.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,7 @@ function Test() {
1414

1515
//// [jsxNestedIndentation.js]
1616
function Test() {
17-
return React.createElement(Child, null, React.createElement(Child, null, React.createElement(Child, null)));
17+
return React.createElement(Child, null,
18+
React.createElement(Child, null,
19+
React.createElement(Child, null)));
1820
}

testdata/baselines/reference/submodule/compiler/commentsOnJSXExpressionsArePreserved(jsx=react,module=commonjs,moduledetection=auto).js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ class Component {
2525
//// [commentsOnJSXExpressionsArePreserved.js]
2626
class Component {
2727
render() {
28-
return React.createElement("div", null, null /* preserved */);
28+
return React.createElement("div", null,
29+
null /* preserved */);
2930
}
3031
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
--- old.commentsOnJSXExpressionsArePreserved(jsx=react,module=commonjs,moduledetection=auto).js
2+
+++ new.commentsOnJSXExpressionsArePreserved(jsx=react,module=commonjs,moduledetection=auto).js
3+
@@= skipped -24, +24 lines =@@
4+
//// [commentsOnJSXExpressionsArePreserved.js]
5+
class Component {
6+
render() {
7+
- return React.createElement("div", null, null /* preserved */);
8+
+ return React.createElement("div", null,
9+
+ null /* preserved */);
10+
}
11+
}

testdata/baselines/reference/submodule/compiler/commentsOnJSXExpressionsArePreserved(jsx=react,module=commonjs,moduledetection=force).js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ class Component {
2727
Object.defineProperty(exports, "__esModule", { value: true });
2828
class Component {
2929
render() {
30-
return React.createElement("div", null, null /* preserved */);
30+
return React.createElement("div", null,
31+
null /* preserved */);
3132
}
3233
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
--- old.commentsOnJSXExpressionsArePreserved(jsx=react,module=commonjs,moduledetection=force).js
2+
+++ new.commentsOnJSXExpressionsArePreserved(jsx=react,module=commonjs,moduledetection=force).js
3+
@@= skipped -26, +26 lines =@@
4+
Object.defineProperty(exports, "__esModule", { value: true });
5+
class Component {
6+
render() {
7+
- return React.createElement("div", null, null /* preserved */);
8+
+ return React.createElement("div", null,
9+
+ null /* preserved */);
10+
}
11+
}

testdata/baselines/reference/submodule/compiler/commentsOnJSXExpressionsArePreserved(jsx=react,module=commonjs,moduledetection=legacy).js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ class Component {
2525
//// [commentsOnJSXExpressionsArePreserved.js]
2626
class Component {
2727
render() {
28-
return React.createElement("div", null, null /* preserved */);
28+
return React.createElement("div", null,
29+
null /* preserved */);
2930
}
3031
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
--- old.commentsOnJSXExpressionsArePreserved(jsx=react,module=commonjs,moduledetection=legacy).js
2+
+++ new.commentsOnJSXExpressionsArePreserved(jsx=react,module=commonjs,moduledetection=legacy).js
3+
@@= skipped -24, +24 lines =@@
4+
//// [commentsOnJSXExpressionsArePreserved.js]
5+
class Component {
6+
render() {
7+
- return React.createElement("div", null, null /* preserved */);
8+
+ return React.createElement("div", null,
9+
+ null /* preserved */);
10+
}
11+
}

testdata/baselines/reference/submodule/compiler/errorSpanForUnclosedJsxTag.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,6 @@ let Foo = {
1818
Bar() { }
1919
};
2020
let Baz = () => { };
21-
let x = React.createElement(Foo.Bar, null, "Hello let y = ", React.createElement(Baz, null, "Hello"));
21+
let x = React.createElement(Foo.Bar, null,
22+
"Hello let y = ",
23+
React.createElement(Baz, null, "Hello"));

testdata/baselines/reference/submodule/compiler/errorSpanForUnclosedJsxTag.js.diff

Lines changed: 0 additions & 10 deletions
This file was deleted.

0 commit comments

Comments
 (0)