Skip to content

Commit cbfbfe1

Browse files
committed
make rules optional
1 parent 378c6b5 commit cbfbfe1

File tree

6 files changed

+56
-9
lines changed

6 files changed

+56
-9
lines changed

src/harness/fourslash.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -324,6 +324,7 @@ namespace FourSlash {
324324
InsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis: false,
325325
InsertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets: false,
326326
InsertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces: false,
327+
InsertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces: false,
327328
PlaceOpenBraceOnNewLineForFunctions: false,
328329
PlaceOpenBraceOnNewLineForControlBlocks: false,
329330
};

src/server/editorServices.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1580,6 +1580,7 @@ namespace ts.server {
15801580
InsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis: false,
15811581
InsertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets: false,
15821582
InsertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces: false,
1583+
InsertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces: false,
15831584
PlaceOpenBraceOnNewLineForFunctions: false,
15841585
PlaceOpenBraceOnNewLineForControlBlocks: false,
15851586
});

src/services/formatting/rules.ts

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,6 @@ namespace ts.formatting {
5252
public SpaceBeforeCloseBrace: Rule;
5353
public NoSpaceBetweenEmptyBraceBrackets: Rule;
5454

55-
// No space after { and before } in JSX expression
56-
public NoSpaceAfterOpenBraceInJsxExpression: Rule;
57-
public NoSpaceBeforeCloseBraceInJsxExpression: Rule;
58-
5955
// Insert new line after { and before } in multi-line contexts.
6056
public NewLineAfterOpenBraceInBlockContext: Rule;
6157

@@ -229,6 +225,12 @@ namespace ts.formatting {
229225
public NoSpaceBeforeTemplateMiddleAndTail: Rule;
230226
public SpaceBeforeTemplateMiddleAndTail: Rule;
231227

228+
// No space after { and before } in JSX expression
229+
public NoSpaceAfterOpenBraceInJsxExpression: Rule;
230+
public SpaceAfterOpenBraceInJsxExpression: Rule;
231+
public NoSpaceBeforeCloseBraceInJsxExpression: Rule;
232+
public SpaceBeforeCloseBraceInJsxExpression: Rule;
233+
232234
constructor() {
233235
///
234236
/// Common Rules
@@ -280,10 +282,6 @@ namespace ts.formatting {
280282
this.SpaceBeforeCloseBrace = new Rule(RuleDescriptor.create2(Shared.TokenRange.Any, SyntaxKind.CloseBraceToken), RuleOperation.create2(new RuleOperationContext(Rules.IsSingleLineBlockContext), RuleAction.Space));
281283
this.NoSpaceBetweenEmptyBraceBrackets = new Rule(RuleDescriptor.create1(SyntaxKind.OpenBraceToken, SyntaxKind.CloseBraceToken), RuleOperation.create2(new RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsObjectContext), RuleAction.Delete));
282284

283-
// No space after { and before } in JSX expression
284-
this.NoSpaceAfterOpenBraceInJsxExpression = new Rule(RuleDescriptor.create3(SyntaxKind.OpenBraceToken, Shared.TokenRange.Any), RuleOperation.create2(new RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.isJsxExpressionContext), RuleAction.Delete));
285-
this.NoSpaceBeforeCloseBraceInJsxExpression = new Rule(RuleDescriptor.create2(Shared.TokenRange.Any, SyntaxKind.CloseBraceToken), RuleOperation.create2(new RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.isJsxExpressionContext), RuleAction.Delete));
286-
287285
// Insert new line after { and before } in multi-line contexts.
288286
this.NewLineAfterOpenBraceInBlockContext = new Rule(RuleDescriptor.create3(SyntaxKind.OpenBraceToken, Shared.TokenRange.Any), RuleOperation.create2(new RuleOperationContext(Rules.IsMultilineBlockContext), RuleAction.NewLine));
289287

@@ -403,7 +401,6 @@ namespace ts.formatting {
403401
this.SpaceAfterSubtractWhenFollowedByUnaryMinus, this.SpaceAfterSubtractWhenFollowedByPredecrement,
404402
this.NoSpaceAfterCloseBrace,
405403
this.SpaceAfterOpenBrace, this.SpaceBeforeCloseBrace, this.NewLineBeforeCloseBraceInBlockContext,
406-
this.NoSpaceAfterOpenBraceInJsxExpression, this.NoSpaceBeforeCloseBraceInJsxExpression,
407404
this.SpaceAfterCloseBrace, this.SpaceBetweenCloseBraceAndElse, this.SpaceBetweenCloseBraceAndWhile, this.NoSpaceBetweenEmptyBraceBrackets,
408405
this.NoSpaceBetweenFunctionKeywordAndStar, this.SpaceAfterStarInGeneratorDeclaration,
409406
this.SpaceAfterFunctionInFuncDecl, this.NewLineAfterOpenBraceInBlockContext, this.SpaceAfterGetSetInMember,
@@ -500,6 +497,12 @@ namespace ts.formatting {
500497
this.NoSpaceBeforeTemplateMiddleAndTail = new Rule(RuleDescriptor.create4(Shared.TokenRange.Any, Shared.TokenRange.FromTokens([SyntaxKind.TemplateMiddle, SyntaxKind.TemplateTail])), RuleOperation.create2(new RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), RuleAction.Delete));
501498
this.SpaceBeforeTemplateMiddleAndTail = new Rule(RuleDescriptor.create4(Shared.TokenRange.Any, Shared.TokenRange.FromTokens([SyntaxKind.TemplateMiddle, SyntaxKind.TemplateTail])), RuleOperation.create2(new RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), RuleAction.Space));
502499

500+
// No space after { and before } in JSX expression
501+
this.NoSpaceAfterOpenBraceInJsxExpression = new Rule(RuleDescriptor.create3(SyntaxKind.OpenBraceToken, Shared.TokenRange.Any), RuleOperation.create2(new RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.isJsxExpressionContext), RuleAction.Delete));
502+
this.SpaceAfterOpenBraceInJsxExpression = new Rule(RuleDescriptor.create3(SyntaxKind.OpenBraceToken, Shared.TokenRange.Any), RuleOperation.create2(new RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.isJsxExpressionContext), RuleAction.Space));
503+
this.NoSpaceBeforeCloseBraceInJsxExpression = new Rule(RuleDescriptor.create2(Shared.TokenRange.Any, SyntaxKind.CloseBraceToken), RuleOperation.create2(new RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.isJsxExpressionContext), RuleAction.Delete));
504+
this.SpaceBeforeCloseBraceInJsxExpression = new Rule(RuleDescriptor.create2(Shared.TokenRange.Any, SyntaxKind.CloseBraceToken), RuleOperation.create2(new RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.isJsxExpressionContext), RuleAction.Space));
505+
503506
// Insert space after function keyword for anonymous functions
504507
this.SpaceAfterAnonymousFunctionKeyword = new Rule(RuleDescriptor.create1(SyntaxKind.FunctionKeyword, SyntaxKind.OpenParenToken), RuleOperation.create2(new RuleOperationContext(Rules.IsFunctionDeclContext), RuleAction.Space));
505508
this.NoSpaceAfterAnonymousFunctionKeyword = new Rule(RuleDescriptor.create1(SyntaxKind.FunctionKeyword, SyntaxKind.OpenParenToken), RuleOperation.create2(new RuleOperationContext(Rules.IsFunctionDeclContext), RuleAction.Delete));

