From b81f240e96c0cdb3dca5c865e1a116c5573614f7 Mon Sep 17 00:00:00 2001 From: Armando Aguirre Date: Thu, 9 Jul 2020 18:35:54 -0700 Subject: [PATCH] PR comments --- src/services/services.ts | 14 ++++++++++---- src/services/types.ts | 8 ++++---- tests/cases/fourslash/commentSelection1.ts | 20 ++++++++++++++------ 3 files changed, 28 insertions(+), 14 deletions(-) diff --git a/src/services/services.ts b/src/services/services.ts index cf764be8fb2..7c3670fbae8 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -1993,7 +1993,7 @@ namespace ts { let isCommenting = insertComment || false; let leftMostPosition = Number.MAX_VALUE; const lineTextStarts = new Map(); - const whiteSpaceRegex = new RegExp(/\S/); + const firstNonWhitespaceCharacterRegex = new RegExp(/\S/); const isJsx = isInsideJsxElement(sourceFile, lineStarts[firstLine]); const openComment = isJsx ? "{/*" : "//"; @@ -2002,13 +2002,13 @@ namespace ts { const lineText = sourceFile.text.substring(lineStarts[i], sourceFile.getLineEndOfPosition(lineStarts[i])); // Find the start of text and the left-most character. No-op on empty lines. - const regExec = whiteSpaceRegex.exec(lineText); + const regExec = firstNonWhitespaceCharacterRegex.exec(lineText); if (regExec) { leftMostPosition = Math.min(leftMostPosition, regExec.index); lineTextStarts.set(i.toString(), regExec.index); if (lineText.substr(regExec.index, openComment.length) !== openComment) { - isCommenting = insertComment !== undefined ? insertComment : true; + isCommenting = insertComment === undefined || insertComment; } } } @@ -2164,7 +2164,13 @@ namespace ts { } function commentSelection(fileName: string, textRange: TextRange): TextChange[] { - return toggleLineComment(fileName, textRange, /*insertComment*/ true); + const sourceFile = syntaxTreeCache.getCurrentSourceFile(fileName); + const { firstLine, lastLine } = getLinesForRange(sourceFile, textRange); + + // If there is a selection that is on the same line, add multiline. + return firstLine === lastLine && textRange.pos !== textRange.end + ? toggleMultilineComment(fileName, textRange, /*insertComment*/ true) + : toggleLineComment(fileName, textRange, /*insertComment*/ true); } function uncommentSelection(fileName: string, textRange: TextRange): TextChange[] { diff --git a/src/services/types.ts b/src/services/types.ts index 0684ffaf88f..786688348a0 100644 --- a/src/services/types.ts +++ b/src/services/types.ts @@ -486,10 +486,10 @@ namespace ts { /* @internal */ getNonBoundSourceFile(fileName: string): SourceFile; - toggleLineComment(fileName: string, textRanges: TextRange): TextChange[]; - toggleMultilineComment(fileName: string, textRanges: TextRange): TextChange[]; - commentSelection(fileName: string, textRanges: TextRange): TextChange[]; - uncommentSelection(fileName: string, textRanges: TextRange): TextChange[]; + toggleLineComment(fileName: string, textRange: TextRange): TextChange[]; + toggleMultilineComment(fileName: string, textRange: TextRange): TextChange[]; + commentSelection(fileName: string, textRange: TextRange): TextChange[]; + uncommentSelection(fileName: string, textRange: TextRange): TextChange[]; dispose(): void; } diff --git a/tests/cases/fourslash/commentSelection1.ts b/tests/cases/fourslash/commentSelection1.ts index 523f1f3a4f2..d5a78463955 100644 --- a/tests/cases/fourslash/commentSelection1.ts +++ b/tests/cases/fourslash/commentSelection1.ts @@ -4,15 +4,23 @@ //// let var2 = 2; //// let var3 |]= 3; //// -//// //let var4[| = 4; -//// //let var5 = 5; -//// //let var6 |]= 6; +//// let var4[| = 4;|] +//// +//// let [||]var5 = 5; +//// +//// //let var6[| = 6; +//// //let var7 = 7; +//// //let var8 |]= 8; verify.commentSelection( `//let var1 = 1; //let var2 = 2; //let var3 = 3; -////let var4 = 4; -////let var5 = 5; -////let var6 = 6;`); \ No newline at end of file +let var4/* = 4;*/ + +//let var5 = 5; + +////let var6 = 6; +////let var7 = 7; +////let var8 = 8;`); \ No newline at end of file