From e3bfec5217bf8375e9b16ad117977308d27d240c Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Fri, 12 Oct 2018 15:58:31 -0700 Subject: [PATCH 1/2] Handle when advancing past , of call expression moves past endPos of formatting Fixes #26513 --- src/services/formatting/formatting.ts | 6 +++--- tests/cases/fourslash/formatRangeEndingAfterCommaOfCall.ts | 7 +++++++ 2 files changed, 10 insertions(+), 3 deletions(-) create mode 100644 tests/cases/fourslash/formatRangeEndingAfterCommaOfCall.ts diff --git a/src/services/formatting/formatting.ts b/src/services/formatting/formatting.ts index c1de1574e88..0ed6e84e2c3 100644 --- a/src/services/formatting/formatting.ts +++ b/src/services/formatting/formatting.ts @@ -753,17 +753,17 @@ namespace ts.formatting { const listEndToken = getCloseTokenForOpenToken(listStartToken); if (listEndToken !== SyntaxKind.Unknown && formattingScanner.isOnToken()) { - let tokenInfo = formattingScanner.readTokenInfo(parent); + let tokenInfo: TokenInfo | undefined = formattingScanner.readTokenInfo(parent); if (tokenInfo.token.kind === SyntaxKind.CommaToken && isCallLikeExpression(parent)) { formattingScanner.advance(); - tokenInfo = formattingScanner.readTokenInfo(parent); + tokenInfo = formattingScanner.isOnToken() ? formattingScanner.readTokenInfo(parent) : undefined; } // consume the list end token only if it is still belong to the parent // there might be the case when current token matches end token but does not considered as one // function (x: function) <-- // without this check close paren will be interpreted as list end token for function expression which is wrong - if (tokenInfo.token.kind === listEndToken && rangeContainsRange(parent, tokenInfo.token)) { + if (tokenInfo && tokenInfo.token.kind === listEndToken && rangeContainsRange(parent, tokenInfo.token)) { // consume list end token consumeTokenAndAdvanceScanner(tokenInfo, parent, listDynamicIndentation, parent); } diff --git a/tests/cases/fourslash/formatRangeEndingAfterCommaOfCall.ts b/tests/cases/fourslash/formatRangeEndingAfterCommaOfCall.ts new file mode 100644 index 00000000000..30f4d3faf75 --- /dev/null +++ b/tests/cases/fourslash/formatRangeEndingAfterCommaOfCall.ts @@ -0,0 +1,7 @@ +/// +////export const strong: StrongParser = verify(fmap(build(() => +//// /*start*/surround('**', compress(some(union([inline]), '**')), '**')),/*end*/ +//// ns => [html('strong', ns)] +////), ([el]) => hasTightStartText(el)); + +format.selection("start", "end"); \ No newline at end of file From 3aa33aa4ed9067dbc1addc8a64e6e42da2ed5d61 Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Mon, 15 Oct 2018 15:55:45 -0700 Subject: [PATCH 2/2] Simplify the test --- .../cases/fourslash/formatRangeEndingAfterCommaOfCall.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/cases/fourslash/formatRangeEndingAfterCommaOfCall.ts b/tests/cases/fourslash/formatRangeEndingAfterCommaOfCall.ts index 30f4d3faf75..824839ff4af 100644 --- a/tests/cases/fourslash/formatRangeEndingAfterCommaOfCall.ts +++ b/tests/cases/fourslash/formatRangeEndingAfterCommaOfCall.ts @@ -1,7 +1,7 @@ /// -////export const strong: StrongParser = verify(fmap(build(() => -//// /*start*/surround('**', compress(some(union([inline]), '**')), '**')),/*end*/ -//// ns => [html('strong', ns)] -////), ([el]) => hasTightStartText(el)); +////someCall( +//// /*start*/"firstParameter",/*end*/ +//// "something else" +////); format.selection("start", "end"); \ No newline at end of file