From df8fcafae12109ed932576bc027dddcd0f457844 Mon Sep 17 00:00:00 2001 From: Edoardo Cavazza Date: Fri, 8 Mar 2024 11:41:44 +0100 Subject: [PATCH] Fix token typings. --- .changeset/neat-gorillas-divide.md | 5 +++++ packages/estransform/lib/helpers.js | 22 +++++++++++++++++++++- packages/estransform/lib/parser.js | 2 +- packages/estransform/lib/types.js | 4 ++-- packages/estransform/modules.d.ts | 2 +- 5 files changed, 30 insertions(+), 5 deletions(-) create mode 100644 .changeset/neat-gorillas-divide.md diff --git a/.changeset/neat-gorillas-divide.md b/.changeset/neat-gorillas-divide.md new file mode 100644 index 00000000..28ad86dd --- /dev/null +++ b/.changeset/neat-gorillas-divide.md @@ -0,0 +1,5 @@ +--- +"@chialab/estransform": patch +--- + +Fix token typings. diff --git a/packages/estransform/lib/helpers.js b/packages/estransform/lib/helpers.js index 143724e4..fb44b07f 100644 --- a/packages/estransform/lib/helpers.js +++ b/packages/estransform/lib/helpers.js @@ -99,11 +99,16 @@ export function getLocation(code, index) { } /** + * Get a block of tokens. * @param {import('./parser.js').TokenProcessor} processor * @param {TokenType} [openingToken] * @param {TokenType} [closingToken] + * @returns {import('./types.js').Token[]} */ export function getBlock(processor, openingToken = TokenType.braceL, closingToken = TokenType.braceR) { + /** + * @type {import('./types.js').Token | null} + */ let token = processor.currentToken(); let count = 0; @@ -130,6 +135,9 @@ export function getBlock(processor, openingToken = TokenType.braceL, closingToke * @param {import('./parser.js').TokenProcessor} processor */ export function getStatement(processor) { + /** + * @type {import('./types.js').Token | null} + */ let token = processor.currentToken(); let count = 0; @@ -153,7 +161,9 @@ export function getStatement(processor) { } /** + * Split tokens into function arguments. * @param {import('./types.js').Token[]} tokens + * @returns {import('./types.js').Token[][]} */ export function splitArgs(tokens) { /** @@ -205,6 +215,9 @@ export function extractFunctionArguments(processor) { let openBrackets = 0; let openBraces = 0; + /** + * @type {import('./types.js').Token | null} + */ let token = processor.currentToken(); let arg = []; while ((token && token.type !== TokenType.parenR) || openParens || openBrackets || openBraces) { @@ -252,6 +265,7 @@ export function extractFunctionArguments(processor) { /** * Move forward in tokens list and return the current token. * @param {import('./parser.js').TokenProcessor} processor + * @returns {import('./types.js').Token|null} */ export function getNextToken(processor) { if (processor.isAtEnd()) { @@ -267,13 +281,19 @@ export function getNextToken(processor) { */ export function nextBlock(processor) { let openParens = 0; + /** + * @type {import('./types.js').Token | null} + */ let token = processor.currentToken(); while (token && (token.type !== TokenType.parenR || openParens)) { if (token.type === TokenType.parenR) { openParens--; } token = getNextToken(processor); - if (token.type === TokenType.parenL) { + if (!token) { + break; + } + if (token && token.type === TokenType.parenL) { openParens++; } } diff --git a/packages/estransform/lib/parser.js b/packages/estransform/lib/parser.js index fd9aab44..e5f819ee 100644 --- a/packages/estransform/lib/parser.js +++ b/packages/estransform/lib/parser.js @@ -15,7 +15,7 @@ function interopImport(mod) { export const NameManager = /** @type {typeof import('sucrase/dist/NameManager.js').default} */ ( interopImport(NameManagerModule) ); -export const TokenProcessor = /** @type {typeof import('sucrase/dist/TokenProcessor.js').default} */ ( +export const TokenProcessor = /** @type {typeof import('sucrase/dist/types/TokenProcessor').default} */ ( interopImport(TokenProcessorModule) ); diff --git a/packages/estransform/lib/types.js b/packages/estransform/lib/types.js index 93c593ff..b19ee2c8 100644 --- a/packages/estransform/lib/types.js +++ b/packages/estransform/lib/types.js @@ -1,6 +1,6 @@ import { TokenType } from 'sucrase/dist/parser/tokenizer/types.js'; -/** @typedef {import('sucrase/dist/parser/index.js').File} File */ -/** @typedef {import('sucrase/dist/parser/tokenizer/index.js').Token} Token */ +/** @typedef {import('sucrase/dist/types/parser/index').File} File */ +/** @typedef {import('sucrase/dist/types/parser/tokenizer/index').Token} Token */ export { TokenType }; diff --git a/packages/estransform/modules.d.ts b/packages/estransform/modules.d.ts index 3837a55b..ae003964 100644 --- a/packages/estransform/modules.d.ts +++ b/packages/estransform/modules.d.ts @@ -11,7 +11,7 @@ declare module 'sucrase/dist/HelperManager.js' { } declare module 'sucrase/dist/TokenProcessor.js' { - export { TokenProcessor as default } from 'sucrase'; + export * from 'sucrase/dist/types/TokenProcessor'; } declare module 'sucrase/dist/parser/tokenizer/types.js' {