Skip to content

Commit

Permalink
feat(ast-spec): specify PunctuatorToken's value type (#3496)
Browse files Browse the repository at this point in the history
  • Loading branch information
MichaelDeBoey committed Jun 14, 2021
1 parent c7a95ab commit fdb1d81
Show file tree
Hide file tree
Showing 4 changed files with 78 additions and 65 deletions.
3 changes: 2 additions & 1 deletion packages/ast-spec/package.json
Expand Up @@ -41,6 +41,7 @@
"url": "https://opencollective.com/typescript-eslint"
},
"devDependencies": {
"@microsoft/api-extractor": "^7.15.2"
"@microsoft/api-extractor": "^7.15.2",
"typescript": "*"
}
}
@@ -0,0 +1,63 @@
import type { SyntaxKind } from 'typescript';

export interface PunctuatorTokenToText {
[SyntaxKind.OpenBraceToken]: '{';
[SyntaxKind.CloseBraceToken]: '}';
[SyntaxKind.OpenParenToken]: '(';
[SyntaxKind.CloseParenToken]: ')';
[SyntaxKind.OpenBracketToken]: '[';
[SyntaxKind.CloseBracketToken]: ']';
[SyntaxKind.DotToken]: '.';
[SyntaxKind.DotDotDotToken]: '...';
[SyntaxKind.SemicolonToken]: ';';
[SyntaxKind.CommaToken]: ',';
[SyntaxKind.QuestionDotToken]: '?.';
[SyntaxKind.LessThanToken]: '<';
[SyntaxKind.LessThanSlashToken]: '</';
[SyntaxKind.GreaterThanToken]: '>';
[SyntaxKind.LessThanEqualsToken]: '<=';
[SyntaxKind.GreaterThanEqualsToken]: '>=';
[SyntaxKind.EqualsEqualsToken]: '==';
[SyntaxKind.ExclamationEqualsToken]: '!=';
[SyntaxKind.EqualsEqualsEqualsToken]: '===';
[SyntaxKind.ExclamationEqualsEqualsToken]: '!==';
[SyntaxKind.EqualsGreaterThanToken]: '=>';
[SyntaxKind.PlusToken]: '+';
[SyntaxKind.MinusToken]: '-';
[SyntaxKind.AsteriskToken]: '*';
[SyntaxKind.AsteriskAsteriskToken]: '**';
[SyntaxKind.SlashToken]: '/';
[SyntaxKind.PercentToken]: '%';
[SyntaxKind.PlusPlusToken]: '++';
[SyntaxKind.MinusMinusToken]: '--';
[SyntaxKind.LessThanLessThanToken]: '<<';
[SyntaxKind.GreaterThanGreaterThanToken]: '>>';
[SyntaxKind.GreaterThanGreaterThanGreaterThanToken]: '>>>';
[SyntaxKind.AmpersandToken]: '&';
[SyntaxKind.BarToken]: '|';
[SyntaxKind.CaretToken]: '^';
[SyntaxKind.ExclamationToken]: '!';
[SyntaxKind.TildeToken]: '~';
[SyntaxKind.AmpersandAmpersandToken]: '&&';
[SyntaxKind.BarBarToken]: '||';
[SyntaxKind.QuestionToken]: '?';
[SyntaxKind.ColonToken]: ':';
[SyntaxKind.AtToken]: '@';
[SyntaxKind.QuestionQuestionToken]: '??';
[SyntaxKind.EqualsToken]: '=';
[SyntaxKind.PlusEqualsToken]: '+=';
[SyntaxKind.MinusEqualsToken]: '-=';
[SyntaxKind.AsteriskEqualsToken]: '*=';
[SyntaxKind.AsteriskAsteriskEqualsToken]: '**=';
[SyntaxKind.SlashEqualsToken]: '/=';
[SyntaxKind.PercentEqualsToken]: '%=';
[SyntaxKind.LessThanLessThanEqualsToken]: '<<=';
[SyntaxKind.GreaterThanGreaterThanEqualsToken]: '>>=';
[SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken]: '>>>=';
[SyntaxKind.AmpersandEqualsToken]: '&=';
[SyntaxKind.BarEqualsToken]: '|=';
[SyntaxKind.BarBarEqualsToken]: '||=';
[SyntaxKind.AmpersandAmpersandEqualsToken]: '&&=';
[SyntaxKind.QuestionQuestionEqualsToken]: '??=';
[SyntaxKind.CaretEqualsToken]: '^=';
}
6 changes: 6 additions & 0 deletions packages/ast-spec/src/token/PunctuatorToken/spec.ts
@@ -1,6 +1,12 @@
import type { AST_TOKEN_TYPES } from '../../ast-token-types';
import type { BaseToken } from '../../base/BaseToken';
import type { PunctuatorTokenToText } from './PunctuatorTokenToText';

export * from './PunctuatorTokenToText';

type ValueOf<T> = T[keyof T];

