Merge pull request #13125 from flowmemo/fix-13114

fix issue #13114
This commit is contained in:
Mohamed Hegazy 2016-12-22 10:10:42 -08:00 committed by GitHub
commit fbe7a4fb8d
2 changed files with 35 additions and 2 deletions

View File

@ -264,12 +264,12 @@ namespace ts.formatting {
this.SpaceAfterSemicolon = new Rule(RuleDescriptor.create3(SyntaxKind.SemicolonToken, Shared.TokenRange.Any), RuleOperation.create2(new RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), RuleAction.Space));
// Space after }.
this.SpaceAfterCloseBrace = new Rule(RuleDescriptor.create3(SyntaxKind.CloseBraceToken, Shared.TokenRange.Any), RuleOperation.create2(new RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsAfterCodeBlockContext), RuleAction.Space));
this.SpaceAfterCloseBrace = new Rule(RuleDescriptor.create3(SyntaxKind.CloseBraceToken, Shared.TokenRange.FromRange(SyntaxKind.FirstToken, SyntaxKind.LastToken, [SyntaxKind.CloseParenToken])), RuleOperation.create2(new RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsAfterCodeBlockContext), RuleAction.Space));
// Special case for (}, else) and (}, while) since else & while tokens are not part of the tree which makes SpaceAfterCloseBrace rule not applied
this.SpaceBetweenCloseBraceAndElse = new Rule(RuleDescriptor.create1(SyntaxKind.CloseBraceToken, SyntaxKind.ElseKeyword), RuleOperation.create2(new RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), RuleAction.Space));
this.SpaceBetweenCloseBraceAndWhile = new Rule(RuleDescriptor.create1(SyntaxKind.CloseBraceToken, SyntaxKind.WhileKeyword), RuleOperation.create2(new RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), RuleAction.Space));
this.NoSpaceAfterCloseBrace = new Rule(RuleDescriptor.create3(SyntaxKind.CloseBraceToken, Shared.TokenRange.FromTokens([SyntaxKind.CloseParenToken, SyntaxKind.CloseBracketToken, SyntaxKind.CommaToken, SyntaxKind.SemicolonToken])), RuleOperation.create2(new RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), RuleAction.Delete));
this.NoSpaceAfterCloseBrace = new Rule(RuleDescriptor.create3(SyntaxKind.CloseBraceToken, Shared.TokenRange.FromTokens([SyntaxKind.CloseBracketToken, SyntaxKind.CommaToken, SyntaxKind.SemicolonToken])), RuleOperation.create2(new RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), RuleAction.Delete));
// No space for dot
this.NoSpaceBeforeDot = new Rule(RuleDescriptor.create2(Shared.TokenRange.Any, SyntaxKind.DotToken), RuleOperation.create2(new RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), RuleAction.Delete));

View File

@ -0,0 +1,33 @@
/// <reference path='fourslash.ts' />
/////*1*/({});
/////*2*/( {});
/////*3*/({foo:42});
/////*4*/( {foo:42} );
/////*5*/var bar = (function (a) { });
format.setOption("InsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis", true);
format.document();
goTo.marker('1');
verify.currentLineContentIs('( {} );');
goTo.marker('2');
verify.currentLineContentIs('( {} );');
goTo.marker('3');
verify.currentLineContentIs('( { foo: 42 } );');
goTo.marker('4');
verify.currentLineContentIs('( { foo: 42 } );');
goTo.marker('5');
verify.currentLineContentIs('var bar = ( function( a ) { } );');
format.setOption("InsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis", false);
format.document();
goTo.marker('1');
verify.currentLineContentIs('({});');
goTo.marker('2');
verify.currentLineContentIs('({});');
goTo.marker('3');
verify.currentLineContentIs('({ foo: 42 });');
goTo.marker('4');
verify.currentLineContentIs('({ foo: 42 });');
goTo.marker('5');
verify.currentLineContentIs('var bar = (function(a) { });');