From 06bf74a0298b65735a73a0bdfddc2f574bd0953a Mon Sep 17 00:00:00 2001 From: SaschaNaz Date: Wed, 30 Sep 2015 02:59:10 +0900 Subject: [PATCH] indent expressions --- src/services/formatting/smartIndenter.ts | 1 + src/services/utilities.ts | 3 +- .../fourslash/formatVariableAssignments.ts | 35 +++++++++++++++++++ .../formattingOnStatementsWithNoSemicolon.ts | 2 +- 4 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 tests/cases/fourslash/formatVariableAssignments.ts diff --git a/src/services/formatting/smartIndenter.ts b/src/services/formatting/smartIndenter.ts index 8355fac03f5..f1f8e4dd47c 100644 --- a/src/services/formatting/smartIndenter.ts +++ b/src/services/formatting/smartIndenter.ts @@ -405,6 +405,7 @@ namespace ts.formatting { function nodeContentIsAlwaysIndented(kind: SyntaxKind): boolean { switch (kind) { + case SyntaxKind.ExpressionStatement: case SyntaxKind.ClassDeclaration: case SyntaxKind.ClassExpression: case SyntaxKind.InterfaceDeclaration: diff --git a/src/services/utilities.ts b/src/services/utilities.ts index 8b77dcb953b..580a7e457ef 100644 --- a/src/services/utilities.ts +++ b/src/services/utilities.ts @@ -128,7 +128,8 @@ namespace ts { return isCompletedNode((n).thenStatement, sourceFile); case SyntaxKind.ExpressionStatement: - return isCompletedNode((n).expression, sourceFile); + return isCompletedNode((n).expression, sourceFile) || + hasChildOfKind(n, SyntaxKind.SemicolonToken); case SyntaxKind.ArrayLiteralExpression: case SyntaxKind.ArrayBindingPattern: diff --git a/tests/cases/fourslash/formatVariableAssignments.ts b/tests/cases/fourslash/formatVariableAssignments.ts new file mode 100644 index 00000000000..989f2c5e6ca --- /dev/null +++ b/tests/cases/fourslash/formatVariableAssignments.ts @@ -0,0 +1,35 @@ +/// + +////let t: number; +////t +/////*nextlineWithEqual*/=2+2; +////t= +/////*nextlineWithoutEqual*/2 +/////*nextline2*/+2; +////t +/////*addition*/+= 22 +/////*nextlineSemicolon*/; +////t +////=t +/////*chained*/=t+ 4; + +format.document(); + +goTo.marker("nextlineWithEqual"); +verify.indentationIs(4); +verify.currentLineContentIs(" = 2 + 2;"); +goTo.marker("nextlineWithoutEqual"); +verify.indentationIs(4); +verify.currentLineContentIs(" 2"); +goTo.marker("nextline2"); +verify.indentationIs(4); +verify.currentLineContentIs(" + 2;"); +goTo.marker("addition"); +verify.indentationIs(4); +verify.currentLineContentIs(" += 22"); +goTo.marker("nextlineSemicolon"); +verify.indentationIs(4); +verify.currentLineContentIs(" ;"); +goTo.marker("chained"); +verify.indentationIs(4); +verify.currentLineContentIs(" = t + 4;"); \ No newline at end of file diff --git a/tests/cases/fourslash/formattingOnStatementsWithNoSemicolon.ts b/tests/cases/fourslash/formattingOnStatementsWithNoSemicolon.ts index e33298a5a3b..6dfa61cf294 100644 --- a/tests/cases/fourslash/formattingOnStatementsWithNoSemicolon.ts +++ b/tests/cases/fourslash/formattingOnStatementsWithNoSemicolon.ts @@ -155,7 +155,7 @@ verify.currentLineContentIs(" else"); goTo.marker("61"); verify.currentLineContentIs(" x += 2"); goTo.marker("62"); -verify.currentLineContentIs(" ;"); +verify.currentLineContentIs(" ;"); goTo.marker("63"); verify.currentLineContentIs("do do do do"); goTo.marker("64");