From 699186083b6006a14f789d842d1c01fe0bc215cb Mon Sep 17 00:00:00 2001 From: Benjamin Lichtman Date: Fri, 29 Jun 2018 11:16:37 -0700 Subject: [PATCH] Stop including region delimiter comments in comment fold regions --- src/services/outliningElementsCollector.ts | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/services/outliningElementsCollector.ts b/src/services/outliningElementsCollector.ts index 91754e2ac76..88a74e1aec6 100644 --- a/src/services/outliningElementsCollector.ts +++ b/src/services/outliningElementsCollector.ts @@ -63,7 +63,7 @@ namespace ts.OutliningElementsCollector { const currentLineStart = lineStarts[i]; const lineEnd = i + 1 === lineStarts.length ? sourceFile.getEnd() : lineStarts[i + 1] - 1; const lineText = sourceFile.text.substring(currentLineStart, lineEnd); - const result = lineText.match(/^\s*\/\/\s*#(end)?region(?:\s+(.*))?(?:\r)?$/); + const result = isRegionDelimiter(lineText); if (!result || isInComment(sourceFile, currentLineStart)) { continue; } @@ -83,16 +83,29 @@ namespace ts.OutliningElementsCollector { } } + function isRegionDelimiter(lineText: string) { + return lineText.match(/^\s*\/\/\s*#(end)?region(?:\s+(.*))?(?:\r)?$/); + } + function addOutliningForLeadingCommentsForNode(n: Node, sourceFile: SourceFile, cancellationToken: CancellationToken, out: Push): void { const comments = getLeadingCommentRangesOfNode(n, sourceFile); if (!comments) return; let firstSingleLineCommentStart = -1; let lastSingleLineCommentEnd = -1; let singleLineCommentCount = 0; + const sourceText = sourceFile.getFullText(); for (const { kind, pos, end } of comments) { cancellationToken.throwIfCancellationRequested(); switch (kind) { case SyntaxKind.SingleLineCommentTrivia: + // never fold region delimiters into single-line comment regions + const commentText = sourceText.slice(pos, end); + if (isRegionDelimiter(commentText)) { + combineAndAddMultipleSingleLineComments(); + singleLineCommentCount = 0; + break; + } + // For single line comments, combine consecutive ones (2 or more) into // a single span from the start of the first till the end of the last if (singleLineCommentCount === 0) {