From 80df773c770729ef63e4bc5345fe03fc2fc18800 Mon Sep 17 00:00:00 2001 From: Vladimir Matveev Date: Tue, 19 Apr 2016 14:16:43 -0700 Subject: [PATCH] fix formatting for lines that start with continuation of multiline comments --- src/services/formatting/formatting.ts | 17 ++++++++--------- .../formattingWithMultilineComments.ts | 9 +++++++++ 2 files changed, 17 insertions(+), 9 deletions(-) create mode 100644 tests/cases/fourslash/formattingWithMultilineComments.ts diff --git a/src/services/formatting/formatting.ts b/src/services/formatting/formatting.ts index 066bcf7cda6..58e3ed1b356 100644 --- a/src/services/formatting/formatting.ts +++ b/src/services/formatting/formatting.ts @@ -728,25 +728,24 @@ namespace ts.formatting { dynamicIndentation.getIndentationForToken(tokenStart.line, currentTokenInfo.token.kind, container) : Constants.Unknown; + let indentNextTokenOrTrivia = true; if (currentTokenInfo.leadingTrivia) { let commentIndentation = dynamicIndentation.getIndentationForComment(currentTokenInfo.token.kind, tokenIndentation, container); - let indentNextTokenOrTrivia = true; for (let triviaItem of currentTokenInfo.leadingTrivia) { - if (!rangeContainsRange(originalRange, triviaItem)) { - continue; - } - + const triviaInRange = rangeContainsRange(originalRange, triviaItem); switch (triviaItem.kind) { case SyntaxKind.MultiLineCommentTrivia: - indentMultilineComment(triviaItem, commentIndentation, /*firstLineIsIndented*/ !indentNextTokenOrTrivia); + if (triviaInRange) { + indentMultilineComment(triviaItem, commentIndentation, /*firstLineIsIndented*/ !indentNextTokenOrTrivia); + } indentNextTokenOrTrivia = false; break; case SyntaxKind.SingleLineCommentTrivia: - if (indentNextTokenOrTrivia) { + if (indentNextTokenOrTrivia && triviaInRange) { insertIndentation(triviaItem.pos, commentIndentation, /*lineAdded*/ false); - indentNextTokenOrTrivia = false; } + indentNextTokenOrTrivia = false; break; case SyntaxKind.NewLineTrivia: indentNextTokenOrTrivia = true; @@ -756,7 +755,7 @@ namespace ts.formatting { } // indent token only if is it is in target range and does not overlap with any error ranges - if (tokenIndentation !== Constants.Unknown) { + if (tokenIndentation !== Constants.Unknown && indentNextTokenOrTrivia) { insertIndentation(currentTokenInfo.token.pos, tokenIndentation, lineAdded); lastIndentedLine = tokenStart.line; diff --git a/tests/cases/fourslash/formattingWithMultilineComments.ts b/tests/cases/fourslash/formattingWithMultilineComments.ts new file mode 100644 index 00000000000..04cdfbcf472 --- /dev/null +++ b/tests/cases/fourslash/formattingWithMultilineComments.ts @@ -0,0 +1,9 @@ +/// + +////f(/* +/////*2*/ */() => { /*1*/ }); + +goTo.marker("1"); +edit.insertLine(""); +goTo.marker("2"); +verify.currentLineContentIs(" */() => {"); \ No newline at end of file