Skip to content

Commit 7bf73be

Browse files
author
Andrew Ochsner
committed
space-before-function-paren
Adding option InsertSpaceBeforeFunctionParenthesis Should be optional Typically used to support http://eslint.org/docs/rules/space-before-function-paren Fixes #12234
1 parent 8ae0376 commit 7bf73be

File tree

6 files changed

+26
-1
lines changed

6 files changed

+26
-1
lines changed

src/server/protocol.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2200,6 +2200,7 @@ namespace ts.server.protocol {
22002200
insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets?: boolean;
22012201
insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces?: boolean;
22022202
insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces?: boolean;
2203+
insertSpaceBeforeFunctionParenthesis?: boolean;
22032204
placeOpenBraceOnNewLineForFunctions?: boolean;
22042205
placeOpenBraceOnNewLineForControlBlocks?: boolean;
22052206
}

src/server/utilities.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ namespace ts.server {
8787
insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets: false,
8888
insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces: false,
8989
insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces: false,
90+
insertSpaceBeforeFunctionParenthesis: false,
9091
placeOpenBraceOnNewLineForFunctions: false,
9192
placeOpenBraceOnNewLineForControlBlocks: false,
9293
};

src/services/formatting/rules.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ namespace ts.formatting {
8787
public SpaceAfterLetConstInVariableDeclaration: Rule;
8888
public NoSpaceBeforeOpenParenInFuncCall: Rule;
8989
public SpaceAfterFunctionInFuncDecl: Rule;
90+
public SpaceBeforeOpenParenInFuncDecl: Rule;
9091
public NoSpaceBeforeOpenParenInFuncDecl: Rule;
9192
public SpaceAfterVoidOperator: Rule;
9293

@@ -329,6 +330,7 @@ namespace ts.formatting {
329330
this.SpaceAfterLetConstInVariableDeclaration = new Rule(RuleDescriptor.create4(Shared.TokenRange.FromTokens([SyntaxKind.LetKeyword, SyntaxKind.ConstKeyword]), Shared.TokenRange.Any), RuleOperation.create2(new RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsStartOfVariableDeclarationList), RuleAction.Space));
330331
this.NoSpaceBeforeOpenParenInFuncCall = new Rule(RuleDescriptor.create2(Shared.TokenRange.Any, SyntaxKind.OpenParenToken), RuleOperation.create2(new RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsFunctionCallOrNewContext, Rules.IsPreviousTokenNotComma), RuleAction.Delete));
331332
this.SpaceAfterFunctionInFuncDecl = new Rule(RuleDescriptor.create3(SyntaxKind.FunctionKeyword, Shared.TokenRange.Any), RuleOperation.create2(new RuleOperationContext(Rules.IsFunctionDeclContext), RuleAction.Space));
333+
this.SpaceBeforeOpenParenInFuncDecl = new Rule(RuleDescriptor.create2(Shared.TokenRange.Any, SyntaxKind.OpenParenToken), RuleOperation.create2(new RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsFunctionDeclContext), RuleAction.Space));
332334
this.NoSpaceBeforeOpenParenInFuncDecl = new Rule(RuleDescriptor.create2(Shared.TokenRange.Any, SyntaxKind.OpenParenToken), RuleOperation.create2(new RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsFunctionDeclContext), RuleAction.Delete));
333335
this.SpaceAfterVoidOperator = new Rule(RuleDescriptor.create3(SyntaxKind.VoidKeyword, Shared.TokenRange.Any), RuleOperation.create2(new RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsVoidOpContext), RuleAction.Space));
334336

@@ -462,7 +464,6 @@ namespace ts.formatting {
462464
this.NoSpaceBeforeOpenBracket,
463465
this.NoSpaceAfterCloseBracket,
464466
this.SpaceAfterSemicolon,
465-
this.NoSpaceBeforeOpenParenInFuncDecl,
466467
this.SpaceBetweenStatements, this.SpaceAfterTryFinally
467468
];
468469

src/services/formatting/rulesProvider.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,13 @@ namespace ts.formatting {
128128
rules.push(this.globalRules.NoSpaceAfterBinaryOperator);
129129
}
130130

131+
if (options.insertSpaceBeforeFunctionParenthesis) {
132+
rules.push(this.globalRules.SpaceBeforeOpenParenInFuncDecl);
133+
}
134+
else {
135+
rules.push(this.globalRules.NoSpaceBeforeOpenParenInFuncDecl);
136+
}
137+
131138
if (options.placeOpenBraceOnNewLineForControlBlocks) {
132139
rules.push(this.globalRules.NewLineBeforeOpenBraceInControl);
133140
}

src/services/types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -426,6 +426,7 @@ namespace ts {
426426
InsertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces: boolean;
427427
InsertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces?: boolean;
428428
InsertSpaceAfterTypeAssertion?: boolean;
429+
InsertSpaceBeforeFunctionParenthesis?: boolean;
429430
PlaceOpenBraceOnNewLineForFunctions: boolean;
430431
PlaceOpenBraceOnNewLineForControlBlocks: boolean;
431432
}
@@ -442,6 +443,7 @@ namespace ts {
442443
insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces?: boolean;
443444
insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces?: boolean;
444445
insertSpaceAfterTypeAssertion?: boolean;
446+
insertSpaceBeforeFunctionParenthesis?: boolean;
445447
placeOpenBraceOnNewLineForFunctions?: boolean;
446448
placeOpenBraceOnNewLineForControlBlocks?: boolean;
447449
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
/// <reference path='fourslash.ts' />
2+
3+
/////*1*/function foo() { }
4+
/////*2*/function boo () { }
5+
6+
format.setOption("InsertSpaceBeforeFunctionParenthesis", true);
7+
8+
format.document();
9+
10+
goTo.marker('1');
11+
verify.currentLineContentIs('function foo () { }');
12+
goTo.marker('2');
13+
verify.currentLineContentIs('function boo () { }');

0 commit comments

Comments
 (0)