Skip to content
This repository was archived by the owner on Jan 14, 2019. It is now read-only.

Commit fb10ef2

Browse files
armano2JamesHenry
authored andcommitted
refactor: mark AsteriskAsteriskEquals as assignment operator (#46)
1 parent 159c325 commit fb10ef2

File tree

2 files changed

+71
-78
lines changed

2 files changed

+71
-78
lines changed

src/convert.ts

+1-11
Original file line numberDiff line numberDiff line change
@@ -1758,7 +1758,7 @@ export default function convert(config: ConvertConfig): ESTreeNode | null {
17581758

17591759
case SyntaxKind.PrefixUnaryExpression:
17601760
case SyntaxKind.PostfixUnaryExpression: {
1761-
const operator = nodeUtils.getTextForTokenKind(node.operator);
1761+
const operator = nodeUtils.getTextForTokenKind(node.operator) || '';
17621762
Object.assign(result, {
17631763
/**
17641764
* ESTree uses UpdateExpression for ++/--
@@ -1836,16 +1836,6 @@ export default function convert(config: ConvertConfig): ESTreeNode | null {
18361836
} else {
18371837
(result as any).expressions.push(right);
18381838
}
1839-
} else if (
1840-
node.operatorToken &&
1841-
node.operatorToken.kind === SyntaxKind.AsteriskAsteriskEqualsToken
1842-
) {
1843-
Object.assign(result, {
1844-
type: AST_NODE_TYPES.AssignmentExpression,
1845-
operator: nodeUtils.getTextForTokenKind(node.operatorToken.kind),
1846-
left: convertChild(node.left),
1847-
right: convertChild(node.right)
1848-
});
18491839
} else {
18501840
Object.assign(result, {
18511841
type: nodeUtils.getBinaryExpressionType(node.operatorToken),

src/node-utils.ts

+70-67
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,16 @@ import {
1212
ESTreeToken
1313
} from './temp-types-based-on-js-source';
1414
import { TSNode } from './ts-nodes';
15+
import { AST_NODE_TYPES } from './ast-node-types';
1516

1617
const SyntaxKind = ts.SyntaxKind;
1718

18-
const ASSIGNMENT_OPERATORS = [
19+
const ASSIGNMENT_OPERATORS: ts.AssignmentOperator[] = [
1920
SyntaxKind.EqualsToken,
2021
SyntaxKind.PlusEqualsToken,
2122
SyntaxKind.MinusEqualsToken,
2223
SyntaxKind.AsteriskEqualsToken,
24+
SyntaxKind.AsteriskAsteriskEqualsToken,
2325
SyntaxKind.SlashEqualsToken,
2426
SyntaxKind.PercentEqualsToken,
2527
SyntaxKind.LessThanLessThanEqualsToken,
@@ -30,72 +32,73 @@ const ASSIGNMENT_OPERATORS = [
3032
SyntaxKind.CaretEqualsToken
3133
];
3234

33-
const LOGICAL_OPERATORS = [
35+
const LOGICAL_OPERATORS: ts.LogicalOperator[] = [
3436
SyntaxKind.BarBarToken,
3537
SyntaxKind.AmpersandAmpersandToken
3638
];
3739

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

100103
/**
101104
* Find the first matching child based on the given sourceFile and predicate function.
@@ -188,7 +191,7 @@ function isLogicalOperator(operator: ts.Token<any>): boolean {
188191
* @param {number} kind the token's SyntaxKind
189192
* @returns {string} the token applicable token as a string
190193
*/
191-
function getTextForTokenKind(kind: number): string {
194+
function getTextForTokenKind(kind: ts.SyntaxKind): string | undefined {
192195
return TOKEN_TO_TEXT[kind];
193196
}
194197

@@ -252,11 +255,11 @@ function isJSDocComment(node: ts.Node): boolean {
252255
*/
253256
function getBinaryExpressionType(operator: ts.Token<any>): string {
254257
if (isAssignmentOperator(operator)) {
255-
return 'AssignmentExpression';
258+
return AST_NODE_TYPES.AssignmentExpression;
256259
} else if (isLogicalOperator(operator)) {
257-
return 'LogicalExpression';
260+
return AST_NODE_TYPES.LogicalExpression;
258261
}
259-
return 'BinaryExpression';
262+
return AST_NODE_TYPES.BinaryExpression;
260263
}
261264

262265
/**

0 commit comments

Comments
 (0)