diff --git a/src/services/formatting/formatting.ts b/src/services/formatting/formatting.ts
index 8350b2a8dc8..637bb41bad9 100644
--- a/src/services/formatting/formatting.ts
+++ b/src/services/formatting/formatting.ts
@@ -494,14 +494,26 @@ namespace ts.formatting {
case SyntaxKind.WhileKeyword:
case SyntaxKind.AtToken:
return indentation;
+ case SyntaxKind.SlashToken:
+ case SyntaxKind.GreaterThanToken: {
+ if (container.kind === SyntaxKind.JsxOpeningElement ||
+ container.kind === SyntaxKind.JsxClosingElement ||
+ container.kind === SyntaxKind.JsxSelfClosingElement
+ ) {
+ return indentation;
+ }
+ break;
+ }
case SyntaxKind.OpenBracketToken:
- case SyntaxKind.CloseBracketToken:
- return (container.kind === SyntaxKind.MappedType) ?
- indentation + getEffectiveDelta(delta, container) : indentation;
- default:
- // if token line equals to the line of containing node (this is a first token in the node) - use node indentation
- return nodeStartLine !== line ? indentation + getEffectiveDelta(delta, container) : indentation;
+ case SyntaxKind.CloseBracketToken: {
+ if (container.kind !== SyntaxKind.MappedType) {
+ return indentation;
+ }
+ break;
+ }
}
+ // if token line equals to the line of containing node (this is a first token in the node) - use node indentation
+ return nodeStartLine !== line ? indentation + getEffectiveDelta(delta, container) : indentation;
},
getIndentation: () => indentation,
getDelta: child => getEffectiveDelta(delta, child),
diff --git a/src/services/formatting/rules.ts b/src/services/formatting/rules.ts
index db25ce0dcb8..2fac6c05555 100644
--- a/src/services/formatting/rules.ts
+++ b/src/services/formatting/rules.ts
@@ -710,11 +710,18 @@ namespace ts.formatting {
case SyntaxKind.ClassDeclaration:
case SyntaxKind.ModuleDeclaration:
case SyntaxKind.EnumDeclaration:
- case SyntaxKind.Block:
case SyntaxKind.CatchClause:
case SyntaxKind.ModuleBlock:
case SyntaxKind.SwitchStatement:
return true;
+ case SyntaxKind.Block: {
+ const blockParent = context.currentTokenParent.parent;
+ if (blockParent.kind !== SyntaxKind.ArrowFunction &&
+ blockParent.kind !== SyntaxKind.FunctionExpression
+ ) {
+ return true;
+ }
+ }
}
return false;
}
diff --git a/tests/cases/fourslash/formatVariableDeclarationList.ts b/tests/cases/fourslash/formatVariableDeclarationList.ts
index 37392d38c62..089eceb1684 100644
--- a/tests/cases/fourslash/formatVariableDeclarationList.ts
+++ b/tests/cases/fourslash/formatVariableDeclarationList.ts
@@ -37,4 +37,4 @@ verify.currentLineContentIs(" x = 'Foo';");
goTo.marker("11");
verify.currentLineContentIs(" return fun;");
goTo.marker("12");
-verify.currentLineContentIs(" } (fun1));");
+verify.currentLineContentIs(" }(fun1));");
\ No newline at end of file
diff --git a/tests/cases/fourslash/formattingJsxElements.ts b/tests/cases/fourslash/formattingJsxElements.ts
index 2b3b396ed4c..a27bc809456 100644
--- a/tests/cases/fourslash/formattingJsxElements.ts
+++ b/tests/cases/fourslash/formattingJsxElements.ts
@@ -72,6 +72,8 @@
////) ;/*closingParenInJsxElement2*/
////;/*jsxExpressionSpaces*/
////;/*jsxExpressionSpaces2*/
+//// {}}/*jsxExpressionSpaces3*/
+/////>;/*jsxDanglingSelfClosingToken*/
format.document();
goTo.marker("autoformat");
@@ -120,8 +122,7 @@ goTo.marker("expressionIndent");
verify.indentationIs(12);
goTo.marker("danglingBracketAutoformat")
-// TODO: verify.currentLineContentIs(" >");
-verify.currentLineContentIs(" >");
+verify.currentLineContentIs(" >");
goTo.marker("closingTagAutoformat");
verify.currentLineContentIs(" ");
@@ -145,4 +146,8 @@ verify.currentLineContentIs(") ;");
goTo.marker("jsxExpressionSpaces");
verify.currentLineContentIs(";");
goTo.marker("jsxExpressionSpaces2");
-verify.currentLineContentIs(";");
\ No newline at end of file
+verify.currentLineContentIs(";");
+goTo.marker("jsxExpressionSpaces3");
+verify.currentLineContentIs(" { }}");
+goTo.marker("jsxDanglingSelfClosingToken");
+verify.currentLineContentIs("/>;");
\ No newline at end of file