src/services/formatting/rulesProvider.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,15 @@ namespace ts.formatting {
9090
rules.push(this.globalRules.NoSpaceBeforeTemplateMiddleAndTail);
9191
}
9292

93+
if (options.InsertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces) {
94+
rules.push(this.globalRules.SpaceAfterOpenBraceInJsxExpression);
95+
rules.push(this.globalRules.SpaceBeforeCloseBraceInJsxExpression);
96+
}
97+
else {
98+
rules.push(this.globalRules.NoSpaceAfterOpenBraceInJsxExpression);
99+
rules.push(this.globalRules.NoSpaceBeforeCloseBraceInJsxExpression);
100+
}
101+
93102
if (options.InsertSpaceAfterSemicolonInForStatements) {
94103
rules.push(this.globalRules.SpaceAfterSemicolonInFor);
95104
}

src/services/services.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1267,6 +1267,7 @@ namespace ts {
12671267
InsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis: boolean;
12681268
InsertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets: boolean;
12691269
InsertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces: boolean;
1270+
InsertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces: boolean;
12701271
PlaceOpenBraceOnNewLineForFunctions: boolean;
12711272
PlaceOpenBraceOnNewLineForControlBlocks: boolean;
12721273
[s: string]: boolean | number | string | undefined;
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
///<reference path="fourslash.ts"/>
2+
3+
//@Filename: file.tsx
4+
/////*InsertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces*/<Madoka homu={ true } saya={ (true) } />;
5+
6+
runTest("InsertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces", "<Madoka homu={ true } saya={ (true) } />;", "<Madoka homu={true} saya={(true)} />;");
7+
8+
9+
function runTest(propertyName: string, expectedStringWhenTrue: string, expectedStringWhenFalse: string) {
10+
// Go to the correct file
11+
goTo.marker(propertyName);
12+
13+
// Set the option to false first
14+
format.setOption(propertyName, false);
15+
16+
// Format
17+
format.document();
18+
19+
// Verify
20+
goTo.marker(propertyName);
21+
verify.currentLineContentIs(expectedStringWhenFalse);
22+
23+
// Set the option to true
24+
format.setOption(propertyName, true);
25+
26+
// Format
27+
format.document();
28+
29+
// Verify
30+
goTo.marker(propertyName);
31+
verify.currentLineContentIs(expectedStringWhenTrue);
32+
}

0 commit comments

Comments
 (0)