@@ -6,6 +6,7 @@ namespace ts.formatting {
6
6
export interface ITokenAccess {
7
7
GetTokens ( ) : SyntaxKind [ ] ;
8
8
Contains ( token : SyntaxKind ) : boolean ;
9
+ isSpecific ( ) : boolean ;
9
10
}
10
11
11
12
export class TokenRangeAccess implements ITokenAccess {
@@ -27,6 +28,8 @@ namespace ts.formatting {
27
28
public Contains ( token : SyntaxKind ) : boolean {
28
29
return this . tokens . indexOf ( token ) >= 0 ;
29
30
}
31
+
32
+ public isSpecific ( ) { return true ; }
30
33
}
31
34
32
35
export class TokenValuesAccess implements ITokenAccess {
@@ -43,6 +46,8 @@ namespace ts.formatting {
43
46
public Contains ( token : SyntaxKind ) : boolean {
44
47
return this . tokens . indexOf ( token ) >= 0 ;
45
48
}
49
+
50
+ public isSpecific ( ) { return true ; }
46
51
}
47
52
48
53
export class TokenSingleValueAccess implements ITokenAccess {
@@ -56,15 +61,18 @@ namespace ts.formatting {
56
61
public Contains ( tokenValue : SyntaxKind ) : boolean {
57
62
return tokenValue === this . token ;
58
63
}
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 ) ;
59
71
}
60
72
61
73
export class TokenAllAccess implements ITokenAccess {
62
74
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 ;
68
76
}
69
77
70
78
public Contains ( ) : boolean {
@@ -74,6 +82,22 @@ namespace ts.formatting {
74
82
public toString ( ) : string {
75
83
return "[allTokens]" ;
76
84
}
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 ; }
77
101
}
78
102
79
103
export class TokenRange {
@@ -92,8 +116,8 @@ namespace ts.formatting {
92
116
return new TokenRange ( new TokenRangeAccess ( f , to , except ) ) ;
93
117
}
94
118
95
- static AllTokens ( ) : TokenRange {
96
- return new TokenRange ( new TokenAllAccess ( ) ) ;
119
+ static AnyExcept ( token : SyntaxKind ) : TokenRange {
120
+ return new TokenRange ( new TokenAllExceptAccess ( token ) ) ;
97
121
}
98
122
99
123
public GetTokens ( ) : SyntaxKind [ ] {
@@ -108,8 +132,12 @@ namespace ts.formatting {
108
132
return this . tokenAccess . toString ( ) ;
109
133
}
110
134
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 ] ) ;
113
141
static Keywords = TokenRange . FromRange ( SyntaxKind . FirstKeyword , SyntaxKind . LastKeyword ) ;
114
142
static BinaryOperators = TokenRange . FromRange ( SyntaxKind . FirstBinaryOperator , SyntaxKind . LastBinaryOperator ) ;
115
143
static BinaryKeywordOperators = TokenRange . FromTokens ( [ SyntaxKind . InKeyword , SyntaxKind . InstanceOfKeyword , SyntaxKind . OfKeyword , SyntaxKind . AsKeyword , SyntaxKind . IsKeyword ] ) ;
0 commit comments