Skip to content

Commit 681f33e

Browse files
author
Andy
authored
Merge pull request #15560 from Microsoft/tokenRange
Make TokenRange an interface and remove `ITokenAccess` delegation
2 parents d483df9 + c61a371 commit 681f33e

File tree

1 file changed

+57
-88
lines changed

1 file changed

+57
-88
lines changed

Diff for: src/services/formatting/tokenRange.ts

+57-88
Original file line numberDiff line numberDiff line change
@@ -3,41 +3,13 @@
33
/* @internal */
44
namespace ts.formatting {
55
export namespace Shared {
6-
export interface ITokenAccess {
7-
GetTokens(): SyntaxKind[];
8-
Contains(token: SyntaxKind): boolean;
9-
isSpecific(): boolean;
10-
}
11-
12-
export class TokenRangeAccess implements ITokenAccess {
13-
private tokens: SyntaxKind[];
14-
15-
constructor(from: SyntaxKind, to: SyntaxKind, except: SyntaxKind[]) {
16-
this.tokens = [];
17-
for (let token = from; token <= to; token++) {
18-
if (ts.indexOf(except, token) < 0) {
19-
this.tokens.push(token);
20-
}
21-
}
22-
}
23-
24-
public GetTokens(): SyntaxKind[] {
25-
return this.tokens;
26-
}
27-
28-
public Contains(token: SyntaxKind): boolean {
29-
return this.tokens.indexOf(token) >= 0;
30-
}
31-
32-
public isSpecific() { return true; }
6+
const allTokens: SyntaxKind[] = [];
7+
for (let token = SyntaxKind.FirstToken; token <= SyntaxKind.LastToken; token++) {
8+
allTokens.push(token);
339
}
3410

35-
export class TokenValuesAccess implements ITokenAccess {
36-
private tokens: SyntaxKind[];
37-
38-
constructor(tks: SyntaxKind[]) {
39-
this.tokens = tks && tks.length ? tks : <SyntaxKind[]>[];
40-
}
11+
class TokenValuesAccess implements TokenRange {
12+
constructor(private readonly tokens: SyntaxKind[] = []) { }
4113

4214
public GetTokens(): SyntaxKind[] {
4315
return this.tokens;
@@ -50,9 +22,8 @@ namespace ts.formatting {
5022
public isSpecific() { return true; }
5123
}
5224

53-
export class TokenSingleValueAccess implements ITokenAccess {
54-
constructor(public token: SyntaxKind) {
55-
}
25+
class TokenSingleValueAccess implements TokenRange {
26+
constructor(private readonly token: SyntaxKind) {}
5627

5728
public GetTokens(): SyntaxKind[] {
5829
return [this.token];
@@ -65,12 +36,7 @@ namespace ts.formatting {
6536
public isSpecific() { return true; }
6637
}
6738

68-
const allTokens: SyntaxKind[] = [];
69-
for (let token = SyntaxKind.FirstToken; token <= SyntaxKind.LastToken; token++) {
70-
allTokens.push(token);
71-
}
72-
73-
export class TokenAllAccess implements ITokenAccess {
39+
class TokenAllAccess implements TokenRange {
7440
public GetTokens(): SyntaxKind[] {
7541
return allTokens;
7642
}
@@ -86,8 +52,8 @@ namespace ts.formatting {
8652
public isSpecific() { return false; }
8753
}
8854

89-
export class TokenAllExceptAccess implements ITokenAccess {
90-
constructor(readonly except: SyntaxKind) {}
55+
class TokenAllExceptAccess implements TokenRange {
56+
constructor(private readonly except: SyntaxKind) {}
9157

9258
public GetTokens(): SyntaxKind[] {
9359
return allTokens.filter(t => t !== this.except);
@@ -100,55 +66,58 @@ namespace ts.formatting {
10066
public isSpecific() { return false; }
10167
}
10268

103-
export class TokenRange {
104-
constructor(public tokenAccess: ITokenAccess) {
105-
}
106-
107-
static FromToken(token: SyntaxKind): TokenRange {
108-
return new TokenRange(new TokenSingleValueAccess(token));
109-
}
110-
111-
static FromTokens(tokens: SyntaxKind[]): TokenRange {
112-
return new TokenRange(new TokenValuesAccess(tokens));
113-
}
114-
115-
static FromRange(f: SyntaxKind, to: SyntaxKind, except: SyntaxKind[] = []): TokenRange {
116-
return new TokenRange(new TokenRangeAccess(f, to, except));
117-
}
118-
119-
static AnyExcept(token: SyntaxKind): TokenRange {
120-
return new TokenRange(new TokenAllExceptAccess(token));
121-
}
122-
123-
public GetTokens(): SyntaxKind[] {
124-
return this.tokenAccess.GetTokens();
125-
}
126-
127-
public Contains(token: SyntaxKind): boolean {
128-
return this.tokenAccess.Contains(token);
129-
}
69+
export interface TokenRange {
70+
GetTokens(): SyntaxKind[];
71+
Contains(token: SyntaxKind): boolean;
72+
isSpecific(): boolean;
73+
}
13074

131-
public toString(): string {
132-
return this.tokenAccess.toString();
75+
export namespace TokenRange {
76+
export function FromToken(token: SyntaxKind): TokenRange {
77+
return new TokenSingleValueAccess(token);
13378
}
13479

135-
public isSpecific() {
136-
return this.tokenAccess.isSpecific();
80+
export function FromTokens(tokens: SyntaxKind[]): TokenRange {
81+
return new TokenValuesAccess(tokens);
13782
}
13883

139-
static Any: TokenRange = new TokenRange(new TokenAllAccess());
140-
static AnyIncludingMultilineComments = TokenRange.FromTokens([...allTokens, SyntaxKind.MultiLineCommentTrivia]);
141-
static Keywords = TokenRange.FromRange(SyntaxKind.FirstKeyword, SyntaxKind.LastKeyword);
142-
static BinaryOperators = TokenRange.FromRange(SyntaxKind.FirstBinaryOperator, SyntaxKind.LastBinaryOperator);
143-
static BinaryKeywordOperators = TokenRange.FromTokens([SyntaxKind.InKeyword, SyntaxKind.InstanceOfKeyword, SyntaxKind.OfKeyword, SyntaxKind.AsKeyword, SyntaxKind.IsKeyword]);
144-
static UnaryPrefixOperators = TokenRange.FromTokens([SyntaxKind.PlusPlusToken, SyntaxKind.MinusMinusToken, SyntaxKind.TildeToken, SyntaxKind.ExclamationToken]);
145-
static UnaryPrefixExpressions = TokenRange.FromTokens([SyntaxKind.NumericLiteral, SyntaxKind.Identifier, SyntaxKind.OpenParenToken, SyntaxKind.OpenBracketToken, SyntaxKind.OpenBraceToken, SyntaxKind.ThisKeyword, SyntaxKind.NewKeyword]);
146-
static UnaryPreincrementExpressions = TokenRange.FromTokens([SyntaxKind.Identifier, SyntaxKind.OpenParenToken, SyntaxKind.ThisKeyword, SyntaxKind.NewKeyword]);
147-
static UnaryPostincrementExpressions = TokenRange.FromTokens([SyntaxKind.Identifier, SyntaxKind.CloseParenToken, SyntaxKind.CloseBracketToken, SyntaxKind.NewKeyword]);
148-
static UnaryPredecrementExpressions = TokenRange.FromTokens([SyntaxKind.Identifier, SyntaxKind.OpenParenToken, SyntaxKind.ThisKeyword, SyntaxKind.NewKeyword]);
149-
static UnaryPostdecrementExpressions = TokenRange.FromTokens([SyntaxKind.Identifier, SyntaxKind.CloseParenToken, SyntaxKind.CloseBracketToken, SyntaxKind.NewKeyword]);
150-
static Comments = TokenRange.FromTokens([SyntaxKind.SingleLineCommentTrivia, SyntaxKind.MultiLineCommentTrivia]);
151-
static TypeNames = TokenRange.FromTokens([SyntaxKind.Identifier, SyntaxKind.NumberKeyword, SyntaxKind.StringKeyword, SyntaxKind.BooleanKeyword, SyntaxKind.SymbolKeyword, SyntaxKind.VoidKeyword, SyntaxKind.AnyKeyword]);
84+
export function FromRange(from: SyntaxKind, to: SyntaxKind, except: SyntaxKind[] = []): TokenRange {
85+
const tokens: SyntaxKind[] = [];
86+
for (let token = from; token <= to; token++) {
87+
if (ts.indexOf(except, token) < 0) {
88+
tokens.push(token);
89+
}
90+
}
91+
return new TokenValuesAccess(tokens);
92+
}
93+
94+
export function AnyExcept(token: SyntaxKind): TokenRange {
95+
return new TokenAllExceptAccess(token);
96+
}
97+
98+
export const Any: TokenRange = new TokenAllAccess();
99+
export const AnyIncludingMultilineComments = TokenRange.FromTokens([...allTokens, SyntaxKind.MultiLineCommentTrivia]);
100+
export const Keywords = TokenRange.FromRange(SyntaxKind.FirstKeyword, SyntaxKind.LastKeyword);
101+
export const BinaryOperators = TokenRange.FromRange(SyntaxKind.FirstBinaryOperator, SyntaxKind.LastBinaryOperator);
102+
export const BinaryKeywordOperators = TokenRange.FromTokens([
103+
SyntaxKind.InKeyword, SyntaxKind.InstanceOfKeyword, SyntaxKind.OfKeyword, SyntaxKind.AsKeyword, SyntaxKind.IsKeyword]);
104+
export const UnaryPrefixOperators = TokenRange.FromTokens([
105+
SyntaxKind.PlusPlusToken, SyntaxKind.MinusMinusToken, SyntaxKind.TildeToken, SyntaxKind.ExclamationToken]);
106+
export const UnaryPrefixExpressions = TokenRange.FromTokens([
107+
SyntaxKind.NumericLiteral, SyntaxKind.Identifier, SyntaxKind.OpenParenToken, SyntaxKind.OpenBracketToken,
108+
SyntaxKind.OpenBraceToken, SyntaxKind.ThisKeyword, SyntaxKind.NewKeyword]);
109+
export const UnaryPreincrementExpressions = TokenRange.FromTokens([
110+
SyntaxKind.Identifier, SyntaxKind.OpenParenToken, SyntaxKind.ThisKeyword, SyntaxKind.NewKeyword]);
111+
export const UnaryPostincrementExpressions = TokenRange.FromTokens([
112+
SyntaxKind.Identifier, SyntaxKind.CloseParenToken, SyntaxKind.CloseBracketToken, SyntaxKind.NewKeyword]);
113+
export const UnaryPredecrementExpressions = TokenRange.FromTokens([
114+
SyntaxKind.Identifier, SyntaxKind.OpenParenToken, SyntaxKind.ThisKeyword, SyntaxKind.NewKeyword]);
115+
export const UnaryPostdecrementExpressions = TokenRange.FromTokens([
116+
SyntaxKind.Identifier, SyntaxKind.CloseParenToken, SyntaxKind.CloseBracketToken, SyntaxKind.NewKeyword]);
117+
export const Comments = TokenRange.FromTokens([SyntaxKind.SingleLineCommentTrivia, SyntaxKind.MultiLineCommentTrivia]);
118+
export const TypeNames = TokenRange.FromTokens([
119+
SyntaxKind.Identifier, SyntaxKind.NumberKeyword, SyntaxKind.StringKeyword, SyntaxKind.BooleanKeyword,
120+
SyntaxKind.SymbolKeyword, SyntaxKind.VoidKeyword, SyntaxKind.AnyKeyword]);
152121
}
153122
}
154123
}

0 commit comments

Comments
 (0)