export interface PunctuatorToken extends BaseToken {
type: AST_TOKEN_TYPES.Punctuator;
value: ValueOf<PunctuatorTokenToText>;
}
71 changes: 7 additions & 64 deletions packages/typescript-estree/src/node-utils.ts
Expand Up @@ -13,73 +13,14 @@ const LOGICAL_OPERATORS: (
SyntaxKind.QuestionQuestionToken,
];

interface TokenToText {
[SyntaxKind.OpenBraceToken]: '{';
[SyntaxKind.CloseBraceToken]: '}';
[SyntaxKind.OpenParenToken]: '(';
[SyntaxKind.CloseParenToken]: ')';
[SyntaxKind.OpenBracketToken]: '[';
[SyntaxKind.CloseBracketToken]: ']';
[SyntaxKind.DotToken]: '.';
[SyntaxKind.DotDotDotToken]: '...';
[SyntaxKind.SemicolonToken]: ';';
[SyntaxKind.CommaToken]: ',';
[SyntaxKind.LessThanToken]: '<';
[SyntaxKind.GreaterThanToken]: '>';
[SyntaxKind.LessThanEqualsToken]: '<=';
[SyntaxKind.GreaterThanEqualsToken]: '>=';
[SyntaxKind.EqualsEqualsToken]: '==';
[SyntaxKind.ExclamationEqualsToken]: '!=';
[SyntaxKind.EqualsEqualsEqualsToken]: '===';
[SyntaxKind.InstanceOfKeyword]: 'instanceof';
[SyntaxKind.ExclamationEqualsEqualsToken]: '!==';
[SyntaxKind.EqualsGreaterThanToken]: '=>';
[SyntaxKind.PlusToken]: '+';
[SyntaxKind.MinusToken]: '-';
[SyntaxKind.AsteriskToken]: '*';
[SyntaxKind.AsteriskAsteriskToken]: '**';
[SyntaxKind.SlashToken]: '/';
[SyntaxKind.PercentToken]: '%';
[SyntaxKind.PlusPlusToken]: '++';
[SyntaxKind.MinusMinusToken]: '--';
[SyntaxKind.LessThanLessThanToken]: '<<';
[SyntaxKind.LessThanSlashToken]: '</';
[SyntaxKind.GreaterThanGreaterThanToken]: '>>';
[SyntaxKind.GreaterThanGreaterThanGreaterThanToken]: '>>>';
[SyntaxKind.AmpersandToken]: '&';
[SyntaxKind.BarToken]: '|';
[SyntaxKind.CaretToken]: '^';
[SyntaxKind.ExclamationToken]: '!';
[SyntaxKind.TildeToken]: '~';
[SyntaxKind.AmpersandAmpersandToken]: '&&';
[SyntaxKind.BarBarToken]: '||';
[SyntaxKind.QuestionToken]: '?';
[SyntaxKind.ColonToken]: ':';
[SyntaxKind.EqualsToken]: '=';
[SyntaxKind.PlusEqualsToken]: '+=';
[SyntaxKind.MinusEqualsToken]: '-=';
[SyntaxKind.AsteriskEqualsToken]: '*=';
[SyntaxKind.AsteriskAsteriskEqualsToken]: '**=';
[SyntaxKind.SlashEqualsToken]: '/=';
[SyntaxKind.PercentEqualsToken]: '%=';
[SyntaxKind.LessThanLessThanEqualsToken]: '<<=';
[SyntaxKind.GreaterThanGreaterThanEqualsToken]: '>>=';
[SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken]: '>>>=';
[SyntaxKind.AmpersandEqualsToken]: '&=';
[SyntaxKind.AmpersandAmpersandEqualsToken]: '&&=';
[SyntaxKind.BarEqualsToken]: '|=';
[SyntaxKind.BarBarEqualsToken]: '||=';
[SyntaxKind.CaretEqualsToken]: '^=';
[SyntaxKind.QuestionQuestionEqualsToken]: '??=';
[SyntaxKind.AtToken]: '@';
interface TokenToText extends TSESTree.PunctuatorTokenToText {
[SyntaxKind.ImportKeyword]: 'import';
[SyntaxKind.InKeyword]: 'in';
[SyntaxKind.UniqueKeyword]: 'unique';
[SyntaxKind.KeyOfKeyword]: 'keyof';
[SyntaxKind.InstanceOfKeyword]: 'instanceof';
[SyntaxKind.NewKeyword]: 'new';
[SyntaxKind.ImportKeyword]: 'import';
[SyntaxKind.KeyOfKeyword]: 'keyof';
[SyntaxKind.ReadonlyKeyword]: 'readonly';
[SyntaxKind.QuestionQuestionToken]: '??';
[SyntaxKind.QuestionDotToken]: '?.';
[SyntaxKind.UniqueKeyword]: 'unique';
}

/**
Expand Down Expand Up @@ -609,6 +550,8 @@ export function convertToken(
},
};
} else {
// @ts-expect-error TS is complaining about `value` not being the correct
// type but it is
return {
type: tokenType,
value,
Expand Down

0 comments on commit fdb1d81

Please sign in to comment.