Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit ba41680

Browse files
authored
fix(typescript-estree): forward compatibility for new compound assignment operators (typescript-eslint#2253)
1 parent 5fdd21a commit ba41680

File tree

1 file changed

+73
-85
lines changed

1 file changed

+73
-85
lines changed

packages/typescript-estree/src/node-utils.ts

Lines changed: 73 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,6 @@ import { AST_NODE_TYPES, AST_TOKEN_TYPES, TSESTree } from './ts-estree';
55

66
const SyntaxKind = ts.SyntaxKind;
77

8-
const ASSIGNMENT_OPERATORS: ts.AssignmentOperator[] = [
9-
SyntaxKind.EqualsToken,
10-
SyntaxKind.PlusEqualsToken,
11-
SyntaxKind.MinusEqualsToken,
12-
SyntaxKind.AsteriskEqualsToken,
13-
SyntaxKind.AsteriskAsteriskEqualsToken,
14-
SyntaxKind.SlashEqualsToken,
15-
SyntaxKind.PercentEqualsToken,
16-
SyntaxKind.LessThanLessThanEqualsToken,
17-
SyntaxKind.GreaterThanGreaterThanEqualsToken,
18-
SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken,
19-
SyntaxKind.AmpersandEqualsToken,
20-
SyntaxKind.BarEqualsToken,
21-
SyntaxKind.CaretEqualsToken,
22-
];
23-
248
const LOGICAL_OPERATORS: (
259
| ts.LogicalOperator
2610
| ts.SyntaxKind.QuestionQuestionToken
@@ -30,71 +14,71 @@ const LOGICAL_OPERATORS: (
3014
SyntaxKind.QuestionQuestionToken,
3115
];
3216

33-
const TOKEN_TO_TEXT = {
34-
[SyntaxKind.OpenBraceToken]: '{',
35-
[SyntaxKind.CloseBraceToken]: '}',
36-
[SyntaxKind.OpenParenToken]: '(',
37-
[SyntaxKind.CloseParenToken]: ')',
38-
[SyntaxKind.OpenBracketToken]: '[',
39-
[SyntaxKind.CloseBracketToken]: ']',
40-
[SyntaxKind.DotToken]: '.',
41-
[SyntaxKind.DotDotDotToken]: '...',
42-
[SyntaxKind.SemicolonToken]: ';',
43-
[SyntaxKind.CommaToken]: ',',
44-
[SyntaxKind.LessThanToken]: '<',
45-
[SyntaxKind.GreaterThanToken]: '>',
46-
[SyntaxKind.LessThanEqualsToken]: '<=',
47-
[SyntaxKind.GreaterThanEqualsToken]: '>=',
48-
[SyntaxKind.EqualsEqualsToken]: '==',
49-
[SyntaxKind.ExclamationEqualsToken]: '!=',
50-
[SyntaxKind.EqualsEqualsEqualsToken]: '===',
51-
[SyntaxKind.InstanceOfKeyword]: 'instanceof',
52-
[SyntaxKind.ExclamationEqualsEqualsToken]: '!==',
53-
[SyntaxKind.EqualsGreaterThanToken]: '=>',
54-
[SyntaxKind.PlusToken]: '+',
55-
[SyntaxKind.MinusToken]: '-',
56-
[SyntaxKind.AsteriskToken]: '*',
57-
[SyntaxKind.AsteriskAsteriskToken]: '**',
58-
[SyntaxKind.SlashToken]: '/',
59-
[SyntaxKind.PercentToken]: '%',
60-
[SyntaxKind.PlusPlusToken]: '++',
61-
[SyntaxKind.MinusMinusToken]: '--',
62-
[SyntaxKind.LessThanLessThanToken]: '<<',
63-
[SyntaxKind.LessThanSlashToken]: '</',
64-
[SyntaxKind.GreaterThanGreaterThanToken]: '>>',
65-
[SyntaxKind.GreaterThanGreaterThanGreaterThanToken]: '>>>',
66-
[SyntaxKind.AmpersandToken]: '&',
67-
[SyntaxKind.BarToken]: '|',
68-
[SyntaxKind.CaretToken]: '^',
69-
[SyntaxKind.ExclamationToken]: '!',
70-
[SyntaxKind.TildeToken]: '~',
71-
[SyntaxKind.AmpersandAmpersandToken]: '&&',
72-
[SyntaxKind.BarBarToken]: '||',
73-
[SyntaxKind.QuestionToken]: '?',
74-
[SyntaxKind.ColonToken]: ':',
75-
[SyntaxKind.EqualsToken]: '=',
76-
[SyntaxKind.PlusEqualsToken]: '+=',
77-
[SyntaxKind.MinusEqualsToken]: '-=',
78-
[SyntaxKind.AsteriskEqualsToken]: '*=',
79-
[SyntaxKind.AsteriskAsteriskEqualsToken]: '**=',
80-
[SyntaxKind.SlashEqualsToken]: '/=',
81-
[SyntaxKind.PercentEqualsToken]: '%=',
82-
[SyntaxKind.LessThanLessThanEqualsToken]: '<<=',
83-
[SyntaxKind.GreaterThanGreaterThanEqualsToken]: '>>=',
84-
[SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken]: '>>>=',
85-
[SyntaxKind.AmpersandEqualsToken]: '&=',
86-
[SyntaxKind.BarEqualsToken]: '|=',
87-
[SyntaxKind.CaretEqualsToken]: '^=',
88-
[SyntaxKind.AtToken]: '@',
89-
[SyntaxKind.InKeyword]: 'in',
90-
[SyntaxKind.UniqueKeyword]: 'unique',
91-
[SyntaxKind.KeyOfKeyword]: 'keyof',
92-
[SyntaxKind.NewKeyword]: 'new',
93-
[SyntaxKind.ImportKeyword]: 'import',
94-
[SyntaxKind.ReadonlyKeyword]: 'readonly',
95-
[SyntaxKind.QuestionQuestionToken]: '??',
96-
[SyntaxKind.QuestionDotToken]: '?.',
97-
} as const;
17+
interface TokenToText {
18+
[SyntaxKind.OpenBraceToken]: '{';
19+
[SyntaxKind.CloseBraceToken]: '}';
20+
[SyntaxKind.OpenParenToken]: '(';
21+
[SyntaxKind.CloseParenToken]: ')';
22+
[SyntaxKind.OpenBracketToken]: '[';
23+
[SyntaxKind.CloseBracketToken]: ']';
24+
[SyntaxKind.DotToken]: '.';
25+
[SyntaxKind.DotDotDotToken]: '...';
26+
[SyntaxKind.SemicolonToken]: ';';
27+
[SyntaxKind.CommaToken]: ',';
28+
[SyntaxKind.LessThanToken]: '<';
29+
[SyntaxKind.GreaterThanToken]: '>';
30+
[SyntaxKind.LessThanEqualsToken]: '<=';
31+
[SyntaxKind.GreaterThanEqualsToken]: '>=';
32+
[SyntaxKind.EqualsEqualsToken]: '==';
33+
[SyntaxKind.ExclamationEqualsToken]: '!=';
34+
[SyntaxKind.EqualsEqualsEqualsToken]: '===';
35+
[SyntaxKind.InstanceOfKeyword]: 'instanceof';
36+
[SyntaxKind.ExclamationEqualsEqualsToken]: '!==';
37+
[SyntaxKind.EqualsGreaterThanToken]: '=>';
38+
[SyntaxKind.PlusToken]: '+';
39+
[SyntaxKind.MinusToken]: '-';
40+
[SyntaxKind.AsteriskToken]: '*';
41+
[SyntaxKind.AsteriskAsteriskToken]: '**';
42+
[SyntaxKind.SlashToken]: '/';
43+
[SyntaxKind.PercentToken]: '%';
44+
[SyntaxKind.PlusPlusToken]: '++';
45+
[SyntaxKind.MinusMinusToken]: '--';
46+
[SyntaxKind.LessThanLessThanToken]: '<<';
47+
[SyntaxKind.LessThanSlashToken]: '</';
48+
[SyntaxKind.GreaterThanGreaterThanToken]: '>>';
49+
[SyntaxKind.GreaterThanGreaterThanGreaterThanToken]: '>>>';
50+
[SyntaxKind.AmpersandToken]: '&';
51+
[SyntaxKind.BarToken]: '|';
52+
[SyntaxKind.CaretToken]: '^';
53+
[SyntaxKind.ExclamationToken]: '!';
54+
[SyntaxKind.TildeToken]: '~';
55+
[SyntaxKind.AmpersandAmpersandToken]: '&&';
56+
[SyntaxKind.BarBarToken]: '||';
57+
[SyntaxKind.QuestionToken]: '?';
58+
[SyntaxKind.ColonToken]: ':';
59+
[SyntaxKind.EqualsToken]: '=';
60+
[SyntaxKind.PlusEqualsToken]: '+=';
61+
[SyntaxKind.MinusEqualsToken]: '-=';
62+
[SyntaxKind.AsteriskEqualsToken]: '*=';
63+
[SyntaxKind.AsteriskAsteriskEqualsToken]: '**=';
64+
[SyntaxKind.SlashEqualsToken]: '/=';
65+
[SyntaxKind.PercentEqualsToken]: '%=';
66+
[SyntaxKind.LessThanLessThanEqualsToken]: '<<=';
67+
[SyntaxKind.GreaterThanGreaterThanEqualsToken]: '>>=';
68+
[SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken]: '>>>=';
69+
[SyntaxKind.AmpersandEqualsToken]: '&=';
70+
[SyntaxKind.BarEqualsToken]: '|=';
71+
[SyntaxKind.CaretEqualsToken]: '^=';
72+
[SyntaxKind.AtToken]: '@';
73+
[SyntaxKind.InKeyword]: 'in';
74+
[SyntaxKind.UniqueKeyword]: 'unique';
75+
[SyntaxKind.KeyOfKeyword]: 'keyof';
76+
[SyntaxKind.NewKeyword]: 'new';
77+
[SyntaxKind.ImportKeyword]: 'import';
78+
[SyntaxKind.ReadonlyKeyword]: 'readonly';
79+
[SyntaxKind.QuestionQuestionToken]: '??';
80+
[SyntaxKind.QuestionDotToken]: '?.';
81+
}
9882

9983
/**
10084
* Returns true if the given ts.Token is the assignment operator
@@ -104,7 +88,10 @@ const TOKEN_TO_TEXT = {
10488
export function isAssignmentOperator<T extends ts.SyntaxKind>(
10589
operator: ts.Token<T>,
10690
): boolean {
107-
return (ASSIGNMENT_OPERATORS as ts.SyntaxKind[]).includes(operator.kind);
91+
return (
92+
operator.kind >= SyntaxKind.FirstAssignment &&
93+
operator.kind <= SyntaxKind.LastAssignment
94+
);
10895
}
10996

11097
/**
@@ -125,9 +112,10 @@ export function isLogicalOperator<T extends ts.SyntaxKind>(
125112
*/
126113
export function getTextForTokenKind<T extends ts.SyntaxKind>(
127114
kind: T,
128-
): T extends keyof typeof TOKEN_TO_TEXT ? typeof TOKEN_TO_TEXT[T] : undefined {
129-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
130-
return kind in TOKEN_TO_TEXT ? (TOKEN_TO_TEXT as any)[kind] : undefined;
115+
): T extends keyof TokenToText ? TokenToText[T] : string | undefined {
116+
return ts.tokenToString(kind) as T extends keyof TokenToText
117+
? TokenToText[T]
118+
: string | undefined;
131119
}
132120

133121
/**

0 commit comments

Comments
 (0)