From e3bfec5217bf8375e9b16ad117977308d27d240c Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Fri, 12 Oct 2018 15:58:31 -0700 Subject: [PATCH] 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