Skip to content

Commit f9d2937

Browse files
author
Andy
authored
Merge pull request #9647 from Microsoft/format_tsx
Handle JSX bodies in formatter
2 parents 48ab0ce + 5d37c29 commit f9d2937

File tree

2 files changed

+30
-1
lines changed

2 files changed

+30
-1
lines changed

src/services/formatting/formattingScanner.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ namespace ts.formatting {
2626
RescanGreaterThanToken,
2727
RescanSlashToken,
2828
RescanTemplateToken,
29-
RescanJsxIdentifier
29+
RescanJsxIdentifier,
30+
RescanJsxText,
3031
}
3132

3233
export function getFormattingScanner(sourceFile: SourceFile, startPos: number, endPos: number): FormattingScanner {
@@ -140,6 +141,10 @@ namespace ts.formatting {
140141
return false;
141142
}
142143

144+
function shouldRescanJsxText(node: Node): boolean {
145+
return node && node.kind === SyntaxKind.JsxText;
146+
}
147+
143148
function shouldRescanSlashToken(container: Node): boolean {
144149
return container.kind === SyntaxKind.RegularExpressionLiteral;
145150
}
@@ -176,6 +181,8 @@ namespace ts.formatting {
176181
? ScanAction.RescanTemplateToken
177182
: shouldRescanJsxIdentifier(n)
178183
? ScanAction.RescanJsxIdentifier
184+
: shouldRescanJsxText(n)
185+
? ScanAction.RescanJsxText
179186
: ScanAction.Scan;
180187

181188
if (lastTokenInfo && expectedScanAction === lastScanAction) {
@@ -215,6 +222,10 @@ namespace ts.formatting {
215222
currentToken = scanner.scanJsxIdentifier();
216223
lastScanAction = ScanAction.RescanJsxIdentifier;
217224
}
225+
else if (expectedScanAction === ScanAction.RescanJsxText) {
226+
currentToken = scanner.reScanJsxToken();
227+
lastScanAction = ScanAction.RescanJsxText;
228+
}
218229
else {
219230
lastScanAction = ScanAction.Scan;
220231
}

tests/cases/fourslash/formatTsx.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/// <reference path="fourslash.ts"/>
2+
3+
// @Filename: foo.tsx
4+
////<div><p>'</p><p>{function(){return 1;}]}</p></div>
5+
6+
format.document();
7+
verify.currentFileContentIs("<div><p>'</p><p>{function() { return 1; }]}</p></div>");
8+
9+
/*
10+
< 0
11+
p 1
12+
> 2
13+
' 3
14+
< 4
15+
/ 5
16+
p 6
17+
> 7
18+
*/

0 commit comments

Comments
 (0)