From 6860373c1a15888199e6613552bbdbc2c79f703a Mon Sep 17 00:00:00 2001 From: Oleksandr T Date: Thu, 12 Jan 2023 00:59:22 +0200 Subject: [PATCH] fix(52177): Wrong space in type assertions when using array (#52184) --- src/services/formatting/rules.ts | 15 ++++++++++----- .../formatInsertSpaceAfterTypeAssertion.ts | 19 +++++++++++++++++++ 2 files changed, 29 insertions(+), 5 deletions(-) create mode 100644 tests/cases/fourslash/formatInsertSpaceAfterTypeAssertion.ts diff --git a/src/services/formatting/rules.ts b/src/services/formatting/rules.ts index 075bfdcc627..2da93eac7b6 100644 --- a/src/services/formatting/rules.ts +++ b/src/services/formatting/rules.ts @@ -240,11 +240,12 @@ export function getAllRules(): RuleSpec[] { rule("NoSpaceBetweenCloseParenAndAngularBracket", SyntaxKind.CloseParenToken, SyntaxKind.LessThanToken, [isNonJsxSameLineTokenContext, isTypeArgumentOrParameterOrAssertionContext], RuleAction.DeleteSpace), rule("NoSpaceAfterOpenAngularBracket", SyntaxKind.LessThanToken, anyToken, [isNonJsxSameLineTokenContext, isTypeArgumentOrParameterOrAssertionContext], RuleAction.DeleteSpace), rule("NoSpaceBeforeCloseAngularBracket", anyToken, SyntaxKind.GreaterThanToken, [isNonJsxSameLineTokenContext, isTypeArgumentOrParameterOrAssertionContext], RuleAction.DeleteSpace), - rule("NoSpaceAfterCloseAngularBracket", - SyntaxKind.GreaterThanToken, - [SyntaxKind.OpenParenToken, SyntaxKind.OpenBracketToken, SyntaxKind.GreaterThanToken, SyntaxKind.CommaToken], - [isNonJsxSameLineTokenContext, isTypeArgumentOrParameterOrAssertionContext, isNotFunctionDeclContext /*To prevent an interference with the SpaceBeforeOpenParenInFuncDecl rule*/], - RuleAction.DeleteSpace), + rule("NoSpaceAfterCloseAngularBracket", SyntaxKind.GreaterThanToken, [SyntaxKind.OpenParenToken, SyntaxKind.OpenBracketToken, SyntaxKind.GreaterThanToken, SyntaxKind.CommaToken], [ + isNonJsxSameLineTokenContext, + isTypeArgumentOrParameterOrAssertionContext, + isNotFunctionDeclContext /*To prevent an interference with the SpaceBeforeOpenParenInFuncDecl rule*/, + isNonTypeAssertionContext + ], RuleAction.DeleteSpace), // decorators rule("SpaceBeforeAt", [SyntaxKind.CloseParenToken, SyntaxKind.Identifier], SyntaxKind.AtToken, [isNonJsxSameLineTokenContext], RuleAction.InsertSpace), @@ -835,6 +836,10 @@ function isTypeAssertionContext(context: FormattingContext): boolean { return context.contextNode.kind === SyntaxKind.TypeAssertionExpression; } +function isNonTypeAssertionContext(context: FormattingContext): boolean { + return !isTypeAssertionContext(context); +} + function isVoidOpContext(context: FormattingContext): boolean { return context.currentTokenSpan.kind === SyntaxKind.VoidKeyword && context.currentTokenParent.kind === SyntaxKind.VoidExpression; } diff --git a/tests/cases/fourslash/formatInsertSpaceAfterTypeAssertion.ts b/tests/cases/fourslash/formatInsertSpaceAfterTypeAssertion.ts new file mode 100644 index 00000000000..ee3dbd0c05f --- /dev/null +++ b/tests/cases/fourslash/formatInsertSpaceAfterTypeAssertion.ts @@ -0,0 +1,19 @@ +/// + +////let a = ""; +////let b = 1; +////let c = []; +////let d = []; +////let e = ["e"]; + +format.setFormatOptions({ + insertSpaceAfterTypeAssertion: true, +}) +format.document(); +verify.currentFileContentIs( +`let a= ""; +let b= 1; +let c= []; +let d= []; +let e= ["e"];` +);