@@ -6,6 +6,7 @@ namespace ts.formatting {
66 export interface ITokenAccess {
77 GetTokens ( ) : SyntaxKind [ ] ;
88 Contains ( token : SyntaxKind ) : boolean ;
9+ isSpecific ( ) : boolean ;
910 }
1011
1112 export class TokenRangeAccess implements ITokenAccess {
@@ -27,6 +28,8 @@ namespace ts.formatting {
2728 public Contains ( token : SyntaxKind ) : boolean {
2829 return this . tokens . indexOf ( token ) >= 0 ;
2930 }
31+
32+ public isSpecific ( ) { return true ; }
3033 }
3134
3235 export class TokenValuesAccess implements ITokenAccess {
@@ -43,6 +46,8 @@ namespace ts.formatting {
4346 public Contains ( token : SyntaxKind ) : boolean {
4447 return this . tokens . indexOf ( token ) >= 0 ;
4548 }
49+
50+ public isSpecific ( ) { return true ; }
4651 }
4752
4853 export class TokenSingleValueAccess implements ITokenAccess {
@@ -56,15 +61,18 @@ namespace ts.formatting {
5661 public Contains ( tokenValue : SyntaxKind ) : boolean {
5762 return tokenValue === this . token ;
5863 }
64+
65+ public isSpecific ( ) { return true ; }
66+ }
67+
68+ const allTokens : SyntaxKind [ ] = [ ] ;
69+ for ( let token = SyntaxKind . FirstToken ; token <= SyntaxKind . LastToken ; token ++ ) {
70+ allTokens . push ( token ) ;
5971 }
6072
6173 export class TokenAllAccess implements ITokenAccess {
6274 public GetTokens ( ) : SyntaxKind [ ] {
63- const result : SyntaxKind [ ] = [ ] ;
64- for ( let token = SyntaxKind . FirstToken ; token <= SyntaxKind . LastToken ; token ++ ) {
65- result . push ( token ) ;
66- }
67- return result ;
75+ return allTokens ;
6876 }
6977
7078 public Contains ( ) : boolean {
@@ -74,6 +82,22 @@ namespace ts.formatting {
7482 public toString ( ) : string {
7583 return "[allTokens]" ;
7684 }
85+
86+ public isSpecific ( ) { return false ; }
87+ }
88+
89+ export class TokenAllExceptAccess implements ITokenAccess {
90+ constructor ( readonly except : SyntaxKind ) { }
91+
92+ public GetTokens ( ) : SyntaxKind [ ] {
93+ return allTokens . filter ( t => t !== this . except ) ;
94+ }
95+
96+ public Contains ( token : SyntaxKind ) : boolean {
97+ return token !== this . except ;
98+ }
99+
100+ public isSpecific ( ) { return false ; }
77101 }
78102
79103 export class TokenRange {
@@ -92,8 +116,8 @@ namespace ts.formatting {
92116 return new TokenRange ( new TokenRangeAccess ( f , to , except ) ) ;
93117 }
94118
95- static AllTokens ( ) : TokenRange {
96- return new TokenRange ( new TokenAllAccess ( ) ) ;
119+ static AnyExcept ( token : SyntaxKind ) : TokenRange {
120+ return new TokenRange ( new TokenAllExceptAccess ( token ) ) ;
97121 }
98122
99123 public GetTokens ( ) : SyntaxKind [ ] {
@@ -108,8 +132,12 @@ namespace ts.formatting {
108132 return this . tokenAccess . toString ( ) ;
109133 }
110134
111- static Any : TokenRange = TokenRange . AllTokens ( ) ;
112- static AnyIncludingMultilineComments = TokenRange . FromTokens ( TokenRange . Any . GetTokens ( ) . concat ( [ SyntaxKind . MultiLineCommentTrivia ] ) ) ;
135+ public isSpecific ( ) {
136+ return this . tokenAccess . isSpecific ( ) ;
137+ }
138+
139+ static Any : TokenRange = new TokenRange ( new TokenAllAccess ( ) ) ;
140+ static AnyIncludingMultilineComments = TokenRange . FromTokens ( [ ...allTokens , SyntaxKind . MultiLineCommentTrivia ] ) ;
113141 static Keywords = TokenRange . FromRange ( SyntaxKind . FirstKeyword , SyntaxKind . LastKeyword ) ;
114142 static BinaryOperators = TokenRange . FromRange ( SyntaxKind . FirstBinaryOperator , SyntaxKind . LastBinaryOperator ) ;
115143 static BinaryKeywordOperators = TokenRange . FromTokens ( [ SyntaxKind . InKeyword , SyntaxKind . InstanceOfKeyword , SyntaxKind . OfKeyword , SyntaxKind . AsKeyword , SyntaxKind . IsKeyword ] ) ;
0 commit comments