diff --git a/src/services/formatting/rules.ts b/src/services/formatting/rules.ts index bf1c57b218..9a12392644 100644 --- a/src/services/formatting/rules.ts +++ b/src/services/formatting/rules.ts @@ -198,7 +198,7 @@ namespace ts.formatting { RuleAction.Delete), // decorators - rule("SpaceBeforeAt", anyToken, SyntaxKind.AtToken, [isNonJsxSameLineTokenContext], RuleAction.Space), + rule("SpaceBeforeAt", [SyntaxKind.CloseParenToken, SyntaxKind.Identifier], SyntaxKind.AtToken, [isNonJsxSameLineTokenContext], RuleAction.Space), rule("NoSpaceAfterAt", SyntaxKind.AtToken, anyToken, [isNonJsxSameLineTokenContext], RuleAction.Delete), // Insert space after @ in decorator rule("SpaceAfterDecorator", diff --git a/tests/cases/fourslash/formattingDecorators.ts b/tests/cases/fourslash/formattingDecorators.ts index 366b9cb772..9ff6de3cf1 100644 --- a/tests/cases/fourslash/formattingDecorators.ts +++ b/tests/cases/fourslash/formattingDecorators.ts @@ -41,6 +41,8 @@ /////*29*/ property1; //// /////*30*/ @ decorator33 @ decorator34 @decorator35 property2; +/////*31*/function test(@decorator36@decorator37 param) {}; +/////*32*/function test2(@decorator38()@decorator39()param) {}; ////} format.document(); @@ -103,4 +105,8 @@ verify.currentLineContentIs(" @decorator32"); goTo.marker("29"); verify.currentLineContentIs(" property1;"); goTo.marker("30"); -verify.currentLineContentIs(" @decorator33 @decorator34 @decorator35 property2;"); \ No newline at end of file +verify.currentLineContentIs(" @decorator33 @decorator34 @decorator35 property2;"); +goTo.marker("31"); +verify.currentLineContentIs("function test(@decorator36 @decorator37 param) { };"); +goTo.marker("32"); +verify.currentLineContentIs("function test2(@decorator38() @decorator39() param) { };"); \ No newline at end of file