diff --git a/src/services/formatting/smartIndenter.ts b/src/services/formatting/smartIndenter.ts index 7f41a2701b8c3..9f2564d3fd688 100644 --- a/src/services/formatting/smartIndenter.ts +++ b/src/services/formatting/smartIndenter.ts @@ -654,7 +654,6 @@ export namespace SmartIndenter { case SyntaxKind.VariableStatement: case SyntaxKind.ExportAssignment: case SyntaxKind.ReturnStatement: - case SyntaxKind.ConditionalExpression: case SyntaxKind.ArrayBindingPattern: case SyntaxKind.ObjectBindingPattern: case SyntaxKind.JsxOpeningElement: @@ -695,6 +694,15 @@ export namespace SmartIndenter { return true; } break; + case SyntaxKind.ConditionalExpression: + if (child && sourceFile) { + const childStartLine = sourceFile.getLineAndCharacterOfPosition(skipTrivia(sourceFile.text, child.pos)).line; + const childEndLine = sourceFile.getLineAndCharacterOfPosition(skipTrivia(sourceFile.text, child.end)).line; + if (!rangeIsOnOneLine(sourceFile, parent) && childStartLine !== childEndLine && childKind !== SyntaxKind.ParenthesizedExpression) { + return false; + } + } + return true; case SyntaxKind.DoStatement: case SyntaxKind.WhileStatement: case SyntaxKind.ForInStatement: diff --git a/tests/cases/fourslash/formattingConditionalsWithNestedFalseBranches.ts b/tests/cases/fourslash/formattingConditionalsWithNestedFalseBranches.ts new file mode 100644 index 0000000000000..0e118c9a50eb0 --- /dev/null +++ b/tests/cases/fourslash/formattingConditionalsWithNestedFalseBranches.ts @@ -0,0 +1,43 @@ +/// + +////var v = +/////*1*/0 ? 1 : +/////*2*/2 ? 3 : +/////*3*/4; + +////var x = +/////*4*/a ? b : +/////*5*/c ? d : +/////*6*/e; + +////var opacity = +/////*7*/depth == 0 ? 1 : +/////*8*/depth == 1 ? .7 : +/////*9*/depth == 2 ? .5 : +/////*10*/depth == 3 ? .4 : .3; + +format.document(); +goTo.marker('1'); +verify.indentationIs(4); +goTo.marker('2'); +verify.indentationIs(4); +goTo.marker('3'); +verify.indentationIs(4); + +format.document(); +goTo.marker('4'); +verify.indentationIs(4); +goTo.marker('5'); +verify.indentationIs(4); +goTo.marker('6'); +verify.indentationIs(4); + +format.document(); +goTo.marker('7'); +verify.indentationIs(4); +goTo.marker('8'); +verify.indentationIs(4); +goTo.marker('9'); +verify.indentationIs(4); +goTo.marker('10'); +verify.indentationIs(4); \ No newline at end of file