@@ -290,15 +290,15 @@ namespace ts.formatting {
290
290
291
291
// Place a space before open brace in a function declaration
292
292
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 ) ;
294
294
295
295
// Place a space before open brace in a TypeScript declaration that has braces as children (class, module, enum, etc)
296
296
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 ) ;
298
298
299
299
// Place a space before open brace in a control flow construct
300
300
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 ) ;
302
302
303
303
// Insert a space after { and before } in single-line contexts, but remove space from empty object literals {}.
304
304
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 {
585
585
return ( context ) => ! context . options || ! context . options . hasOwnProperty ( optionName ) || ! context . options [ optionName ] ;
586
586
}
587
587
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
+
588
592
static IsOptionEnabledOrUndefined ( optionName : keyof FormatCodeSettings ) : ( context : FormattingContext ) => boolean {
589
593
return ( context ) => ! context . options || ! context . options . hasOwnProperty ( optionName ) || ! ! context . options [ optionName ] ;
590
594
}
0 commit comments