diff --git a/package.json b/package.json index 5fa546a40..6168662b4 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "build:dev": "webpack --env development", "build:test": "webpack --config webpack.test.config.js", "eslint": "eslint 'src/**' 'tests/**'", - "lint": "npm run eslint && npm run prettier -- --list-different && npm run knip", + "lint": "NODE_OPTIONS=\"--max-old-space-size=5120\" npm run eslint && npm run prettier -- --list-different && npm run knip", "lint:fix": "npm run eslint -- --fix && npm run prettier -- --write", "prepublishOnly": "npm run build && npx tsc", "prettier": "prettier './*.{ts,js,cjs,json,md,yml}' '{src,tests}/**/*.{ts,js,cjs}'", diff --git a/src/slang-nodes/AddressType.ts b/src/slang-nodes/AddressType.ts index a3f1bea4e..c144a3391 100644 --- a/src/slang-nodes/AddressType.ts +++ b/src/slang-nodes/AddressType.ts @@ -17,6 +17,6 @@ export class AddressType extends SlangNode { } print(): Doc { - return ['address', this.payableKeyword ? ' payable' : '']; + return `address${this.payableKeyword ? ' payable' : ''}`; } } diff --git a/src/slang-nodes/ConstructorAttributes.ts b/src/slang-nodes/ConstructorAttributes.ts index 0c333d67c..7e9878526 100644 --- a/src/slang-nodes/ConstructorAttributes.ts +++ b/src/slang-nodes/ConstructorAttributes.ts @@ -32,6 +32,6 @@ export class ConstructorAttributes extends SlangNode { } print(path: AstPath, print: PrintFunction): Doc { - return path.map((item) => [line, print(item)], 'items'); + return path.map(() => [line, print(path)], 'items'); } } diff --git a/src/slang-nodes/FallbackFunctionAttributes.ts b/src/slang-nodes/FallbackFunctionAttributes.ts index ce77ce759..02c789de4 100644 --- a/src/slang-nodes/FallbackFunctionAttributes.ts +++ b/src/slang-nodes/FallbackFunctionAttributes.ts @@ -32,6 +32,6 @@ export class FallbackFunctionAttributes extends SlangNode { } print(path: AstPath, print: PrintFunction): Doc { - return path.map((item) => [line, print(item)], 'items'); + return path.map(() => [line, print(path)], 'items'); } } diff --git a/src/slang-nodes/FunctionAttributes.ts b/src/slang-nodes/FunctionAttributes.ts index 58a063e69..85e631416 100644 --- a/src/slang-nodes/FunctionAttributes.ts +++ b/src/slang-nodes/FunctionAttributes.ts @@ -32,6 +32,6 @@ export class FunctionAttributes extends SlangNode { } print(path: AstPath, print: PrintFunction): Doc { - return path.map((item) => [line, print(item)], 'items'); + return path.map(() => [line, print(path)], 'items'); } } diff --git a/src/slang-nodes/FunctionTypeAttributes.ts b/src/slang-nodes/FunctionTypeAttributes.ts index 32281c8d2..702b7220e 100644 --- a/src/slang-nodes/FunctionTypeAttributes.ts +++ b/src/slang-nodes/FunctionTypeAttributes.ts @@ -27,6 +27,6 @@ export class FunctionTypeAttributes extends SlangNode { } print(path: AstPath, print: PrintFunction): Doc { - return path.map((item) => [line, print(item)], 'items'); + return path.map(() => [line, print(path)], 'items'); } } diff --git a/src/slang-nodes/ModifierAttributes.ts b/src/slang-nodes/ModifierAttributes.ts index 314a195b4..e440e75c2 100644 --- a/src/slang-nodes/ModifierAttributes.ts +++ b/src/slang-nodes/ModifierAttributes.ts @@ -27,6 +27,6 @@ export class ModifierAttributes extends SlangNode { } print(path: AstPath, print: PrintFunction): Doc { - return path.map((item) => [line, print(item)], 'items'); + return path.map(() => [line, print(path)], 'items'); } } diff --git a/src/slang-nodes/ReceiveFunctionAttributes.ts b/src/slang-nodes/ReceiveFunctionAttributes.ts index 3d31380f2..8dcbecfa2 100644 --- a/src/slang-nodes/ReceiveFunctionAttributes.ts +++ b/src/slang-nodes/ReceiveFunctionAttributes.ts @@ -32,6 +32,6 @@ export class ReceiveFunctionAttributes extends SlangNode { } print(path: AstPath, print: PrintFunction): Doc { - return path.map((item) => [line, print(item)], 'items'); + return path.map(() => [line, print(path)], 'items'); } } diff --git a/src/slang-nodes/StateVariableAttributes.ts b/src/slang-nodes/StateVariableAttributes.ts index 24598a8d2..02c9502ef 100644 --- a/src/slang-nodes/StateVariableAttributes.ts +++ b/src/slang-nodes/StateVariableAttributes.ts @@ -27,6 +27,6 @@ export class StateVariableAttributes extends SlangNode { } print(path: AstPath, print: PrintFunction): Doc { - return path.map((item) => [line, print(item)], 'items'); + return path.map(() => [line, print(path)], 'items'); } } diff --git a/src/slang-nodes/UnnamedFunctionAttributes.ts b/src/slang-nodes/UnnamedFunctionAttributes.ts index ed61d1698..162ea5e06 100644 --- a/src/slang-nodes/UnnamedFunctionAttributes.ts +++ b/src/slang-nodes/UnnamedFunctionAttributes.ts @@ -32,6 +32,6 @@ export class UnnamedFunctionAttributes extends SlangNode { } print(path: AstPath, print: PrintFunction): Doc { - return path.map((item) => [line, print(item)], 'items'); + return path.map(() => [line, print(path)], 'items'); } } diff --git a/src/slang-printers/print-comments.ts b/src/slang-printers/print-comments.ts index 5352c3127..f011d7d2e 100644 --- a/src/slang-printers/print-comments.ts +++ b/src/slang-printers/print-comments.ts @@ -24,8 +24,7 @@ export function printComments( if (node.comments === undefined) return []; return joinExisting( line, - path.map((commentPath, index, comments: Comment[]) => { - const comment = commentPath.node; + path.map(({ node: comment }, index, comments: Comment[]) => { if (!isPrintable(comment)) { return ''; } @@ -34,7 +33,7 @@ export function printComments( index === comments.length - 1 || comments.slice(index + 1).findIndex(isPrintable) === -1; return [ - printComment(commentPath), + printComment(path), !isLast && util.isNextLineEmpty(options.originalText, locEnd(comment)) ? hardline : '' diff --git a/src/slang-printers/print-preserving-empty-lines.ts b/src/slang-printers/print-preserving-empty-lines.ts index 7b54dce64..3602811c1 100644 --- a/src/slang-printers/print-preserving-empty-lines.ts +++ b/src/slang-printers/print-preserving-empty-lines.ts @@ -16,19 +16,17 @@ export function printPreservingEmptyLines( options: ParserOptions ): Doc { return node.items.length > 0 - ? path.map((childPath) => { - const node = childPath.node; - + ? path.map(({ node, isFirst, isLast }) => { return [ // Only attempt to prepend an empty line if `node` is not the first item - !childPath.isFirst && + !isFirst && // YulLabel adds a dedented line so we don't have to prepend a hardline. node.kind !== NonterminalKind.YulLabel ? hardline : '', - print(childPath), + print(path), // Only attempt to append an empty line if `node` is not the last item - !childPath.isLast && + !isLast && // Append an empty line if the original text already had an one after the // current `node` util.isNextLineEmpty(options.originalText, locEnd(node)) diff --git a/src/slangPrinter.ts b/src/slangPrinter.ts index 3e979b986..0297746f7 100644 --- a/src/slangPrinter.ts +++ b/src/slangPrinter.ts @@ -39,7 +39,7 @@ function ignoreComments(path: AstPath): void { // The key `comments` will contain every comment for this node. case 'comments': if (node.comments !== undefined) { - path.each((commentPath) => (commentPath.node.printed = true), key); + path.each(({ node }) => (node.printed = true), key); } break; default: