From d5a98204402ffbf669136c578e669e418313c235 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20De=20Boey?= Date: Mon, 7 Jun 2021 18:53:15 +0200 Subject: [PATCH 1/8] fix(ast-spec): specify `PunctuatorToken`'s `value` type --- .../ast-spec/src/token/PunctuatorToken/spec.ts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/packages/ast-spec/src/token/PunctuatorToken/spec.ts b/packages/ast-spec/src/token/PunctuatorToken/spec.ts index 39b9507348c2..9b1e7c435c6e 100644 --- a/packages/ast-spec/src/token/PunctuatorToken/spec.ts +++ b/packages/ast-spec/src/token/PunctuatorToken/spec.ts @@ -3,4 +3,18 @@ import type { BaseToken } from '../../base/BaseToken'; export interface PunctuatorToken extends BaseToken { type: AST_TOKEN_TYPES.Punctuator; + value: + | ',' + | ';' + | ':' + | '!' + | '?.' + | '?' + | '(' + | ')' + | '[' + | ']' + | '{' + | '}' + | '='; } From 268f8c11e2e51bca693e04047701bb204086c41a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20De=20Boey?= Date: Mon, 7 Jun 2021 21:56:21 +0200 Subject: [PATCH 2/8] fix(ast-spec): add all meaningful values from `typescript-estree`'s `node-utils`' `TokenToText` interface as value for `PunctuatorToken` --- .../src/token/PunctuatorToken/spec.ts | 48 ++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/packages/ast-spec/src/token/PunctuatorToken/spec.ts b/packages/ast-spec/src/token/PunctuatorToken/spec.ts index 9b1e7c435c6e..377f12c1c38f 100644 --- a/packages/ast-spec/src/token/PunctuatorToken/spec.ts +++ b/packages/ast-spec/src/token/PunctuatorToken/spec.ts @@ -4,17 +4,63 @@ import type { BaseToken } from '../../base/BaseToken'; export interface PunctuatorToken extends BaseToken { type: AST_TOKEN_TYPES.Punctuator; value: + | '--' + | '-' + | '-=' | ',' | ';' | ':' | '!' + | '!=' + | '!==' + | '??' + | '??=' | '?.' | '?' + | '...' + | '.' | '(' | ')' | '[' | ']' | '{' | '}' - | '='; + | '@' + | '*' + | '**' + | '**=' + | '*=' + | '/' + | '/=' + | '&' + | '&&' + | '&&=' + | '&=' + | '%' + | '%=' + | '^' + | '^=' + | '+' + | '++' + | '+=' + | '<' + | '' + | '>' + | '>=' + | '>>' + | '>>=' + | '>>>' + | '>>>=' + | '|' + | '|=' + | '||' + | '||=' + | '~'; } From 6c7a5271f29c9c1e3e4ae4b2ba03747b16252fc5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20De=20Boey?= Date: Mon, 7 Jun 2021 22:01:32 +0200 Subject: [PATCH 3/8] fix(typescript-estree): fix `node-utils`' `convertToken` function --- packages/typescript-estree/src/node-utils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/typescript-estree/src/node-utils.ts b/packages/typescript-estree/src/node-utils.ts index ccdfe9d4b215..7f76584f319c 100644 --- a/packages/typescript-estree/src/node-utils.ts +++ b/packages/typescript-estree/src/node-utils.ts @@ -611,7 +611,7 @@ export function convertToken( } else { return { type: tokenType, - value, + value: value as never, range: [start, end], loc: getLocFor(start, end, ast), }; From f52e96a35bb581ddf6028524177a2c47266a2b73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20De=20Boey?= Date: Sun, 13 Jun 2021 15:48:05 +0200 Subject: [PATCH 4/8] refactor(typescript-estree): extract `PunctuatorTokenToText` out of `TokenToText` --- packages/typescript-estree/src/node-utils.ts | 25 +++++++++++--------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/packages/typescript-estree/src/node-utils.ts b/packages/typescript-estree/src/node-utils.ts index 7f76584f319c..888c5ec3d8db 100644 --- a/packages/typescript-estree/src/node-utils.ts +++ b/packages/typescript-estree/src/node-utils.ts @@ -13,7 +13,7 @@ const LOGICAL_OPERATORS: ( SyntaxKind.QuestionQuestionToken, ]; -interface TokenToText { +interface PunctuatorTokenToText { [SyntaxKind.OpenBraceToken]: '{'; [SyntaxKind.CloseBraceToken]: '}'; [SyntaxKind.OpenParenToken]: '('; @@ -24,14 +24,15 @@ interface TokenToText { [SyntaxKind.DotDotDotToken]: '...'; [SyntaxKind.SemicolonToken]: ';'; [SyntaxKind.CommaToken]: ','; + [SyntaxKind.QuestionDotToken]: '?.'; [SyntaxKind.LessThanToken]: '<'; + [SyntaxKind.LessThanSlashToken]: ''; [SyntaxKind.LessThanEqualsToken]: '<='; [SyntaxKind.GreaterThanEqualsToken]: '>='; [SyntaxKind.EqualsEqualsToken]: '=='; [SyntaxKind.ExclamationEqualsToken]: '!='; [SyntaxKind.EqualsEqualsEqualsToken]: '==='; - [SyntaxKind.InstanceOfKeyword]: 'instanceof'; [SyntaxKind.ExclamationEqualsEqualsToken]: '!=='; [SyntaxKind.EqualsGreaterThanToken]: '=>'; [SyntaxKind.PlusToken]: '+'; @@ -43,7 +44,6 @@ interface TokenToText { [SyntaxKind.PlusPlusToken]: '++'; [SyntaxKind.MinusMinusToken]: '--'; [SyntaxKind.LessThanLessThanToken]: '<<'; - [SyntaxKind.LessThanSlashToken]: '>'; [SyntaxKind.GreaterThanGreaterThanGreaterThanToken]: '>>>'; [SyntaxKind.AmpersandToken]: '&'; @@ -55,6 +55,8 @@ interface TokenToText { [SyntaxKind.BarBarToken]: '||'; [SyntaxKind.QuestionToken]: '?'; [SyntaxKind.ColonToken]: ':'; + [SyntaxKind.AtToken]: '@'; + [SyntaxKind.QuestionQuestionToken]: '??'; [SyntaxKind.EqualsToken]: '='; [SyntaxKind.PlusEqualsToken]: '+='; [SyntaxKind.MinusEqualsToken]: '-='; @@ -66,20 +68,21 @@ interface TokenToText { [SyntaxKind.GreaterThanGreaterThanEqualsToken]: '>>='; [SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken]: '>>>='; [SyntaxKind.AmpersandEqualsToken]: '&='; - [SyntaxKind.AmpersandAmpersandEqualsToken]: '&&='; [SyntaxKind.BarEqualsToken]: '|='; [SyntaxKind.BarBarEqualsToken]: '||='; - [SyntaxKind.CaretEqualsToken]: '^='; + [SyntaxKind.AmpersandAmpersandEqualsToken]: '&&='; [SyntaxKind.QuestionQuestionEqualsToken]: '??='; - [SyntaxKind.AtToken]: '@'; + [SyntaxKind.CaretEqualsToken]: '^='; +} + +interface TokenToText extends 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'; } /** From 62dc3285f2486c4c547d14d52c9105a3297e322c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20De=20Boey?= Date: Sun, 13 Jun 2021 15:54:15 +0200 Subject: [PATCH 5/8] fix(typescript-estree): don't use `as never` --- packages/typescript-estree/src/node-utils.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/typescript-estree/src/node-utils.ts b/packages/typescript-estree/src/node-utils.ts index 888c5ec3d8db..5f12a120aeed 100644 --- a/packages/typescript-estree/src/node-utils.ts +++ b/packages/typescript-estree/src/node-utils.ts @@ -612,9 +612,11 @@ export function convertToken( }, }; } else { + // @ts-expect-error TS is complaining about `value` not being the correct + // type but it is return { type: tokenType, - value: value as never, + value, range: [start, end], loc: getLocFor(start, end, ast), }; From a42fd995da34336b323400d2ab2ea2da78a0f374 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20De=20Boey?= Date: Sun, 13 Jun 2021 22:28:35 +0200 Subject: [PATCH 6/8] feat(ast-spec): move `PunctuatorTokenToText` next to `PunctuatorToken`'s spec --- packages/ast-spec/package.json | 3 +- .../PunctuatorToken/PunctuatorTokenToText.ts | 65 +++++++++++++++++++ .../src/token/PunctuatorToken/spec.ts | 2 + packages/typescript-estree/src/node-utils.ts | 64 +----------------- 4 files changed, 70 insertions(+), 64 deletions(-) create mode 100644 packages/ast-spec/src/token/PunctuatorToken/PunctuatorTokenToText.ts diff --git a/packages/ast-spec/package.json b/packages/ast-spec/package.json index 96ec8a09b7dc..8dddb73dceb1 100644 --- a/packages/ast-spec/package.json +++ b/packages/ast-spec/package.json @@ -41,6 +41,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "devDependencies": { - "@microsoft/api-extractor": "^7.15.2" + "@microsoft/api-extractor": "^7.15.2", + "typescript": "*" } } diff --git a/packages/ast-spec/src/token/PunctuatorToken/PunctuatorTokenToText.ts b/packages/ast-spec/src/token/PunctuatorToken/PunctuatorTokenToText.ts new file mode 100644 index 000000000000..f5ec6b89090e --- /dev/null +++ b/packages/ast-spec/src/token/PunctuatorToken/PunctuatorTokenToText.ts @@ -0,0 +1,65 @@ +import * as ts from 'typescript'; + +const SyntaxKind = ts.SyntaxKind; + +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.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]: '^='; +} diff --git a/packages/ast-spec/src/token/PunctuatorToken/spec.ts b/packages/ast-spec/src/token/PunctuatorToken/spec.ts index 377f12c1c38f..5b2ed7a31150 100644 --- a/packages/ast-spec/src/token/PunctuatorToken/spec.ts +++ b/packages/ast-spec/src/token/PunctuatorToken/spec.ts @@ -1,6 +1,8 @@ import type { AST_TOKEN_TYPES } from '../../ast-token-types'; import type { BaseToken } from '../../base/BaseToken'; +export * from './PunctuatorTokenToText'; + export interface PunctuatorToken extends BaseToken { type: AST_TOKEN_TYPES.Punctuator; value: diff --git a/packages/typescript-estree/src/node-utils.ts b/packages/typescript-estree/src/node-utils.ts index 5f12a120aeed..1969b6b2fb39 100644 --- a/packages/typescript-estree/src/node-utils.ts +++ b/packages/typescript-estree/src/node-utils.ts @@ -13,69 +13,7 @@ const LOGICAL_OPERATORS: ( SyntaxKind.QuestionQuestionToken, ]; -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.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]: '^='; -} - -interface TokenToText extends PunctuatorTokenToText { +interface TokenToText extends TSESTree.PunctuatorTokenToText { [SyntaxKind.ImportKeyword]: 'import'; [SyntaxKind.InKeyword]: 'in'; [SyntaxKind.InstanceOfKeyword]: 'instanceof'; From 06ebb89b2ee3b89d91932cd67ae1478e5e9d688d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20De=20Boey?= Date: Sun, 13 Jun 2021 22:29:41 +0200 Subject: [PATCH 7/8] feat(ast-spec): use `PunctuatorTokenToText` for `PunctuatorToken`'s `value` type --- .../src/token/PunctuatorToken/spec.ts | 64 ++----------------- 1 file changed, 4 insertions(+), 60 deletions(-) diff --git a/packages/ast-spec/src/token/PunctuatorToken/spec.ts b/packages/ast-spec/src/token/PunctuatorToken/spec.ts index 5b2ed7a31150..68156aad6638 100644 --- a/packages/ast-spec/src/token/PunctuatorToken/spec.ts +++ b/packages/ast-spec/src/token/PunctuatorToken/spec.ts @@ -1,68 +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[keyof T]; + export interface PunctuatorToken extends BaseToken { type: AST_TOKEN_TYPES.Punctuator; - value: - | '--' - | '-' - | '-=' - | ',' - | ';' - | ':' - | '!' - | '!=' - | '!==' - | '??' - | '??=' - | '?.' - | '?' - | '...' - | '.' - | '(' - | ')' - | '[' - | ']' - | '{' - | '}' - | '@' - | '*' - | '**' - | '**=' - | '*=' - | '/' - | '/=' - | '&' - | '&&' - | '&&=' - | '&=' - | '%' - | '%=' - | '^' - | '^=' - | '+' - | '++' - | '+=' - | '<' - | '' - | '>' - | '>=' - | '>>' - | '>>=' - | '>>>' - | '>>>=' - | '|' - | '|=' - | '||' - | '||=' - | '~'; + value: ValueOf; } From edb5087636584ea1beb5d4dc3467071d00965d8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20De=20Boey?= Date: Mon, 14 Jun 2021 11:40:58 +0200 Subject: [PATCH 8/8] fix(ast-spec): use type import --- .../src/token/PunctuatorToken/PunctuatorTokenToText.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/ast-spec/src/token/PunctuatorToken/PunctuatorTokenToText.ts b/packages/ast-spec/src/token/PunctuatorToken/PunctuatorTokenToText.ts index f5ec6b89090e..a3ab12ee8564 100644 --- a/packages/ast-spec/src/token/PunctuatorToken/PunctuatorTokenToText.ts +++ b/packages/ast-spec/src/token/PunctuatorToken/PunctuatorTokenToText.ts @@ -1,6 +1,4 @@ -import * as ts from 'typescript'; - -const SyntaxKind = ts.SyntaxKind; +import type { SyntaxKind } from 'typescript'; export interface PunctuatorTokenToText { [SyntaxKind.OpenBraceToken]: '{';