diff --git a/src/services/formatting/formattingScanner.ts b/src/services/formatting/formattingScanner.ts
index 7e77878051..6f6167d6ba 100644
--- a/src/services/formatting/formattingScanner.ts
+++ b/src/services/formatting/formattingScanner.ts
@@ -17,7 +17,8 @@ namespace ts.formatting {
Scan,
RescanGreaterThanToken,
RescanSlashToken,
- RescanTemplateToken
+ RescanTemplateToken,
+ RescanJsxIdentifier
}
export function getFormattingScanner(sourceFile: SourceFile, startPos: number, endPos: number): FormattingScanner {
@@ -108,6 +109,20 @@ namespace ts.formatting {
return false;
}
+
+ function shouldRescanJsxIdentifier(node: Node): boolean {
+ if (node.parent) {
+ switch(node.parent.kind) {
+ case SyntaxKind.JsxAttribute:
+ case SyntaxKind.JsxOpeningElement:
+ case SyntaxKind.JsxClosingElement:
+ case SyntaxKind.JsxSelfClosingElement:
+ return node.kind === SyntaxKind.Identifier;
+ }
+ }
+
+ return false;
+ }
function shouldRescanSlashToken(container: Node): boolean {
return container.kind === SyntaxKind.RegularExpressionLiteral;
@@ -141,7 +156,9 @@ namespace ts.formatting {
? ScanAction.RescanSlashToken
: shouldRescanTemplateToken(n)
? ScanAction.RescanTemplateToken
- : ScanAction.Scan
+ : shouldRescanJsxIdentifier(n)
+ ? ScanAction.RescanJsxIdentifier
+ : ScanAction.Scan
if (lastTokenInfo && expectedScanAction === lastScanAction) {
// readTokenInfo was called before with the same expected scan action.
@@ -176,6 +193,10 @@ namespace ts.formatting {
currentToken = scanner.reScanTemplateToken();
lastScanAction = ScanAction.RescanTemplateToken;
}
+ else if (expectedScanAction === ScanAction.RescanJsxIdentifier && currentToken === SyntaxKind.Identifier) {
+ currentToken = scanner.scanJsxIdentifier();
+ lastScanAction = ScanAction.RescanJsxIdentifier;
+ }
else {
lastScanAction = ScanAction.Scan;
}
diff --git a/src/services/formatting/smartIndenter.ts b/src/services/formatting/smartIndenter.ts
index 9c19e32ab6..8355fac03f 100644
--- a/src/services/formatting/smartIndenter.ts
+++ b/src/services/formatting/smartIndenter.ts
@@ -431,6 +431,7 @@ namespace ts.formatting {
case SyntaxKind.ArrayBindingPattern:
case SyntaxKind.ObjectBindingPattern:
case SyntaxKind.JsxElement:
+ case SyntaxKind.JsxSelfClosingElement:
case SyntaxKind.MethodSignature:
case SyntaxKind.CallSignature:
case SyntaxKind.ConstructSignature:
diff --git a/tests/cases/fourslash/formattingJsxElements.ts b/tests/cases/fourslash/formattingJsxElements.ts
index d0c77804ed..fd4ccc504a 100644
--- a/tests/cases/fourslash/formattingJsxElements.ts
+++ b/tests/cases/fourslash/formattingJsxElements.ts
@@ -1,7 +1,7 @@
///