@@ -227,11 +227,13 @@ namespace ts.formatting {
227227 public SpaceBetweenTagAndTemplateString : Rule ;
228228 public NoSpaceBetweenTagAndTemplateString : Rule ;
229229
230- // Union type
230+ // Type operation
231231 public SpaceBeforeBar : Rule ;
232232 public NoSpaceBeforeBar : Rule ;
233233 public SpaceAfterBar : Rule ;
234234 public NoSpaceAfterBar : Rule ;
235+ public SpaceBeforeAmpersand : Rule ;
236+ public SpaceAfterAmpersand : Rule ;
235237
236238 constructor ( ) {
237239 ///
@@ -272,7 +274,7 @@ namespace ts.formatting {
272274 this . SpaceBeforeOpenBraceInFunction = new Rule ( RuleDescriptor . create2 ( this . FunctionOpenBraceLeftTokenRange , SyntaxKind . OpenBraceToken ) , RuleOperation . create2 ( new RuleOperationContext ( Rules . IsFunctionDeclContext , Rules . IsBeforeBlockContext , Rules . IsNotFormatOnEnter , Rules . IsSameLineTokenOrBeforeMultilineBlockContext ) , RuleAction . Space ) , RuleFlags . CanDeleteNewLines ) ;
273275
274276 // Place a space before open brace in a TypeScript declaration that has braces as children (class, module, enum, etc)
275- this . TypeScriptOpenBraceLeftTokenRange = Shared . TokenRange . FromTokens ( [ SyntaxKind . Identifier , SyntaxKind . MultiLineCommentTrivia ] ) ;
277+ this . TypeScriptOpenBraceLeftTokenRange = Shared . TokenRange . FromTokens ( [ SyntaxKind . Identifier , SyntaxKind . MultiLineCommentTrivia , SyntaxKind . ClassKeyword ] ) ;
276278 this . SpaceBeforeOpenBraceInTypeScriptDeclWithBlock = new Rule ( RuleDescriptor . create2 ( this . TypeScriptOpenBraceLeftTokenRange , SyntaxKind . OpenBraceToken ) , RuleOperation . create2 ( new RuleOperationContext ( Rules . IsTypeScriptDeclWithBlockContext , Rules . IsNotFormatOnEnter , Rules . IsSameLineTokenOrBeforeMultilineBlockContext ) , RuleAction . Space ) , RuleFlags . CanDeleteNewLines ) ;
277279
278280 // Place a space before open brace in a control flow construct
@@ -394,12 +396,13 @@ namespace ts.formatting {
394396 this . SpaceBetweenTagAndTemplateString = new Rule ( RuleDescriptor . create3 ( SyntaxKind . Identifier , Shared . TokenRange . FromTokens ( [ SyntaxKind . NoSubstitutionTemplateLiteral , SyntaxKind . TemplateHead ] ) ) , RuleOperation . create2 ( new RuleOperationContext ( Rules . IsSameLineTokenContext ) , RuleAction . Space ) ) ;
395397 this . NoSpaceBetweenTagAndTemplateString = new Rule ( RuleDescriptor . create3 ( SyntaxKind . Identifier , Shared . TokenRange . FromTokens ( [ SyntaxKind . NoSubstitutionTemplateLiteral , SyntaxKind . TemplateHead ] ) ) , RuleOperation . create2 ( new RuleOperationContext ( Rules . IsSameLineTokenContext ) , RuleAction . Delete ) ) ;
396398
397- // union type
399+ // type operation
398400 this . SpaceBeforeBar = new Rule ( RuleDescriptor . create3 ( SyntaxKind . BarToken , Shared . TokenRange . Any ) , RuleOperation . create2 ( new RuleOperationContext ( Rules . IsSameLineTokenContext ) , RuleAction . Space ) ) ;
399401 this . NoSpaceBeforeBar = new Rule ( RuleDescriptor . create3 ( SyntaxKind . BarToken , Shared . TokenRange . Any ) , RuleOperation . create2 ( new RuleOperationContext ( Rules . IsSameLineTokenContext ) , RuleAction . Delete ) ) ;
400402 this . SpaceAfterBar = new Rule ( RuleDescriptor . create2 ( Shared . TokenRange . Any , SyntaxKind . BarToken ) , RuleOperation . create2 ( new RuleOperationContext ( Rules . IsSameLineTokenContext ) , RuleAction . Space ) ) ;
401403 this . NoSpaceAfterBar = new Rule ( RuleDescriptor . create2 ( Shared . TokenRange . Any , SyntaxKind . BarToken ) , RuleOperation . create2 ( new RuleOperationContext ( Rules . IsSameLineTokenContext ) , RuleAction . Delete ) ) ;
402-
404+ this . SpaceBeforeAmpersand = new Rule ( RuleDescriptor . create3 ( SyntaxKind . AmpersandToken , Shared . TokenRange . Any ) , RuleOperation . create2 ( new RuleOperationContext ( Rules . IsSameLineTokenContext ) , RuleAction . Space ) ) ;
405+ this . SpaceAfterAmpersand = new Rule ( RuleDescriptor . create2 ( Shared . TokenRange . Any , SyntaxKind . AmpersandToken ) , RuleOperation . create2 ( new RuleOperationContext ( Rules . IsSameLineTokenContext ) , RuleAction . Space ) ) ;
403406
404407 // These rules are higher in priority than user-configurable rules.
405408 this . HighPriorityCommonRules =
@@ -432,6 +435,7 @@ namespace ts.formatting {
432435 this . SpaceAfterTypeKeyword , this . NoSpaceAfterTypeKeyword ,
433436 this . SpaceBetweenTagAndTemplateString , this . NoSpaceBetweenTagAndTemplateString ,
434437 this . SpaceBeforeBar , this . NoSpaceBeforeBar , this . SpaceAfterBar , this . NoSpaceAfterBar ,
438+ this . SpaceBeforeAmpersand , this . SpaceAfterAmpersand ,
435439
436440 // TypeScript-specific rules
437441 this . NoSpaceAfterConstructor , this . NoSpaceAfterModuleImport ,
@@ -663,6 +667,7 @@ namespace ts.formatting {
663667 static NodeIsTypeScriptDeclWithBlockContext ( node : Node ) : boolean {
664668 switch ( node . kind ) {
665669 case SyntaxKind . ClassDeclaration :
670+ case SyntaxKind . ClassExpression :
666671 case SyntaxKind . InterfaceDeclaration :
667672 case SyntaxKind . EnumDeclaration :
668673 case SyntaxKind . TypeLiteral :
0 commit comments