@@ -17,7 +17,8 @@ namespace ts.formatting {
1717 Scan ,
1818 RescanGreaterThanToken ,
1919 RescanSlashToken ,
20- RescanTemplateToken
20+ RescanTemplateToken ,
21+ RescanJsxIdentifier
2122 }
2223
2324 export function getFormattingScanner ( sourceFile : SourceFile , startPos : number , endPos : number ) : FormattingScanner {
@@ -108,6 +109,20 @@ namespace ts.formatting {
108109
109110 return false ;
110111 }
112+
113+ function shouldRescanJsxIdentifier ( node : Node ) : boolean {
114+ if ( node . parent ) {
115+ switch ( node . parent . kind ) {
116+ case SyntaxKind . JsxAttribute :
117+ case SyntaxKind . JsxOpeningElement :
118+ case SyntaxKind . JsxClosingElement :
119+ case SyntaxKind . JsxSelfClosingElement :
120+ return node . kind === SyntaxKind . Identifier ;
121+ }
122+ }
123+
124+ return false ;
125+ }
111126
112127 function shouldRescanSlashToken ( container : Node ) : boolean {
113128 return container . kind === SyntaxKind . RegularExpressionLiteral ;
@@ -141,7 +156,9 @@ namespace ts.formatting {
141156 ? ScanAction . RescanSlashToken
142157 : shouldRescanTemplateToken ( n )
143158 ? ScanAction . RescanTemplateToken
144- : ScanAction . Scan
159+ : shouldRescanJsxIdentifier ( n )
160+ ? ScanAction . RescanJsxIdentifier
161+ : ScanAction . Scan
145162
146163 if ( lastTokenInfo && expectedScanAction === lastScanAction ) {
147164 // readTokenInfo was called before with the same expected scan action.
@@ -176,6 +193,10 @@ namespace ts.formatting {
176193 currentToken = scanner . reScanTemplateToken ( ) ;
177194 lastScanAction = ScanAction . RescanTemplateToken ;
178195 }
196+ else if ( expectedScanAction === ScanAction . RescanJsxIdentifier && currentToken === SyntaxKind . Identifier ) {
197+ currentToken = scanner . scanJsxIdentifier ( ) ;
198+ lastScanAction = ScanAction . RescanJsxIdentifier ;
199+ }
179200 else {
180201 lastScanAction = ScanAction . Scan ;
181202 }
0 commit comments