@@ -290,15 +290,15 @@ namespace ts.formatting {
290290
291291 // Place a space before open brace in a function declaration
292292 this . FunctionOpenBraceLeftTokenRange = Shared . TokenRange . AnyIncludingMultilineComments ;
293- this . SpaceBeforeOpenBraceInFunction = new Rule ( RuleDescriptor . create2 ( this . FunctionOpenBraceLeftTokenRange , SyntaxKind . OpenBraceToken ) , RuleOperation . create2 ( new RuleOperationContext ( Rules . IsFunctionDeclContext , Rules . IsBeforeBlockContext , Rules . IsNotFormatOnEnter , Rules . IsSameLineTokenOrBeforeBlockContext ) , RuleAction . Space ) , RuleFlags . CanDeleteNewLines ) ;
293+ this . SpaceBeforeOpenBraceInFunction = new Rule ( RuleDescriptor . create2 ( this . FunctionOpenBraceLeftTokenRange , SyntaxKind . OpenBraceToken ) , RuleOperation . create2 ( new RuleOperationContext ( Rules . isOptionDisabledOrUndefinedOrTokensOnSameLine ( "placeOpenBraceOnNewLineForFunctions" ) , Rules . IsFunctionDeclContext , Rules . IsBeforeBlockContext , Rules . IsNotFormatOnEnter , Rules . IsSameLineTokenOrBeforeBlockContext ) , RuleAction . Space ) , RuleFlags . CanDeleteNewLines ) ;
294294
295295 // Place a space before open brace in a TypeScript declaration that has braces as children (class, module, enum, etc)
296296 this . TypeScriptOpenBraceLeftTokenRange = Shared . TokenRange . FromTokens ( [ SyntaxKind . Identifier , SyntaxKind . MultiLineCommentTrivia , SyntaxKind . ClassKeyword , SyntaxKind . ExportKeyword , SyntaxKind . ImportKeyword ] ) ;
297- this . SpaceBeforeOpenBraceInTypeScriptDeclWithBlock = new Rule ( RuleDescriptor . create2 ( this . TypeScriptOpenBraceLeftTokenRange , SyntaxKind . OpenBraceToken ) , RuleOperation . create2 ( new RuleOperationContext ( Rules . IsTypeScriptDeclWithBlockContext , Rules . IsNotFormatOnEnter , Rules . IsSameLineTokenOrBeforeBlockContext ) , RuleAction . Space ) , RuleFlags . CanDeleteNewLines ) ;
297+ this . SpaceBeforeOpenBraceInTypeScriptDeclWithBlock = new Rule ( RuleDescriptor . create2 ( this . TypeScriptOpenBraceLeftTokenRange , SyntaxKind . OpenBraceToken ) , RuleOperation . create2 ( new RuleOperationContext ( Rules . isOptionDisabledOrUndefinedOrTokensOnSameLine ( "placeOpenBraceOnNewLineForFunctions" ) , Rules . IsTypeScriptDeclWithBlockContext , Rules . IsNotFormatOnEnter , Rules . IsSameLineTokenOrBeforeBlockContext ) , RuleAction . Space ) , RuleFlags . CanDeleteNewLines ) ;
298298
299299 // Place a space before open brace in a control flow construct
300300 this . ControlOpenBraceLeftTokenRange = Shared . TokenRange . FromTokens ( [ SyntaxKind . CloseParenToken , SyntaxKind . MultiLineCommentTrivia , SyntaxKind . DoKeyword , SyntaxKind . TryKeyword , SyntaxKind . FinallyKeyword , SyntaxKind . ElseKeyword ] ) ;
301- this . SpaceBeforeOpenBraceInControl = new Rule ( RuleDescriptor . create2 ( this . ControlOpenBraceLeftTokenRange , SyntaxKind . OpenBraceToken ) , RuleOperation . create2 ( new RuleOperationContext ( Rules . IsControlDeclContext , Rules . IsNotFormatOnEnter , Rules . IsSameLineTokenOrBeforeBlockContext ) , RuleAction . Space ) , RuleFlags . CanDeleteNewLines ) ;
301+ this . SpaceBeforeOpenBraceInControl = new Rule ( RuleDescriptor . create2 ( this . ControlOpenBraceLeftTokenRange , SyntaxKind . OpenBraceToken ) , RuleOperation . create2 ( new RuleOperationContext ( Rules . isOptionDisabledOrUndefinedOrTokensOnSameLine ( "placeOpenBraceOnNewLineForControlBlocks" ) , Rules . IsControlDeclContext , Rules . IsNotFormatOnEnter , Rules . IsSameLineTokenOrBeforeBlockContext ) , RuleAction . Space ) , RuleFlags . CanDeleteNewLines ) ;
302302
303303 // Insert a space after { and before } in single-line contexts, but remove space from empty object literals {}.
304304 this . SpaceAfterOpenBrace = new Rule ( RuleDescriptor . create3 ( SyntaxKind . OpenBraceToken , Shared . TokenRange . Any ) , RuleOperation . create2 ( new RuleOperationContext ( Rules . IsOptionEnabledOrUndefined ( "insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces" ) , Rules . IsBraceWrappedContext ) , RuleAction . Space ) ) ;
@@ -585,6 +585,10 @@ namespace ts.formatting {
585585 return ( context ) => ! context . options || ! context . options . hasOwnProperty ( optionName ) || ! context . options [ optionName ] ;
586586 }
587587
588+ static isOptionDisabledOrUndefinedOrTokensOnSameLine ( optionName : keyof FormatCodeSettings ) : ( context : FormattingContext ) => boolean {
589+ return ( context ) => ! context . options || ! context . options . hasOwnProperty ( optionName ) || ! context . options [ optionName ] || context . TokensAreOnSameLine ( ) ;
590+ }
591+
588592 static IsOptionEnabledOrUndefined ( optionName : keyof FormatCodeSettings ) : ( context : FormattingContext ) => boolean {
589593 return ( context ) => ! context . options || ! context . options . hasOwnProperty ( optionName ) || ! ! context . options [ optionName ] ;
590594 }
0 commit comments