diff --git a/src/services/formatting/rules.ts b/src/services/formatting/rules.ts index ce1d6b9e2cb3c..ab13fc16cdebd 100644 --- a/src/services/formatting/rules.ts +++ b/src/services/formatting/rules.ts @@ -59,7 +59,7 @@ namespace ts.formatting { // in other cases there should be no space between '?' and next token rule("NoSpaceAfterQuestionMark", SyntaxKind.QuestionToken, anyToken, [isNonJsxSameLineTokenContext], RuleAction.DeleteSpace), - rule("NoSpaceBeforeDot", anyToken, [SyntaxKind.DotToken, SyntaxKind.QuestionDotToken], [isNonJsxSameLineTokenContext, isNotPropertyAccessOnNumericLiteral], RuleAction.DeleteSpace), + rule("NoSpaceBeforeDot", anyToken, [SyntaxKind.DotToken, SyntaxKind.QuestionDotToken], [isNonJsxSameLineTokenContext, isNotPropertyAccessOnIntegerLiteral], RuleAction.DeleteSpace), rule("NoSpaceAfterDot", [SyntaxKind.DotToken, SyntaxKind.QuestionDotToken], anyToken, [isNonJsxSameLineTokenContext], RuleAction.DeleteSpace), rule("NoSpaceBetweenImportParenInImportType", SyntaxKind.ImportKeyword, SyntaxKind.OpenParenToken, [isNonJsxSameLineTokenContext, isImportTypeContext], RuleAction.DeleteSpace), @@ -894,7 +894,9 @@ namespace ts.formatting { return positionIsASICandidate(context.currentTokenSpan.end, context.currentTokenParent, context.sourceFile); } - function isNotPropertyAccessOnNumericLiteral(context: FormattingContext): boolean { - return !isPropertyAccessExpression(context.contextNode) || !isNumericLiteral(context.contextNode.expression); + function isNotPropertyAccessOnIntegerLiteral(context: FormattingContext): boolean { + return !isPropertyAccessExpression(context.contextNode) + || !isNumericLiteral(context.contextNode.expression) + || context.contextNode.expression.getText().indexOf(".") !== -1; } } diff --git a/tests/cases/fourslash/formatDotAfterNumber.ts b/tests/cases/fourslash/formatDotAfterNumber.ts index 1e08cf469c64d..65467de4572e4 100644 --- a/tests/cases/fourslash/formatDotAfterNumber.ts +++ b/tests/cases/fourslash/formatDotAfterNumber.ts @@ -1,7 +1,24 @@ /// -////1+ 2 .toString() +3/**/ +////1+ 2 .toString() +3/*1*/ +////1+ 2. .toString() +3/*2*/ +////1+ 2.0 .toString() +3/*3*/ +////1+ (2) .toString() +3/*4*/ +////1+ 2_000 .toString() +3/*5*/ format.document(); -goTo.marker(""); + +goTo.marker("1"); verify.currentLineContentIs("1 + 2 .toString() + 3"); + +goTo.marker("2"); +verify.currentLineContentIs("1 + 2..toString() + 3"); + +goTo.marker("3"); +verify.currentLineContentIs("1 + 2.0.toString() + 3"); + +goTo.marker("4"); +verify.currentLineContentIs("1 + (2).toString() + 3"); + +goTo.marker("5"); +verify.currentLineContentIs("1 + 2_000 .toString() + 3");