diff --git a/packages/babel-generator/src/buffer.ts b/packages/babel-generator/src/buffer.ts index 2a9a96601abf..6dba3a30aad3 100644 --- a/packages/babel-generator/src/buffer.ts +++ b/packages/babel-generator/src/buffer.ts @@ -18,7 +18,7 @@ type SourcePos = { filename: string | undefined; }; -type queueItem = { +type QueueItem = { char: number; repeat: number; line: number | undefined; @@ -48,7 +48,7 @@ export default class Buffer { _str = ""; _appendCount = 0; _last = 0; - _queue: queueItem[] = []; + _queue: QueueItem[] = []; _queueCursor = 0; _position = { @@ -56,12 +56,12 @@ export default class Buffer { column: 0, }; _sourcePosition = SourcePos(); - _disallowedPop: SourcePos & { ok: boolean } = { + _disallowedPop: SourcePos & { objectReusable: boolean } = { identifierName: undefined, line: undefined, column: undefined, filename: undefined, - ok: false, + objectReusable: true, // To avoid deleting and re-creating objects, we reuse existing objects when they are not needed anymore. }; _allocQueue() { @@ -102,7 +102,7 @@ export default class Buffer { this._queueCursor++; } - _popQueue(): queueItem { + _popQueue(): QueueItem { if (this._queueCursor === 0) { throw new Error("Cannot pop from empty queue"); } @@ -200,7 +200,7 @@ export default class Buffer { const queueCursor = this._queueCursor; const queue = this._queue; for (let i = 0; i < queueCursor; i++) { - const item: queueItem = queue[i]; + const item: QueueItem = queue[i]; this._appendChar(item.char, item.repeat, item); } this._queueCursor = 0; @@ -416,7 +416,7 @@ export default class Buffer { if ( // Verify if reactivating this specific position has been disallowed. - !this._disallowedPop.ok || + this._disallowedPop.objectReusable || this._disallowedPop.line !== originalLine || this._disallowedPop.column !== originalColumn || this._disallowedPop.filename !== originalFilename @@ -425,7 +425,7 @@ export default class Buffer { this._sourcePosition.column = originalColumn; this._sourcePosition.filename = originalFilename; this._sourcePosition.identifierName = originalIdentifierName; - this._disallowedPop.ok = false; + this._disallowedPop.objectReusable = true; } } @@ -441,7 +441,7 @@ export default class Buffer { this._normalizePosition(prop, loc, disallowedPop); - disallowedPop.ok = true; + disallowedPop.objectReusable = false; } _normalizePosition(prop: "start" | "end", loc: Loc, targetObj: SourcePos) { diff --git a/packages/babel-generator/src/node/index.ts b/packages/babel-generator/src/node/index.ts index f53195de2a31..079a311ff26c 100644 --- a/packages/babel-generator/src/node/index.ts +++ b/packages/babel-generator/src/node/index.ts @@ -9,6 +9,8 @@ import { } from "@babel/types"; import type * as t from "@babel/types"; +import type { WhitespaceFlag } from "./whitespace"; + export type NodeHandlers = { [K in string]?: ( node: K extends t.Node["type"] ? Extract : t.Node, @@ -56,7 +58,6 @@ function expandAliases(obj: NodeHandlers) { // into concrete types so that the 'find' call below can be as fast as possible. const expandedParens = expandAliases(parens); const expandedWhitespaceNodes = expandAliases(whitespace.nodes); -//const expandedWhitespaceList = expandAliases(whitespace.list); function find( obj: NodeHandlers, @@ -79,7 +80,7 @@ function isOrHasCallExpression(node: t.Node): boolean { export function needsWhitespace( node: t.Node, parent: t.Node, - type: number, + type: WhitespaceFlag, ): boolean { if (!node) return false; @@ -93,17 +94,6 @@ export function needsWhitespace( return (flag & type) !== 0; } - // A bug that existed before, commenting out it will cause the test to fail. - - // const items = find(expandedWhitespaceList, node, parent); - // if (items) { - // for (let i = 0; i < items.length; i++) { - // if (needsWhitespace(items[i], node, type)) { - // return true; - // } - // } - // } - return false; } diff --git a/packages/babel-generator/src/node/whitespace.ts b/packages/babel-generator/src/node/whitespace.ts index 5311e46e0557..a58427a94c0a 100644 --- a/packages/babel-generator/src/node/whitespace.ts +++ b/packages/babel-generator/src/node/whitespace.ts @@ -25,6 +25,8 @@ const enum WhitespaceFlag { after = 1 << 1, } +export type { WhitespaceFlag }; + function crawlInternal( node: t.Node, state: { hasCall: boolean; hasFunction: boolean; hasHelper: boolean }, @@ -254,36 +256,6 @@ nodes.ObjectTypeInternalSlot = function ( } }; -/** - * Returns lists from node types that need whitespace. - */ - -export const list: NodeHandlers = { - /** - * Return VariableDeclaration declarations init properties. - */ - - VariableDeclaration(node: t.VariableDeclaration) { - return node.declarations.map(decl => decl.init); - }, - - /** - * Return VariableDeclaration elements. - */ - - ArrayExpression(node: t.ArrayExpression) { - return node.elements; - }, - - /** - * Return VariableDeclaration properties. - */ - - ObjectExpression(node: t.ObjectExpression) { - return node.properties; - }, -}; - /** * Add whitespace tests for nodes and their aliases. */