From e9add2e2dd0dd5cacb79fe8f4d32343036cb69b5 Mon Sep 17 00:00:00 2001 From: Alexander T Date: Tue, 26 May 2020 11:50:45 +0300 Subject: [PATCH] fix(25155): add space before optional parameters/properties --- src/services/formatting/rules.ts | 7 ++++--- tests/cases/fourslash/formatTypeAnnotation1.ts | 17 +++++++++++++++++ tests/cases/fourslash/formatTypeAnnotation2.ts | 16 ++++++++++++++++ 3 files changed, 37 insertions(+), 3 deletions(-) create mode 100644 tests/cases/fourslash/formatTypeAnnotation1.ts create mode 100644 tests/cases/fourslash/formatTypeAnnotation2.ts diff --git a/src/services/formatting/rules.ts b/src/services/formatting/rules.ts index 4d6eb8f7a99e6..87f3855e1830d 100644 --- a/src/services/formatting/rules.ts +++ b/src/services/formatting/rules.ts @@ -52,7 +52,7 @@ namespace ts.formatting { rule("NotSpaceBeforeColon", anyToken, SyntaxKind.ColonToken, [isNonJsxSameLineTokenContext, isNotBinaryOpContext, isNotTypeAnnotationContext], RuleAction.DeleteSpace), rule("SpaceAfterColon", SyntaxKind.ColonToken, anyToken, [isNonJsxSameLineTokenContext, isNotBinaryOpContext], RuleAction.InsertSpace), - rule("NoSpaceBeforeQuestionMark", anyToken, SyntaxKind.QuestionToken, [isNonJsxSameLineTokenContext, isNotBinaryOpContext], RuleAction.DeleteSpace), + rule("NoSpaceBeforeQuestionMark", anyToken, SyntaxKind.QuestionToken, [isNonJsxSameLineTokenContext, isNotBinaryOpContext, isNotTypeAnnotationContext], RuleAction.DeleteSpace), // insert space after '?' only when it is used in conditional operator rule("SpaceAfterQuestionMarkInConditionalOperator", SyntaxKind.QuestionToken, anyToken, [isNonJsxSameLineTokenContext, isConditionalOperatorContext], RuleAction.InsertSpace), @@ -315,8 +315,9 @@ namespace ts.formatting { rule("SpaceAfterTypeAssertion", SyntaxKind.GreaterThanToken, anyToken, [isOptionEnabled("insertSpaceAfterTypeAssertion"), isNonJsxSameLineTokenContext, isTypeAssertionContext], RuleAction.InsertSpace), rule("NoSpaceAfterTypeAssertion", SyntaxKind.GreaterThanToken, anyToken, [isOptionDisabledOrUndefined("insertSpaceAfterTypeAssertion"), isNonJsxSameLineTokenContext, isTypeAssertionContext], RuleAction.DeleteSpace), - rule("SpaceBeforeTypeAnnotation", anyToken, SyntaxKind.ColonToken, [isOptionEnabled("insertSpaceBeforeTypeAnnotation"), isNonJsxSameLineTokenContext, isTypeAnnotationContext], RuleAction.InsertSpace), - rule("NoSpaceBeforeTypeAnnotation", anyToken, SyntaxKind.ColonToken, [isOptionDisabledOrUndefined("insertSpaceBeforeTypeAnnotation"), isNonJsxSameLineTokenContext, isTypeAnnotationContext], RuleAction.DeleteSpace), + rule("SpaceBeforeTypeAnnotation", anyToken, [SyntaxKind.QuestionToken, SyntaxKind.ColonToken], [isOptionEnabled("insertSpaceBeforeTypeAnnotation"), isNonJsxSameLineTokenContext, isTypeAnnotationContext], RuleAction.InsertSpace), + rule("NoSpaceBeforeTypeAnnotation", anyToken, [SyntaxKind.QuestionToken, SyntaxKind.ColonToken], [isOptionDisabledOrUndefined("insertSpaceBeforeTypeAnnotation"), isNonJsxSameLineTokenContext, isTypeAnnotationContext], RuleAction.DeleteSpace), + rule("NoOptionalSemicolon", SyntaxKind.SemicolonToken, anyTokenIncludingEOF, [optionEquals("semicolons", SemicolonPreference.Remove), isSemicolonDeletionContext], RuleAction.DeleteToken), rule("OptionalSemicolon", anyToken, anyTokenIncludingEOF, [optionEquals("semicolons", SemicolonPreference.Insert), isSemicolonInsertionContext], RuleAction.InsertTrailingSemicolon), ]; diff --git a/tests/cases/fourslash/formatTypeAnnotation1.ts b/tests/cases/fourslash/formatTypeAnnotation1.ts new file mode 100644 index 0000000000000..edd3a13ab9bc6 --- /dev/null +++ b/tests/cases/fourslash/formatTypeAnnotation1.ts @@ -0,0 +1,17 @@ +/// + +////function foo(x: number, y?: string): number {} +////interface Foo { +//// x: number; +//// y?: number; +////} + +format.setOption("insertSpaceBeforeTypeAnnotation", true); +format.document(); +verify.currentFileContentIs( +`function foo(x : number, y ?: string) : number { } +interface Foo { + x : number; + y ?: number; +}` +); diff --git a/tests/cases/fourslash/formatTypeAnnotation2.ts b/tests/cases/fourslash/formatTypeAnnotation2.ts new file mode 100644 index 0000000000000..a3708a6b66893 --- /dev/null +++ b/tests/cases/fourslash/formatTypeAnnotation2.ts @@ -0,0 +1,16 @@ +/// + +////function foo(x : number, y ?: string) : number {} +////interface Foo { +//// x : number; +//// y ?: number; +////} + +format.document(); +verify.currentFileContentIs( +`function foo(x: number, y?: string): number { } +interface Foo { + x: number; + y?: number; +}` +);