From 160c429528b57c581a15adc0cda8ceecea3c2f53 Mon Sep 17 00:00:00 2001 From: Klaus Date: Tue, 8 Jul 2025 13:17:45 +0100 Subject: [PATCH 1/8] if metadata is a fixed array, then it can more easily be destructured into class attributes saving file size --- src/slang-nodes/AbicoderPragma.ts | 3 +-- src/slang-nodes/AdditiveExpression.ts | 3 +-- src/slang-nodes/AddressType.ts | 3 +-- src/slang-nodes/AndExpression.ts | 3 +-- src/slang-nodes/ArgumentsDeclaration.ts | 3 +-- src/slang-nodes/ArrayExpression.ts | 3 +-- src/slang-nodes/ArrayTypeName.ts | 3 +-- src/slang-nodes/ArrayValues.ts | 3 +-- src/slang-nodes/AssemblyFlags.ts | 3 +-- src/slang-nodes/AssemblyFlagsDeclaration.ts | 3 +-- src/slang-nodes/AssemblyStatement.ts | 3 +-- src/slang-nodes/AssignmentExpression.ts | 3 +-- src/slang-nodes/BitwiseAndExpression.ts | 3 +-- src/slang-nodes/BitwiseOrExpression.ts | 3 +-- src/slang-nodes/BitwiseXorExpression.ts | 3 +-- src/slang-nodes/Block.ts | 3 +-- src/slang-nodes/BreakStatement.ts | 3 +-- src/slang-nodes/CallOptions.ts | 3 +-- src/slang-nodes/CallOptionsExpression.ts | 3 +-- src/slang-nodes/CatchClause.ts | 3 +-- src/slang-nodes/CatchClauseError.ts | 3 +-- src/slang-nodes/CatchClauses.ts | 3 +-- src/slang-nodes/ConditionalExpression.ts | 3 +-- src/slang-nodes/ConstantDefinition.ts | 3 +-- src/slang-nodes/ConstructorAttribute.ts | 3 +-- src/slang-nodes/ConstructorAttributes.ts | 3 +-- src/slang-nodes/ConstructorDefinition.ts | 3 +-- src/slang-nodes/ContinueStatement.ts | 3 +-- src/slang-nodes/ContractDefinition.ts | 3 +-- src/slang-nodes/ContractMember.ts | 3 +-- src/slang-nodes/ContractMembers.ts | 3 +-- src/slang-nodes/ContractSpecifier.ts | 3 +-- src/slang-nodes/ContractSpecifiers.ts | 3 +-- src/slang-nodes/DecimalNumberExpression.ts | 3 +-- src/slang-nodes/DoWhileStatement.ts | 3 +-- src/slang-nodes/ElementaryType.ts | 3 +-- src/slang-nodes/ElseBranch.ts | 3 +-- src/slang-nodes/EmitStatement.ts | 3 +-- src/slang-nodes/EnumDefinition.ts | 3 +-- src/slang-nodes/EnumMembers.ts | 3 +-- src/slang-nodes/EqualityExpression.ts | 3 +-- src/slang-nodes/ErrorDefinition.ts | 3 +-- src/slang-nodes/ErrorParameter.ts | 3 +-- src/slang-nodes/ErrorParameters.ts | 3 +-- src/slang-nodes/ErrorParametersDeclaration.ts | 3 +-- src/slang-nodes/EventDefinition.ts | 3 +-- src/slang-nodes/EventParameter.ts | 3 +-- src/slang-nodes/EventParameters.ts | 3 +-- src/slang-nodes/EventParametersDeclaration.ts | 3 +-- src/slang-nodes/ExperimentalFeature.ts | 3 +-- src/slang-nodes/ExperimentalPragma.ts | 3 +-- src/slang-nodes/ExponentiationExpression.ts | 3 +-- src/slang-nodes/Expression.ts | 3 +-- src/slang-nodes/ExpressionStatement.ts | 3 +-- src/slang-nodes/FallbackFunctionAttribute.ts | 3 +-- src/slang-nodes/FallbackFunctionAttributes.ts | 3 +-- src/slang-nodes/FallbackFunctionDefinition.ts | 3 +-- src/slang-nodes/ForStatement.ts | 3 +-- src/slang-nodes/ForStatementCondition.ts | 3 +-- src/slang-nodes/ForStatementInitialization.ts | 3 +-- src/slang-nodes/FunctionAttribute.ts | 3 +-- src/slang-nodes/FunctionAttributes.ts | 3 +-- src/slang-nodes/FunctionBody.ts | 3 +-- src/slang-nodes/FunctionCallExpression.ts | 3 +-- src/slang-nodes/FunctionDefinition.ts | 3 +-- src/slang-nodes/FunctionName.ts | 3 +-- src/slang-nodes/FunctionType.ts | 3 +-- src/slang-nodes/FunctionTypeAttribute.ts | 3 +-- src/slang-nodes/FunctionTypeAttributes.ts | 3 +-- src/slang-nodes/HexNumberExpression.ts | 3 +-- src/slang-nodes/HexStringLiteral.ts | 3 +-- src/slang-nodes/HexStringLiterals.ts | 3 +-- src/slang-nodes/Identifier.ts | 3 +-- src/slang-nodes/IdentifierPath.ts | 3 +-- src/slang-nodes/IfStatement.ts | 3 +-- src/slang-nodes/ImportAlias.ts | 3 +-- src/slang-nodes/ImportClause.ts | 3 +-- src/slang-nodes/ImportDeconstruction.ts | 3 +-- src/slang-nodes/ImportDeconstructionSymbol.ts | 3 +-- src/slang-nodes/ImportDeconstructionSymbols.ts | 3 +-- src/slang-nodes/ImportDirective.ts | 3 +-- src/slang-nodes/IndexAccessEnd.ts | 3 +-- src/slang-nodes/IndexAccessExpression.ts | 3 +-- src/slang-nodes/InequalityExpression.ts | 3 +-- src/slang-nodes/InheritanceSpecifier.ts | 3 +-- src/slang-nodes/InheritanceType.ts | 3 +-- src/slang-nodes/InheritanceTypes.ts | 3 +-- src/slang-nodes/InterfaceDefinition.ts | 3 +-- src/slang-nodes/InterfaceMembers.ts | 3 +-- src/slang-nodes/LibraryDefinition.ts | 3 +-- src/slang-nodes/LibraryMembers.ts | 3 +-- src/slang-nodes/MappingKey.ts | 3 +-- src/slang-nodes/MappingKeyType.ts | 3 +-- src/slang-nodes/MappingType.ts | 3 +-- src/slang-nodes/MappingValue.ts | 3 +-- src/slang-nodes/MemberAccessExpression.ts | 3 +-- src/slang-nodes/ModifierAttribute.ts | 3 +-- src/slang-nodes/ModifierAttributes.ts | 3 +-- src/slang-nodes/ModifierDefinition.ts | 3 +-- src/slang-nodes/ModifierInvocation.ts | 3 +-- src/slang-nodes/MultiLineComment.ts | 2 +- src/slang-nodes/MultiLineNatSpecComment.ts | 2 +- src/slang-nodes/MultiplicativeExpression.ts | 3 +-- src/slang-nodes/NamedArgument.ts | 3 +-- src/slang-nodes/NamedArgumentGroup.ts | 3 +-- src/slang-nodes/NamedArguments.ts | 3 +-- src/slang-nodes/NamedArgumentsDeclaration.ts | 3 +-- src/slang-nodes/NamedImport.ts | 3 +-- src/slang-nodes/NewExpression.ts | 3 +-- src/slang-nodes/NumberUnit.ts | 3 +-- src/slang-nodes/OrExpression.ts | 3 +-- src/slang-nodes/OverridePaths.ts | 3 +-- src/slang-nodes/OverridePathsDeclaration.ts | 3 +-- src/slang-nodes/OverrideSpecifier.ts | 3 +-- src/slang-nodes/Parameter.ts | 3 +-- src/slang-nodes/Parameters.ts | 3 +-- src/slang-nodes/ParametersDeclaration.ts | 3 +-- src/slang-nodes/PathImport.ts | 3 +-- src/slang-nodes/PositionalArguments.ts | 3 +-- .../PositionalArgumentsDeclaration.ts | 3 +-- src/slang-nodes/PostfixExpression.ts | 3 +-- src/slang-nodes/Pragma.ts | 3 +-- src/slang-nodes/PragmaDirective.ts | 3 +-- src/slang-nodes/PrefixExpression.ts | 3 +-- src/slang-nodes/ReceiveFunctionAttribute.ts | 3 +-- src/slang-nodes/ReceiveFunctionAttributes.ts | 3 +-- src/slang-nodes/ReceiveFunctionDefinition.ts | 3 +-- src/slang-nodes/ReturnStatement.ts | 3 +-- src/slang-nodes/ReturnsDeclaration.ts | 3 +-- src/slang-nodes/RevertStatement.ts | 3 +-- src/slang-nodes/ShiftExpression.ts | 3 +-- src/slang-nodes/SimpleVersionLiteral.ts | 3 +-- src/slang-nodes/SingleLineComment.ts | 2 +- src/slang-nodes/SingleLineNatSpecComment.ts | 2 +- src/slang-nodes/SourceUnit.ts | 8 ++++---- src/slang-nodes/SourceUnitMember.ts | 3 +-- src/slang-nodes/SourceUnitMembers.ts | 3 +-- src/slang-nodes/StateVariableAttribute.ts | 3 +-- src/slang-nodes/StateVariableAttributes.ts | 3 +-- src/slang-nodes/StateVariableDefinition.ts | 3 +-- src/slang-nodes/StateVariableDefinitionValue.ts | 3 +-- src/slang-nodes/Statement.ts | 3 +-- src/slang-nodes/Statements.ts | 3 +-- src/slang-nodes/StorageLayoutSpecifier.ts | 3 +-- src/slang-nodes/StorageLocation.ts | 3 +-- src/slang-nodes/StringExpression.ts | 3 +-- src/slang-nodes/StringLiteral.ts | 3 +-- src/slang-nodes/StringLiterals.ts | 3 +-- src/slang-nodes/StructDefinition.ts | 3 +-- src/slang-nodes/StructMember.ts | 3 +-- src/slang-nodes/StructMembers.ts | 3 +-- src/slang-nodes/ThrowStatement.ts | 3 +-- src/slang-nodes/TryStatement.ts | 3 +-- src/slang-nodes/TupleDeconstructionElement.ts | 3 +-- src/slang-nodes/TupleDeconstructionElements.ts | 3 +-- src/slang-nodes/TupleDeconstructionStatement.ts | 3 +-- src/slang-nodes/TupleExpression.ts | 3 +-- src/slang-nodes/TupleMember.ts | 3 +-- src/slang-nodes/TupleValue.ts | 3 +-- src/slang-nodes/TupleValues.ts | 3 +-- src/slang-nodes/TypeExpression.ts | 3 +-- src/slang-nodes/TypeName.ts | 3 +-- src/slang-nodes/TypedTupleMember.ts | 3 +-- src/slang-nodes/UncheckedBlock.ts | 3 +-- src/slang-nodes/UnicodeStringLiteral.ts | 3 +-- src/slang-nodes/UnicodeStringLiterals.ts | 3 +-- src/slang-nodes/UnnamedFunctionAttribute.ts | 3 +-- src/slang-nodes/UnnamedFunctionAttributes.ts | 3 +-- src/slang-nodes/UnnamedFunctionDefinition.ts | 3 +-- src/slang-nodes/UntypedTupleMember.ts | 3 +-- .../UserDefinedValueTypeDefinition.ts | 3 +-- src/slang-nodes/UsingAlias.ts | 3 +-- src/slang-nodes/UsingClause.ts | 3 +-- src/slang-nodes/UsingDeconstruction.ts | 3 +-- src/slang-nodes/UsingDeconstructionSymbol.ts | 3 +-- src/slang-nodes/UsingDeconstructionSymbols.ts | 3 +-- src/slang-nodes/UsingDirective.ts | 3 +-- src/slang-nodes/UsingOperator.ts | 3 +-- src/slang-nodes/UsingTarget.ts | 3 +-- src/slang-nodes/VariableDeclarationStatement.ts | 3 +-- src/slang-nodes/VariableDeclarationType.ts | 3 +-- src/slang-nodes/VariableDeclarationValue.ts | 3 +-- src/slang-nodes/VersionExpression.ts | 3 +-- src/slang-nodes/VersionExpressionSet.ts | 3 +-- src/slang-nodes/VersionExpressionSets.ts | 3 +-- src/slang-nodes/VersionLiteral.ts | 3 +-- src/slang-nodes/VersionOperator.ts | 3 +-- src/slang-nodes/VersionPragma.ts | 3 +-- src/slang-nodes/VersionRange.ts | 3 +-- src/slang-nodes/VersionTerm.ts | 3 +-- src/slang-nodes/WhileStatement.ts | 3 +-- src/slang-nodes/YulArguments.ts | 3 +-- src/slang-nodes/YulAssignmentOperator.ts | 3 +-- src/slang-nodes/YulBlock.ts | 3 +-- src/slang-nodes/YulBreakStatement.ts | 3 +-- src/slang-nodes/YulColonAndEqual.ts | 3 +-- src/slang-nodes/YulContinueStatement.ts | 3 +-- src/slang-nodes/YulDefaultCase.ts | 3 +-- src/slang-nodes/YulEqualAndColon.ts | 3 +-- src/slang-nodes/YulExpression.ts | 3 +-- src/slang-nodes/YulForStatement.ts | 3 +-- src/slang-nodes/YulFunctionCallExpression.ts | 3 +-- src/slang-nodes/YulFunctionDefinition.ts | 3 +-- src/slang-nodes/YulIdentifier.ts | 3 +-- src/slang-nodes/YulIfStatement.ts | 3 +-- src/slang-nodes/YulLabel.ts | 3 +-- src/slang-nodes/YulLeaveStatement.ts | 3 +-- src/slang-nodes/YulLiteral.ts | 3 +-- src/slang-nodes/YulParameters.ts | 3 +-- src/slang-nodes/YulParametersDeclaration.ts | 3 +-- src/slang-nodes/YulPath.ts | 3 +-- src/slang-nodes/YulPaths.ts | 3 +-- src/slang-nodes/YulReturnsDeclaration.ts | 3 +-- src/slang-nodes/YulStackAssignmentOperator.ts | 3 +-- src/slang-nodes/YulStackAssignmentStatement.ts | 3 +-- src/slang-nodes/YulStatement.ts | 3 +-- src/slang-nodes/YulStatements.ts | 3 +-- src/slang-nodes/YulSwitchCase.ts | 3 +-- src/slang-nodes/YulSwitchCases.ts | 3 +-- src/slang-nodes/YulSwitchStatement.ts | 3 +-- src/slang-nodes/YulValueCase.ts | 3 +-- .../YulVariableAssignmentStatement.ts | 3 +-- .../YulVariableDeclarationStatement.ts | 3 +-- src/slang-nodes/YulVariableDeclarationValue.ts | 3 +-- src/slang-nodes/YulVariableNames.ts | 3 +-- src/slang-utils/metadata.ts | 16 ++++++++-------- src/types.d.ts | 5 +---- 227 files changed, 237 insertions(+), 460 deletions(-) diff --git a/src/slang-nodes/AbicoderPragma.ts b/src/slang-nodes/AbicoderPragma.ts index f851f6633..00fb0dd56 100644 --- a/src/slang-nodes/AbicoderPragma.ts +++ b/src/slang-nodes/AbicoderPragma.ts @@ -20,8 +20,7 @@ export class AbicoderPragma implements SlangNode { this.version = new Identifier(ast.version); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/AdditiveExpression.ts b/src/slang-nodes/AdditiveExpression.ts index a85f31b73..1bd810123 100644 --- a/src/slang-nodes/AdditiveExpression.ts +++ b/src/slang-nodes/AdditiveExpression.ts @@ -47,8 +47,7 @@ export class AdditiveExpression implements SlangNode { metadata = updateMetadata(metadata, [this.leftOperand, this.rightOperand]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; this.leftOperand = tryToHug(this.leftOperand); this.rightOperand = tryToHug(this.rightOperand); diff --git a/src/slang-nodes/AddressType.ts b/src/slang-nodes/AddressType.ts index 32b87d403..aaf3c0769 100644 --- a/src/slang-nodes/AddressType.ts +++ b/src/slang-nodes/AddressType.ts @@ -20,8 +20,7 @@ export class AddressType implements SlangNode { this.payableKeyword = ast.payableKeyword?.unparse(); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(): Doc { diff --git a/src/slang-nodes/AndExpression.ts b/src/slang-nodes/AndExpression.ts index 83230738d..16159d1b2 100644 --- a/src/slang-nodes/AndExpression.ts +++ b/src/slang-nodes/AndExpression.ts @@ -30,8 +30,7 @@ export class AndExpression implements SlangNode { metadata = updateMetadata(metadata, [this.leftOperand, this.rightOperand]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print( diff --git a/src/slang-nodes/ArgumentsDeclaration.ts b/src/slang-nodes/ArgumentsDeclaration.ts index fa695e482..4444c7a02 100644 --- a/src/slang-nodes/ArgumentsDeclaration.ts +++ b/src/slang-nodes/ArgumentsDeclaration.ts @@ -39,8 +39,7 @@ export class ArgumentsDeclaration implements SlangNode { metadata = updateMetadata(metadata, [this.variant]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ArrayExpression.ts b/src/slang-nodes/ArrayExpression.ts index 74ead1b95..a1c011371 100644 --- a/src/slang-nodes/ArrayExpression.ts +++ b/src/slang-nodes/ArrayExpression.ts @@ -26,8 +26,7 @@ export class ArrayExpression implements SlangNode { metadata = updateMetadata(metadata, [this.items]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ArrayTypeName.ts b/src/slang-nodes/ArrayTypeName.ts index 27be21000..b305b9293 100644 --- a/src/slang-nodes/ArrayTypeName.ts +++ b/src/slang-nodes/ArrayTypeName.ts @@ -29,8 +29,7 @@ export class ArrayTypeName implements SlangNode { metadata = updateMetadata(metadata, [this.operand, this.index]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ArrayValues.ts b/src/slang-nodes/ArrayValues.ts index bd93d6c03..250ecb725 100644 --- a/src/slang-nodes/ArrayValues.ts +++ b/src/slang-nodes/ArrayValues.ts @@ -24,8 +24,7 @@ export class ArrayValues implements SlangNode { metadata = updateMetadata(metadata, [this.items]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/AssemblyFlags.ts b/src/slang-nodes/AssemblyFlags.ts index bd0a75982..15f4a2526 100644 --- a/src/slang-nodes/AssemblyFlags.ts +++ b/src/slang-nodes/AssemblyFlags.ts @@ -24,8 +24,7 @@ export class AssemblyFlags implements SlangNode { metadata = updateMetadata(metadata, [this.items]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/AssemblyFlagsDeclaration.ts b/src/slang-nodes/AssemblyFlagsDeclaration.ts index 52557175f..bdf0a3d58 100644 --- a/src/slang-nodes/AssemblyFlagsDeclaration.ts +++ b/src/slang-nodes/AssemblyFlagsDeclaration.ts @@ -26,8 +26,7 @@ export class AssemblyFlagsDeclaration implements SlangNode { metadata = updateMetadata(metadata, [this.flags]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/AssemblyStatement.ts b/src/slang-nodes/AssemblyStatement.ts index 9b6ab9d21..8e268acff 100644 --- a/src/slang-nodes/AssemblyStatement.ts +++ b/src/slang-nodes/AssemblyStatement.ts @@ -36,8 +36,7 @@ export class AssemblyStatement implements SlangNode { metadata = updateMetadata(metadata, [this.label, this.flags, this.body]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/AssignmentExpression.ts b/src/slang-nodes/AssignmentExpression.ts index f971deefa..046005db3 100644 --- a/src/slang-nodes/AssignmentExpression.ts +++ b/src/slang-nodes/AssignmentExpression.ts @@ -33,8 +33,7 @@ export class AssignmentExpression implements SlangNode { metadata = updateMetadata(metadata, [this.leftOperand, this.rightOperand]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/BitwiseAndExpression.ts b/src/slang-nodes/BitwiseAndExpression.ts index e936c83a8..b5f35601f 100644 --- a/src/slang-nodes/BitwiseAndExpression.ts +++ b/src/slang-nodes/BitwiseAndExpression.ts @@ -43,8 +43,7 @@ export class BitwiseAndExpression implements SlangNode { metadata = updateMetadata(metadata, [this.leftOperand, this.rightOperand]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; this.leftOperand = tryToHug(this.leftOperand); this.rightOperand = tryToHug(this.rightOperand); diff --git a/src/slang-nodes/BitwiseOrExpression.ts b/src/slang-nodes/BitwiseOrExpression.ts index 3c51cfa64..7fae801b2 100644 --- a/src/slang-nodes/BitwiseOrExpression.ts +++ b/src/slang-nodes/BitwiseOrExpression.ts @@ -53,8 +53,7 @@ export class BitwiseOrExpression implements SlangNode { metadata = updateMetadata(metadata, [this.leftOperand, this.rightOperand]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; this.leftOperand = tryToHug(this.leftOperand); this.rightOperand = tryToHug(this.rightOperand); diff --git a/src/slang-nodes/BitwiseXorExpression.ts b/src/slang-nodes/BitwiseXorExpression.ts index f341e8155..ff8c6750f 100644 --- a/src/slang-nodes/BitwiseXorExpression.ts +++ b/src/slang-nodes/BitwiseXorExpression.ts @@ -43,8 +43,7 @@ export class BitwiseXorExpression implements SlangNode { metadata = updateMetadata(metadata, [this.leftOperand, this.rightOperand]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; this.leftOperand = tryToHug(this.leftOperand); this.rightOperand = tryToHug(this.rightOperand); diff --git a/src/slang-nodes/Block.ts b/src/slang-nodes/Block.ts index ef6f4c0a1..76f176528 100644 --- a/src/slang-nodes/Block.ts +++ b/src/slang-nodes/Block.ts @@ -23,8 +23,7 @@ export class Block implements SlangNode { metadata = updateMetadata(metadata, [this.statements]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/BreakStatement.ts b/src/slang-nodes/BreakStatement.ts index fe7a837f2..19d9b3b82 100644 --- a/src/slang-nodes/BreakStatement.ts +++ b/src/slang-nodes/BreakStatement.ts @@ -15,8 +15,7 @@ export class BreakStatement implements SlangNode { constructor(ast: ast.BreakStatement) { const metadata = getNodeMetadata(ast); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(): Doc { diff --git a/src/slang-nodes/CallOptions.ts b/src/slang-nodes/CallOptions.ts index 6b2389b16..7c5dd728a 100644 --- a/src/slang-nodes/CallOptions.ts +++ b/src/slang-nodes/CallOptions.ts @@ -27,8 +27,7 @@ export class CallOptions implements SlangNode { metadata = updateMetadata(metadata, [this.items]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print( diff --git a/src/slang-nodes/CallOptionsExpression.ts b/src/slang-nodes/CallOptionsExpression.ts index 60f6f8d06..c5bbc8aa6 100644 --- a/src/slang-nodes/CallOptionsExpression.ts +++ b/src/slang-nodes/CallOptionsExpression.ts @@ -27,8 +27,7 @@ export class CallOptionsExpression implements SlangNode { metadata = updateMetadata(metadata, [this.operand, this.options]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/CatchClause.ts b/src/slang-nodes/CatchClause.ts index 8e529500c..18923866e 100644 --- a/src/slang-nodes/CatchClause.ts +++ b/src/slang-nodes/CatchClause.ts @@ -29,8 +29,7 @@ export class CatchClause implements SlangNode { metadata = updateMetadata(metadata, [this.error, this.body]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/CatchClauseError.ts b/src/slang-nodes/CatchClauseError.ts index 8fbe4a1e0..5d4ed3ee1 100644 --- a/src/slang-nodes/CatchClauseError.ts +++ b/src/slang-nodes/CatchClauseError.ts @@ -32,8 +32,7 @@ export class CatchClauseError implements SlangNode { metadata = updateMetadata(metadata, [this.parameters]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/CatchClauses.ts b/src/slang-nodes/CatchClauses.ts index 6ece00d34..78269e922 100644 --- a/src/slang-nodes/CatchClauses.ts +++ b/src/slang-nodes/CatchClauses.ts @@ -26,8 +26,7 @@ export class CatchClauses implements SlangNode { metadata = updateMetadata(metadata, [this.items]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ConditionalExpression.ts b/src/slang-nodes/ConditionalExpression.ts index d8098c3fe..12ee34516 100644 --- a/src/slang-nodes/ConditionalExpression.ts +++ b/src/slang-nodes/ConditionalExpression.ts @@ -134,8 +134,7 @@ export class ConditionalExpression implements SlangNode { this.falseExpression ]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; if (options.experimentalTernaries) { // We can remove parentheses only because we are sure that the diff --git a/src/slang-nodes/ConstantDefinition.ts b/src/slang-nodes/ConstantDefinition.ts index f047600db..26834237f 100644 --- a/src/slang-nodes/ConstantDefinition.ts +++ b/src/slang-nodes/ConstantDefinition.ts @@ -31,8 +31,7 @@ export class ConstantDefinition implements SlangNode { metadata = updateMetadata(metadata, [this.typeName, this.value]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ConstructorAttribute.ts b/src/slang-nodes/ConstructorAttribute.ts index db6dd0ec2..46f695ece 100644 --- a/src/slang-nodes/ConstructorAttribute.ts +++ b/src/slang-nodes/ConstructorAttribute.ts @@ -29,8 +29,7 @@ export class ConstructorAttribute implements SlangNode { typeof this.variant === 'string' ? [] : [this.variant] ); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ConstructorAttributes.ts b/src/slang-nodes/ConstructorAttributes.ts index 325e3bde7..790b3e199 100644 --- a/src/slang-nodes/ConstructorAttributes.ts +++ b/src/slang-nodes/ConstructorAttributes.ts @@ -29,8 +29,7 @@ export class ConstructorAttributes implements SlangNode { metadata = updateMetadata(metadata, [this.items]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; this.items = this.items.sort(sortFunctionAttributes); } diff --git a/src/slang-nodes/ConstructorDefinition.ts b/src/slang-nodes/ConstructorDefinition.ts index e0823786f..c7fd89e23 100644 --- a/src/slang-nodes/ConstructorDefinition.ts +++ b/src/slang-nodes/ConstructorDefinition.ts @@ -36,8 +36,7 @@ export class ConstructorDefinition implements SlangNode { this.body ]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ContinueStatement.ts b/src/slang-nodes/ContinueStatement.ts index a93c1613c..fa4997f46 100644 --- a/src/slang-nodes/ContinueStatement.ts +++ b/src/slang-nodes/ContinueStatement.ts @@ -15,8 +15,7 @@ export class ContinueStatement implements SlangNode { constructor(ast: ast.ContinueStatement) { const metadata = getNodeMetadata(ast); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(): Doc { diff --git a/src/slang-nodes/ContractDefinition.ts b/src/slang-nodes/ContractDefinition.ts index c158eb0bf..0c376bb58 100644 --- a/src/slang-nodes/ContractDefinition.ts +++ b/src/slang-nodes/ContractDefinition.ts @@ -38,8 +38,7 @@ export class ContractDefinition implements SlangNode { metadata = updateMetadata(metadata, [this.specifiers, this.members]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; this.cleanModifierInvocationArguments(options); } diff --git a/src/slang-nodes/ContractMember.ts b/src/slang-nodes/ContractMember.ts index 00e7845d8..adf9296f9 100644 --- a/src/slang-nodes/ContractMember.ts +++ b/src/slang-nodes/ContractMember.ts @@ -125,8 +125,7 @@ export class ContractMember implements SlangNode { metadata = updateMetadata(metadata, [this.variant]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ContractMembers.ts b/src/slang-nodes/ContractMembers.ts index 935839d5a..ea1ee2056 100644 --- a/src/slang-nodes/ContractMembers.ts +++ b/src/slang-nodes/ContractMembers.ts @@ -29,8 +29,7 @@ export class ContractMembers implements SlangNode { metadata = updateMetadata(metadata, [this.items]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print( diff --git a/src/slang-nodes/ContractSpecifier.ts b/src/slang-nodes/ContractSpecifier.ts index bfa0970fd..dbf43596f 100644 --- a/src/slang-nodes/ContractSpecifier.ts +++ b/src/slang-nodes/ContractSpecifier.ts @@ -38,8 +38,7 @@ export class ContractSpecifier implements SlangNode { } metadata = updateMetadata(metadata, [this.variant]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ContractSpecifiers.ts b/src/slang-nodes/ContractSpecifiers.ts index 60065bd2d..b3c7c94df 100644 --- a/src/slang-nodes/ContractSpecifiers.ts +++ b/src/slang-nodes/ContractSpecifiers.ts @@ -28,8 +28,7 @@ export class ContractSpecifiers implements SlangNode { metadata = updateMetadata(metadata, [this.items]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; this.items = this.items.sort(sortContractSpecifiers); } diff --git a/src/slang-nodes/DecimalNumberExpression.ts b/src/slang-nodes/DecimalNumberExpression.ts index f5fc3cd2a..cc1c869f8 100644 --- a/src/slang-nodes/DecimalNumberExpression.ts +++ b/src/slang-nodes/DecimalNumberExpression.ts @@ -28,8 +28,7 @@ export class DecimalNumberExpression implements SlangNode { metadata = updateMetadata(metadata, [this.unit]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/DoWhileStatement.ts b/src/slang-nodes/DoWhileStatement.ts index ee4dc794a..09231ba07 100644 --- a/src/slang-nodes/DoWhileStatement.ts +++ b/src/slang-nodes/DoWhileStatement.ts @@ -31,8 +31,7 @@ export class DoWhileStatement implements SlangNode { metadata = updateMetadata(metadata, [this.body, this.condition]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ElementaryType.ts b/src/slang-nodes/ElementaryType.ts index b2fb6c469..ae3523d49 100644 --- a/src/slang-nodes/ElementaryType.ts +++ b/src/slang-nodes/ElementaryType.ts @@ -28,8 +28,7 @@ export class ElementaryType implements SlangNode { typeof this.variant === 'string' ? [] : [this.variant] ); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ElseBranch.ts b/src/slang-nodes/ElseBranch.ts index b5db67980..a74d0e46e 100644 --- a/src/slang-nodes/ElseBranch.ts +++ b/src/slang-nodes/ElseBranch.ts @@ -32,8 +32,7 @@ export class ElseBranch implements SlangNode { metadata = updateMetadata(metadata, [this.body]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/EmitStatement.ts b/src/slang-nodes/EmitStatement.ts index e883dbefc..d47f3897b 100644 --- a/src/slang-nodes/EmitStatement.ts +++ b/src/slang-nodes/EmitStatement.ts @@ -27,8 +27,7 @@ export class EmitStatement implements SlangNode { metadata = updateMetadata(metadata, [this.event, this.arguments]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/EnumDefinition.ts b/src/slang-nodes/EnumDefinition.ts index 22c5c37c1..c82d3f31f 100644 --- a/src/slang-nodes/EnumDefinition.ts +++ b/src/slang-nodes/EnumDefinition.ts @@ -26,8 +26,7 @@ export class EnumDefinition implements SlangNode { metadata = updateMetadata(metadata, [this.members]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/EnumMembers.ts b/src/slang-nodes/EnumMembers.ts index 81dcdf3bd..be8c84614 100644 --- a/src/slang-nodes/EnumMembers.ts +++ b/src/slang-nodes/EnumMembers.ts @@ -24,8 +24,7 @@ export class EnumMembers implements SlangNode { this.items = ast.items.map((item) => new Identifier(item)); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/EqualityExpression.ts b/src/slang-nodes/EqualityExpression.ts index f34aa0812..9227fe053 100644 --- a/src/slang-nodes/EqualityExpression.ts +++ b/src/slang-nodes/EqualityExpression.ts @@ -41,8 +41,7 @@ export class EqualityExpression implements SlangNode { metadata = updateMetadata(metadata, [this.leftOperand, this.rightOperand]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; this.leftOperand = tryToHug(this.leftOperand); } diff --git a/src/slang-nodes/ErrorDefinition.ts b/src/slang-nodes/ErrorDefinition.ts index 8a3dfb409..e643bc52c 100644 --- a/src/slang-nodes/ErrorDefinition.ts +++ b/src/slang-nodes/ErrorDefinition.ts @@ -27,8 +27,7 @@ export class ErrorDefinition implements SlangNode { metadata = updateMetadata(metadata, [this.members]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ErrorParameter.ts b/src/slang-nodes/ErrorParameter.ts index 858305f12..ddf004fc6 100644 --- a/src/slang-nodes/ErrorParameter.ts +++ b/src/slang-nodes/ErrorParameter.ts @@ -30,8 +30,7 @@ export class ErrorParameter implements SlangNode { metadata = updateMetadata(metadata, [this.typeName]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ErrorParameters.ts b/src/slang-nodes/ErrorParameters.ts index 701d7bfb5..a9c01854e 100644 --- a/src/slang-nodes/ErrorParameters.ts +++ b/src/slang-nodes/ErrorParameters.ts @@ -24,8 +24,7 @@ export class ErrorParameters implements SlangNode { metadata = updateMetadata(metadata, [this.items]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ErrorParametersDeclaration.ts b/src/slang-nodes/ErrorParametersDeclaration.ts index fe04aa54f..411e6a00e 100644 --- a/src/slang-nodes/ErrorParametersDeclaration.ts +++ b/src/slang-nodes/ErrorParametersDeclaration.ts @@ -26,8 +26,7 @@ export class ErrorParametersDeclaration implements SlangNode { metadata = updateMetadata(metadata, [this.parameters]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/EventDefinition.ts b/src/slang-nodes/EventDefinition.ts index 0cb1e3898..5428361e7 100644 --- a/src/slang-nodes/EventDefinition.ts +++ b/src/slang-nodes/EventDefinition.ts @@ -30,8 +30,7 @@ export class EventDefinition implements SlangNode { metadata = updateMetadata(metadata, [this.parameters]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/EventParameter.ts b/src/slang-nodes/EventParameter.ts index ce310f219..2619ddedd 100644 --- a/src/slang-nodes/EventParameter.ts +++ b/src/slang-nodes/EventParameter.ts @@ -33,8 +33,7 @@ export class EventParameter implements SlangNode { metadata = updateMetadata(metadata, [this.typeName]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/EventParameters.ts b/src/slang-nodes/EventParameters.ts index bcc303f32..02d39c6c7 100644 --- a/src/slang-nodes/EventParameters.ts +++ b/src/slang-nodes/EventParameters.ts @@ -24,8 +24,7 @@ export class EventParameters implements SlangNode { metadata = updateMetadata(metadata, [this.items]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/EventParametersDeclaration.ts b/src/slang-nodes/EventParametersDeclaration.ts index 5f3194f93..a4512702a 100644 --- a/src/slang-nodes/EventParametersDeclaration.ts +++ b/src/slang-nodes/EventParametersDeclaration.ts @@ -26,8 +26,7 @@ export class EventParametersDeclaration implements SlangNode { metadata = updateMetadata(metadata, [this.parameters]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ExperimentalFeature.ts b/src/slang-nodes/ExperimentalFeature.ts index a513b9ecd..220ece8b1 100644 --- a/src/slang-nodes/ExperimentalFeature.ts +++ b/src/slang-nodes/ExperimentalFeature.ts @@ -34,8 +34,7 @@ export class ExperimentalFeature implements SlangNode { this.variant.kind === TerminalKind.Identifier ? [] : [this.variant] ); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ExperimentalPragma.ts b/src/slang-nodes/ExperimentalPragma.ts index d31e14056..b1c733e52 100644 --- a/src/slang-nodes/ExperimentalPragma.ts +++ b/src/slang-nodes/ExperimentalPragma.ts @@ -23,8 +23,7 @@ export class ExperimentalPragma implements SlangNode { metadata = updateMetadata(metadata, [this.feature]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ExponentiationExpression.ts b/src/slang-nodes/ExponentiationExpression.ts index 0a0e7a979..818a04a63 100644 --- a/src/slang-nodes/ExponentiationExpression.ts +++ b/src/slang-nodes/ExponentiationExpression.ts @@ -61,8 +61,7 @@ export class ExponentiationExpression implements SlangNode { metadata = updateMetadata(metadata, [this.leftOperand, this.rightOperand]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; this.rightOperand = tryToHug(this.rightOperand); this.leftOperand = tryToHug(this.leftOperand); diff --git a/src/slang-nodes/Expression.ts b/src/slang-nodes/Expression.ts index 25f303709..d0862948e 100644 --- a/src/slang-nodes/Expression.ts +++ b/src/slang-nodes/Expression.ts @@ -249,8 +249,7 @@ export class Expression implements SlangNode { this.variant.kind === TerminalKind.Identifier ? [] : [this.variant] ); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ExpressionStatement.ts b/src/slang-nodes/ExpressionStatement.ts index ec4a51ab2..7ab8d7f21 100644 --- a/src/slang-nodes/ExpressionStatement.ts +++ b/src/slang-nodes/ExpressionStatement.ts @@ -23,8 +23,7 @@ export class ExpressionStatement implements SlangNode { metadata = updateMetadata(metadata, [this.expression]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/FallbackFunctionAttribute.ts b/src/slang-nodes/FallbackFunctionAttribute.ts index c5a4acf1d..d1be09c99 100644 --- a/src/slang-nodes/FallbackFunctionAttribute.ts +++ b/src/slang-nodes/FallbackFunctionAttribute.ts @@ -48,8 +48,7 @@ export class FallbackFunctionAttribute implements SlangNode { typeof this.variant === 'string' ? [] : [this.variant] ); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/FallbackFunctionAttributes.ts b/src/slang-nodes/FallbackFunctionAttributes.ts index aeb578f81..b272bc011 100644 --- a/src/slang-nodes/FallbackFunctionAttributes.ts +++ b/src/slang-nodes/FallbackFunctionAttributes.ts @@ -32,8 +32,7 @@ export class FallbackFunctionAttributes implements SlangNode { metadata = updateMetadata(metadata, [this.items]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; this.items = this.items.sort(sortFunctionAttributes); } diff --git a/src/slang-nodes/FallbackFunctionDefinition.ts b/src/slang-nodes/FallbackFunctionDefinition.ts index 8ed12dfb6..6d3196124 100644 --- a/src/slang-nodes/FallbackFunctionDefinition.ts +++ b/src/slang-nodes/FallbackFunctionDefinition.ts @@ -46,8 +46,7 @@ export class FallbackFunctionDefinition implements SlangNode { this.body ]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; this.cleanModifierInvocationArguments(); } diff --git a/src/slang-nodes/ForStatement.ts b/src/slang-nodes/ForStatement.ts index 77b3cfa2a..a2cfed736 100644 --- a/src/slang-nodes/ForStatement.ts +++ b/src/slang-nodes/ForStatement.ts @@ -49,8 +49,7 @@ export class ForStatement implements SlangNode { this.body ]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ForStatementCondition.ts b/src/slang-nodes/ForStatementCondition.ts index ba9cb87f9..ee7e9f120 100644 --- a/src/slang-nodes/ForStatementCondition.ts +++ b/src/slang-nodes/ForStatementCondition.ts @@ -29,8 +29,7 @@ export class ForStatementCondition implements SlangNode { typeof this.variant === 'string' ? [] : [this.variant] ); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ForStatementInitialization.ts b/src/slang-nodes/ForStatementInitialization.ts index 761c2d654..ce12ef3f5 100644 --- a/src/slang-nodes/ForStatementInitialization.ts +++ b/src/slang-nodes/ForStatementInitialization.ts @@ -60,8 +60,7 @@ export class ForStatementInitialization implements SlangNode { typeof this.variant === 'string' ? [] : [this.variant] ); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/FunctionAttribute.ts b/src/slang-nodes/FunctionAttribute.ts index 5f54367fb..07358fad3 100644 --- a/src/slang-nodes/FunctionAttribute.ts +++ b/src/slang-nodes/FunctionAttribute.ts @@ -45,8 +45,7 @@ export class FunctionAttribute implements SlangNode { typeof this.variant === 'string' ? [] : [this.variant] ); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/FunctionAttributes.ts b/src/slang-nodes/FunctionAttributes.ts index 0cef35a7d..5dcb94e5f 100644 --- a/src/slang-nodes/FunctionAttributes.ts +++ b/src/slang-nodes/FunctionAttributes.ts @@ -27,8 +27,7 @@ export class FunctionAttributes implements SlangNode { metadata = updateMetadata(metadata, [this.items]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; this.items = this.items.sort(sortFunctionAttributes); } diff --git a/src/slang-nodes/FunctionBody.ts b/src/slang-nodes/FunctionBody.ts index 27ecf8b42..2aaa6548a 100644 --- a/src/slang-nodes/FunctionBody.ts +++ b/src/slang-nodes/FunctionBody.ts @@ -29,8 +29,7 @@ export class FunctionBody implements SlangNode { typeof this.variant === 'string' ? [] : [this.variant] ); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/FunctionCallExpression.ts b/src/slang-nodes/FunctionCallExpression.ts index 029c6561e..4a05697ae 100644 --- a/src/slang-nodes/FunctionCallExpression.ts +++ b/src/slang-nodes/FunctionCallExpression.ts @@ -34,8 +34,7 @@ export class FunctionCallExpression implements SlangNode { metadata = updateMetadata(metadata, [this.operand, this.arguments]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/FunctionDefinition.ts b/src/slang-nodes/FunctionDefinition.ts index 95eaefd89..1f54f9475 100644 --- a/src/slang-nodes/FunctionDefinition.ts +++ b/src/slang-nodes/FunctionDefinition.ts @@ -49,8 +49,7 @@ export class FunctionDefinition implements SlangNode { this.body ]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; // Older versions of Solidity defined a constructor as a function having // the same name as the contract. diff --git a/src/slang-nodes/FunctionName.ts b/src/slang-nodes/FunctionName.ts index 85e7fdf4c..25951bb52 100644 --- a/src/slang-nodes/FunctionName.ts +++ b/src/slang-nodes/FunctionName.ts @@ -20,8 +20,7 @@ export class FunctionName implements SlangNode { this.variant = new Identifier(ast.variant); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/FunctionType.ts b/src/slang-nodes/FunctionType.ts index 6705f5dc9..77aaba3dd 100644 --- a/src/slang-nodes/FunctionType.ts +++ b/src/slang-nodes/FunctionType.ts @@ -38,8 +38,7 @@ export class FunctionType implements SlangNode { this.returns ]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/FunctionTypeAttribute.ts b/src/slang-nodes/FunctionTypeAttribute.ts index 0dbd804d4..f298eb2fc 100644 --- a/src/slang-nodes/FunctionTypeAttribute.ts +++ b/src/slang-nodes/FunctionTypeAttribute.ts @@ -19,8 +19,7 @@ export class FunctionTypeAttribute implements SlangNode { this.variant = ast.variant.unparse(); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(): Doc { diff --git a/src/slang-nodes/FunctionTypeAttributes.ts b/src/slang-nodes/FunctionTypeAttributes.ts index 1d204e68b..9289eb6bd 100644 --- a/src/slang-nodes/FunctionTypeAttributes.ts +++ b/src/slang-nodes/FunctionTypeAttributes.ts @@ -26,8 +26,7 @@ export class FunctionTypeAttributes implements SlangNode { metadata = updateMetadata(metadata, [this.items]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; this.items = this.items.sort(sortFunctionAttributes); } diff --git a/src/slang-nodes/HexNumberExpression.ts b/src/slang-nodes/HexNumberExpression.ts index b76752dc0..bb3ca4186 100644 --- a/src/slang-nodes/HexNumberExpression.ts +++ b/src/slang-nodes/HexNumberExpression.ts @@ -28,8 +28,7 @@ export class HexNumberExpression implements SlangNode { metadata = updateMetadata(metadata, [this.unit]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/HexStringLiteral.ts b/src/slang-nodes/HexStringLiteral.ts index 81e4d64ec..58ddc0d79 100644 --- a/src/slang-nodes/HexStringLiteral.ts +++ b/src/slang-nodes/HexStringLiteral.ts @@ -21,8 +21,7 @@ export class HexStringLiteral implements SlangNode { this.variant = ast.variant.unparse(); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; this.variant = `hex${printString(this.variant.slice(4, -1), options)}`; } diff --git a/src/slang-nodes/HexStringLiterals.ts b/src/slang-nodes/HexStringLiterals.ts index ab13d777d..c007816f4 100644 --- a/src/slang-nodes/HexStringLiterals.ts +++ b/src/slang-nodes/HexStringLiterals.ts @@ -26,8 +26,7 @@ export class HexStringLiterals implements SlangNode { metadata = updateMetadata(metadata, [this.items]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/Identifier.ts b/src/slang-nodes/Identifier.ts index 1e0f8d837..af7c35711 100644 --- a/src/slang-nodes/Identifier.ts +++ b/src/slang-nodes/Identifier.ts @@ -19,8 +19,7 @@ export class Identifier implements SlangNode { this.value = ast.unparse(); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(): Doc { diff --git a/src/slang-nodes/IdentifierPath.ts b/src/slang-nodes/IdentifierPath.ts index 8bdbeb471..f5c8bb847 100644 --- a/src/slang-nodes/IdentifierPath.ts +++ b/src/slang-nodes/IdentifierPath.ts @@ -23,8 +23,7 @@ export class IdentifierPath implements SlangNode { this.items = ast.items.map((item) => new Identifier(item)); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/IfStatement.ts b/src/slang-nodes/IfStatement.ts index be3af109c..434e1dc6d 100644 --- a/src/slang-nodes/IfStatement.ts +++ b/src/slang-nodes/IfStatement.ts @@ -42,8 +42,7 @@ export class IfStatement implements SlangNode { this.elseBranch ]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ImportAlias.ts b/src/slang-nodes/ImportAlias.ts index 0116cc428..f62a131d4 100644 --- a/src/slang-nodes/ImportAlias.ts +++ b/src/slang-nodes/ImportAlias.ts @@ -20,8 +20,7 @@ export class ImportAlias implements SlangNode { this.identifier = new Identifier(ast.identifier); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ImportClause.ts b/src/slang-nodes/ImportClause.ts index 5077a50fb..a939feb75 100644 --- a/src/slang-nodes/ImportClause.ts +++ b/src/slang-nodes/ImportClause.ts @@ -40,8 +40,7 @@ export class ImportClause implements SlangNode { metadata = updateMetadata(metadata, [this.variant]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ImportDeconstruction.ts b/src/slang-nodes/ImportDeconstruction.ts index df0daa2f5..d33aefd71 100644 --- a/src/slang-nodes/ImportDeconstruction.ts +++ b/src/slang-nodes/ImportDeconstruction.ts @@ -27,8 +27,7 @@ export class ImportDeconstruction implements SlangNode { metadata = updateMetadata(metadata, [this.symbols, this.path]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ImportDeconstructionSymbol.ts b/src/slang-nodes/ImportDeconstructionSymbol.ts index 8b005464a..eba863681 100644 --- a/src/slang-nodes/ImportDeconstructionSymbol.ts +++ b/src/slang-nodes/ImportDeconstructionSymbol.ts @@ -28,8 +28,7 @@ export class ImportDeconstructionSymbol implements SlangNode { metadata = updateMetadata(metadata, [this.alias]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ImportDeconstructionSymbols.ts b/src/slang-nodes/ImportDeconstructionSymbols.ts index 10ba7adea..bd2cd955a 100644 --- a/src/slang-nodes/ImportDeconstructionSymbols.ts +++ b/src/slang-nodes/ImportDeconstructionSymbols.ts @@ -28,8 +28,7 @@ export class ImportDeconstructionSymbols implements SlangNode { metadata = updateMetadata(metadata, [this.items]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print( diff --git a/src/slang-nodes/ImportDirective.ts b/src/slang-nodes/ImportDirective.ts index 470df6c26..683a78517 100644 --- a/src/slang-nodes/ImportDirective.ts +++ b/src/slang-nodes/ImportDirective.ts @@ -23,8 +23,7 @@ export class ImportDirective implements SlangNode { metadata = updateMetadata(metadata, [this.clause]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/IndexAccessEnd.ts b/src/slang-nodes/IndexAccessEnd.ts index f8f698378..61432de81 100644 --- a/src/slang-nodes/IndexAccessEnd.ts +++ b/src/slang-nodes/IndexAccessEnd.ts @@ -25,8 +25,7 @@ export class IndexAccessEnd implements SlangNode { metadata = updateMetadata(metadata, [this.end]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/IndexAccessExpression.ts b/src/slang-nodes/IndexAccessExpression.ts index 73077fe39..2df6f90f4 100644 --- a/src/slang-nodes/IndexAccessExpression.ts +++ b/src/slang-nodes/IndexAccessExpression.ts @@ -39,8 +39,7 @@ export class IndexAccessExpression implements SlangNode { metadata = updateMetadata(metadata, [this.operand, this.start, this.end]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/InequalityExpression.ts b/src/slang-nodes/InequalityExpression.ts index c80930265..42de1d850 100644 --- a/src/slang-nodes/InequalityExpression.ts +++ b/src/slang-nodes/InequalityExpression.ts @@ -39,8 +39,7 @@ export class InequalityExpression implements SlangNode { metadata = updateMetadata(metadata, [this.leftOperand, this.rightOperand]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print( diff --git a/src/slang-nodes/InheritanceSpecifier.ts b/src/slang-nodes/InheritanceSpecifier.ts index f25834495..81f58519d 100644 --- a/src/slang-nodes/InheritanceSpecifier.ts +++ b/src/slang-nodes/InheritanceSpecifier.ts @@ -23,8 +23,7 @@ export class InheritanceSpecifier implements SlangNode { metadata = updateMetadata(metadata, [this.types]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/InheritanceType.ts b/src/slang-nodes/InheritanceType.ts index b63fefd8e..87f569250 100644 --- a/src/slang-nodes/InheritanceType.ts +++ b/src/slang-nodes/InheritanceType.ts @@ -29,8 +29,7 @@ export class InheritanceType implements SlangNode { metadata = updateMetadata(metadata, [this.typeName, this.arguments]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/InheritanceTypes.ts b/src/slang-nodes/InheritanceTypes.ts index 55b7ad671..f7280439b 100644 --- a/src/slang-nodes/InheritanceTypes.ts +++ b/src/slang-nodes/InheritanceTypes.ts @@ -27,8 +27,7 @@ export class InheritanceTypes implements SlangNode { metadata = updateMetadata(metadata, [this.items]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/InterfaceDefinition.ts b/src/slang-nodes/InterfaceDefinition.ts index 12b9ebf22..a26ab55a4 100644 --- a/src/slang-nodes/InterfaceDefinition.ts +++ b/src/slang-nodes/InterfaceDefinition.ts @@ -36,8 +36,7 @@ export class InterfaceDefinition implements SlangNode { metadata = updateMetadata(metadata, [this.inheritance, this.members]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/InterfaceMembers.ts b/src/slang-nodes/InterfaceMembers.ts index 31e949682..0e1b81c3e 100644 --- a/src/slang-nodes/InterfaceMembers.ts +++ b/src/slang-nodes/InterfaceMembers.ts @@ -28,8 +28,7 @@ export class InterfaceMembers implements SlangNode { metadata = updateMetadata(metadata, [this.items]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print( diff --git a/src/slang-nodes/LibraryDefinition.ts b/src/slang-nodes/LibraryDefinition.ts index 24267a5e8..2c44991de 100644 --- a/src/slang-nodes/LibraryDefinition.ts +++ b/src/slang-nodes/LibraryDefinition.ts @@ -30,8 +30,7 @@ export class LibraryDefinition implements SlangNode { metadata = updateMetadata(metadata, [this.members]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/LibraryMembers.ts b/src/slang-nodes/LibraryMembers.ts index c17ca6f02..0c49602cd 100644 --- a/src/slang-nodes/LibraryMembers.ts +++ b/src/slang-nodes/LibraryMembers.ts @@ -28,8 +28,7 @@ export class LibraryMembers implements SlangNode { metadata = updateMetadata(metadata, [this.items]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print( diff --git a/src/slang-nodes/MappingKey.ts b/src/slang-nodes/MappingKey.ts index a41e724fe..da7a6958b 100644 --- a/src/slang-nodes/MappingKey.ts +++ b/src/slang-nodes/MappingKey.ts @@ -29,8 +29,7 @@ export class MappingKey implements SlangNode { metadata = updateMetadata(metadata, [this.keyType]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/MappingKeyType.ts b/src/slang-nodes/MappingKeyType.ts index 16a670bc4..2e4e7a3e1 100644 --- a/src/slang-nodes/MappingKeyType.ts +++ b/src/slang-nodes/MappingKeyType.ts @@ -32,8 +32,7 @@ export class MappingKeyType implements SlangNode { metadata = updateMetadata(metadata, [this.variant]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/MappingType.ts b/src/slang-nodes/MappingType.ts index 02cd805e2..0320c6553 100644 --- a/src/slang-nodes/MappingType.ts +++ b/src/slang-nodes/MappingType.ts @@ -27,8 +27,7 @@ export class MappingType implements SlangNode { metadata = updateMetadata(metadata, [this.keyType, this.valueType]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/MappingValue.ts b/src/slang-nodes/MappingValue.ts index 7cdad05bd..44d87eee4 100644 --- a/src/slang-nodes/MappingValue.ts +++ b/src/slang-nodes/MappingValue.ts @@ -30,8 +30,7 @@ export class MappingValue implements SlangNode { metadata = updateMetadata(metadata, [this.typeName]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/MemberAccessExpression.ts b/src/slang-nodes/MemberAccessExpression.ts index b55919b6c..4f0914c5c 100644 --- a/src/slang-nodes/MemberAccessExpression.ts +++ b/src/slang-nodes/MemberAccessExpression.ts @@ -133,8 +133,7 @@ export class MemberAccessExpression implements SlangNode { metadata = updateMetadata(metadata, [this.operand]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ModifierAttribute.ts b/src/slang-nodes/ModifierAttribute.ts index 4801a4e90..2a3c7a14f 100644 --- a/src/slang-nodes/ModifierAttribute.ts +++ b/src/slang-nodes/ModifierAttribute.ts @@ -28,8 +28,7 @@ export class ModifierAttribute implements SlangNode { typeof this.variant === 'string' ? [] : [this.variant] ); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ModifierAttributes.ts b/src/slang-nodes/ModifierAttributes.ts index f30b9d739..c6b78c701 100644 --- a/src/slang-nodes/ModifierAttributes.ts +++ b/src/slang-nodes/ModifierAttributes.ts @@ -26,8 +26,7 @@ export class ModifierAttributes implements SlangNode { metadata = updateMetadata(metadata, [this.items]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; this.items = this.items.sort(sortFunctionAttributes); } diff --git a/src/slang-nodes/ModifierDefinition.ts b/src/slang-nodes/ModifierDefinition.ts index fbbde68d1..1a0edee88 100644 --- a/src/slang-nodes/ModifierDefinition.ts +++ b/src/slang-nodes/ModifierDefinition.ts @@ -43,8 +43,7 @@ export class ModifierDefinition implements SlangNode { this.body ]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; if (!this.parameters) { const parametersOffset = diff --git a/src/slang-nodes/ModifierInvocation.ts b/src/slang-nodes/ModifierInvocation.ts index 6e5546041..c391ad56c 100644 --- a/src/slang-nodes/ModifierInvocation.ts +++ b/src/slang-nodes/ModifierInvocation.ts @@ -29,8 +29,7 @@ export class ModifierInvocation implements SlangNode { metadata = updateMetadata(metadata, [this.name, this.arguments]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } cleanModifierInvocationArguments(): void { diff --git a/src/slang-nodes/MultiLineComment.ts b/src/slang-nodes/MultiLineComment.ts index 40ec753f9..b5a8fc4ed 100644 --- a/src/slang-nodes/MultiLineComment.ts +++ b/src/slang-nodes/MultiLineComment.ts @@ -36,7 +36,7 @@ export class MultiLineComment implements SlangNode, BaseComment { this.value = ast.unparse(); - this.loc = metadata.loc; + [this.loc] = metadata; } print(): Doc { diff --git a/src/slang-nodes/MultiLineNatSpecComment.ts b/src/slang-nodes/MultiLineNatSpecComment.ts index 589fd0f5b..6acb78718 100644 --- a/src/slang-nodes/MultiLineNatSpecComment.ts +++ b/src/slang-nodes/MultiLineNatSpecComment.ts @@ -36,7 +36,7 @@ export class MultiLineNatSpecComment implements SlangNode, BaseComment { this.value = ast.unparse(); - this.loc = metadata.loc; + [this.loc] = metadata; } print(): Doc { diff --git a/src/slang-nodes/MultiplicativeExpression.ts b/src/slang-nodes/MultiplicativeExpression.ts index 87a2e76a5..73985569a 100644 --- a/src/slang-nodes/MultiplicativeExpression.ts +++ b/src/slang-nodes/MultiplicativeExpression.ts @@ -53,8 +53,7 @@ export class MultiplicativeExpression implements SlangNode { metadata = updateMetadata(metadata, [this.leftOperand, this.rightOperand]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; switch (this.operator) { case '*': diff --git a/src/slang-nodes/NamedArgument.ts b/src/slang-nodes/NamedArgument.ts index 2c0b8be87..420eee0c1 100644 --- a/src/slang-nodes/NamedArgument.ts +++ b/src/slang-nodes/NamedArgument.ts @@ -27,8 +27,7 @@ export class NamedArgument implements SlangNode { metadata = updateMetadata(metadata, [this.value]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/NamedArgumentGroup.ts b/src/slang-nodes/NamedArgumentGroup.ts index 9427bf1b0..2cf21519b 100644 --- a/src/slang-nodes/NamedArgumentGroup.ts +++ b/src/slang-nodes/NamedArgumentGroup.ts @@ -23,8 +23,7 @@ export class NamedArgumentGroup implements SlangNode { metadata = updateMetadata(metadata, [this.arguments]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/NamedArguments.ts b/src/slang-nodes/NamedArguments.ts index 085ad79db..7d696863d 100644 --- a/src/slang-nodes/NamedArguments.ts +++ b/src/slang-nodes/NamedArguments.ts @@ -27,8 +27,7 @@ export class NamedArguments implements SlangNode { metadata = updateMetadata(metadata, [this.items]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print( diff --git a/src/slang-nodes/NamedArgumentsDeclaration.ts b/src/slang-nodes/NamedArgumentsDeclaration.ts index 52d166959..451ce898a 100644 --- a/src/slang-nodes/NamedArgumentsDeclaration.ts +++ b/src/slang-nodes/NamedArgumentsDeclaration.ts @@ -28,8 +28,7 @@ export class NamedArgumentsDeclaration implements SlangNode { metadata = updateMetadata(metadata, [this.arguments]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/NamedImport.ts b/src/slang-nodes/NamedImport.ts index ddd5a82fa..5b20a1f89 100644 --- a/src/slang-nodes/NamedImport.ts +++ b/src/slang-nodes/NamedImport.ts @@ -27,8 +27,7 @@ export class NamedImport implements SlangNode { metadata = updateMetadata(metadata, [this.alias, this.path]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/NewExpression.ts b/src/slang-nodes/NewExpression.ts index cea08562d..7bc665137 100644 --- a/src/slang-nodes/NewExpression.ts +++ b/src/slang-nodes/NewExpression.ts @@ -23,8 +23,7 @@ export class NewExpression implements SlangNode { metadata = updateMetadata(metadata, [this.typeName]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/NumberUnit.ts b/src/slang-nodes/NumberUnit.ts index b35d41d2a..5483b1337 100644 --- a/src/slang-nodes/NumberUnit.ts +++ b/src/slang-nodes/NumberUnit.ts @@ -19,8 +19,7 @@ export class NumberUnit implements SlangNode { this.variant = ast.variant.unparse(); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(): Doc { diff --git a/src/slang-nodes/OrExpression.ts b/src/slang-nodes/OrExpression.ts index 39c269d41..c2ddd72a6 100644 --- a/src/slang-nodes/OrExpression.ts +++ b/src/slang-nodes/OrExpression.ts @@ -33,8 +33,7 @@ export class OrExpression implements SlangNode { metadata = updateMetadata(metadata, [this.leftOperand, this.rightOperand]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; this.leftOperand = tryToHug(this.leftOperand); this.rightOperand = tryToHug(this.rightOperand); diff --git a/src/slang-nodes/OverridePaths.ts b/src/slang-nodes/OverridePaths.ts index 17cf2b55c..116d84301 100644 --- a/src/slang-nodes/OverridePaths.ts +++ b/src/slang-nodes/OverridePaths.ts @@ -23,8 +23,7 @@ export class OverridePaths implements SlangNode { metadata = updateMetadata(metadata, [this.items]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/OverridePathsDeclaration.ts b/src/slang-nodes/OverridePathsDeclaration.ts index accf68693..863d87cf9 100644 --- a/src/slang-nodes/OverridePathsDeclaration.ts +++ b/src/slang-nodes/OverridePathsDeclaration.ts @@ -22,8 +22,7 @@ export class OverridePathsDeclaration implements SlangNode { metadata = updateMetadata(metadata, [this.paths]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/OverrideSpecifier.ts b/src/slang-nodes/OverrideSpecifier.ts index 8122eab0f..cdfedd160 100644 --- a/src/slang-nodes/OverrideSpecifier.ts +++ b/src/slang-nodes/OverrideSpecifier.ts @@ -24,8 +24,7 @@ export class OverrideSpecifier implements SlangNode { metadata = updateMetadata(metadata, [this.overridden]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/Parameter.ts b/src/slang-nodes/Parameter.ts index bf92ad293..7c1056911 100644 --- a/src/slang-nodes/Parameter.ts +++ b/src/slang-nodes/Parameter.ts @@ -39,8 +39,7 @@ export class Parameter implements SlangNode { metadata = updateMetadata(metadata, [this.typeName, this.storageLocation]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/Parameters.ts b/src/slang-nodes/Parameters.ts index 743e747db..0f77d42ee 100644 --- a/src/slang-nodes/Parameters.ts +++ b/src/slang-nodes/Parameters.ts @@ -26,8 +26,7 @@ export class Parameters implements SlangNode { metadata = updateMetadata(metadata, [this.items]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ParametersDeclaration.ts b/src/slang-nodes/ParametersDeclaration.ts index 80bf19cda..c7ec97eb5 100644 --- a/src/slang-nodes/ParametersDeclaration.ts +++ b/src/slang-nodes/ParametersDeclaration.ts @@ -23,8 +23,7 @@ export class ParametersDeclaration implements SlangNode { metadata = updateMetadata(metadata, [this.parameters]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/PathImport.ts b/src/slang-nodes/PathImport.ts index 493469f38..12e923ab9 100644 --- a/src/slang-nodes/PathImport.ts +++ b/src/slang-nodes/PathImport.ts @@ -29,8 +29,7 @@ export class PathImport implements SlangNode { metadata = updateMetadata(metadata, [this.path, this.alias]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/PositionalArguments.ts b/src/slang-nodes/PositionalArguments.ts index 2fde87591..5403e0108 100644 --- a/src/slang-nodes/PositionalArguments.ts +++ b/src/slang-nodes/PositionalArguments.ts @@ -26,8 +26,7 @@ export class PositionalArguments implements SlangNode { metadata = updateMetadata(metadata, [this.items]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/PositionalArgumentsDeclaration.ts b/src/slang-nodes/PositionalArgumentsDeclaration.ts index 497b6be8f..d02b93477 100644 --- a/src/slang-nodes/PositionalArgumentsDeclaration.ts +++ b/src/slang-nodes/PositionalArgumentsDeclaration.ts @@ -29,8 +29,7 @@ export class PositionalArgumentsDeclaration implements SlangNode { metadata = updateMetadata(metadata, [this.arguments]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; // We need to check the comments at this point because they will be removed // from this node into the root node. diff --git a/src/slang-nodes/PostfixExpression.ts b/src/slang-nodes/PostfixExpression.ts index ac3c2e5b3..b9a902285 100644 --- a/src/slang-nodes/PostfixExpression.ts +++ b/src/slang-nodes/PostfixExpression.ts @@ -26,8 +26,7 @@ export class PostfixExpression implements SlangNode { metadata = updateMetadata(metadata, [this.operand]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/Pragma.ts b/src/slang-nodes/Pragma.ts index 8c0e3ab15..e15aaeb45 100644 --- a/src/slang-nodes/Pragma.ts +++ b/src/slang-nodes/Pragma.ts @@ -40,8 +40,7 @@ export class Pragma implements SlangNode { metadata = updateMetadata(metadata, [this.variant]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/PragmaDirective.ts b/src/slang-nodes/PragmaDirective.ts index 72a9dc751..5b2d4f8cf 100644 --- a/src/slang-nodes/PragmaDirective.ts +++ b/src/slang-nodes/PragmaDirective.ts @@ -23,8 +23,7 @@ export class PragmaDirective implements SlangNode { metadata = updateMetadata(metadata, [this.pragma]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/PrefixExpression.ts b/src/slang-nodes/PrefixExpression.ts index dadf182f0..7904fd916 100644 --- a/src/slang-nodes/PrefixExpression.ts +++ b/src/slang-nodes/PrefixExpression.ts @@ -26,8 +26,7 @@ export class PrefixExpression implements SlangNode { metadata = updateMetadata(metadata, [this.operand]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; if (this.operator === 'delete') { this.operator = `${this.operator} `; diff --git a/src/slang-nodes/ReceiveFunctionAttribute.ts b/src/slang-nodes/ReceiveFunctionAttribute.ts index 869d575a2..588ee4824 100644 --- a/src/slang-nodes/ReceiveFunctionAttribute.ts +++ b/src/slang-nodes/ReceiveFunctionAttribute.ts @@ -48,8 +48,7 @@ export class ReceiveFunctionAttribute implements SlangNode { typeof this.variant === 'string' ? [] : [this.variant] ); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ReceiveFunctionAttributes.ts b/src/slang-nodes/ReceiveFunctionAttributes.ts index b2a6839ab..225da74f3 100644 --- a/src/slang-nodes/ReceiveFunctionAttributes.ts +++ b/src/slang-nodes/ReceiveFunctionAttributes.ts @@ -32,8 +32,7 @@ export class ReceiveFunctionAttributes implements SlangNode { metadata = updateMetadata(metadata, [this.items]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; this.items = this.items.sort(sortFunctionAttributes); } diff --git a/src/slang-nodes/ReceiveFunctionDefinition.ts b/src/slang-nodes/ReceiveFunctionDefinition.ts index bcd158749..3227b77c9 100644 --- a/src/slang-nodes/ReceiveFunctionDefinition.ts +++ b/src/slang-nodes/ReceiveFunctionDefinition.ts @@ -39,8 +39,7 @@ export class ReceiveFunctionDefinition implements SlangNode { this.body ]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; this.cleanModifierInvocationArguments(); } diff --git a/src/slang-nodes/ReturnStatement.ts b/src/slang-nodes/ReturnStatement.ts index 4e9a0433a..eb54b8df9 100644 --- a/src/slang-nodes/ReturnStatement.ts +++ b/src/slang-nodes/ReturnStatement.ts @@ -45,8 +45,7 @@ export class ReturnStatement implements SlangNode { metadata = updateMetadata(metadata, [this.expression]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print( diff --git a/src/slang-nodes/ReturnsDeclaration.ts b/src/slang-nodes/ReturnsDeclaration.ts index 44ed378b9..8f2bdec73 100644 --- a/src/slang-nodes/ReturnsDeclaration.ts +++ b/src/slang-nodes/ReturnsDeclaration.ts @@ -26,8 +26,7 @@ export class ReturnsDeclaration implements SlangNode { metadata = updateMetadata(metadata, [this.variables]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/RevertStatement.ts b/src/slang-nodes/RevertStatement.ts index 99d76b38b..7d24a5a4f 100644 --- a/src/slang-nodes/RevertStatement.ts +++ b/src/slang-nodes/RevertStatement.ts @@ -30,8 +30,7 @@ export class RevertStatement implements SlangNode { metadata = updateMetadata(metadata, [this.error, this.arguments]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ShiftExpression.ts b/src/slang-nodes/ShiftExpression.ts index 8f33c9d8d..6b15ceb01 100644 --- a/src/slang-nodes/ShiftExpression.ts +++ b/src/slang-nodes/ShiftExpression.ts @@ -55,8 +55,7 @@ export class ShiftExpression implements SlangNode { metadata = updateMetadata(metadata, [this.leftOperand, this.rightOperand]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; this.leftOperand = tryToHugLeftOperand(this.leftOperand); this.rightOperand = tryToHugRightOperand(this.rightOperand); diff --git a/src/slang-nodes/SimpleVersionLiteral.ts b/src/slang-nodes/SimpleVersionLiteral.ts index cff068b35..2cddd3bc8 100644 --- a/src/slang-nodes/SimpleVersionLiteral.ts +++ b/src/slang-nodes/SimpleVersionLiteral.ts @@ -19,8 +19,7 @@ export class SimpleVersionLiteral implements SlangNode { this.items = ast.items.map((item) => item.unparse()); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(): Doc { diff --git a/src/slang-nodes/SingleLineComment.ts b/src/slang-nodes/SingleLineComment.ts index 01d0ba536..98f692c3a 100644 --- a/src/slang-nodes/SingleLineComment.ts +++ b/src/slang-nodes/SingleLineComment.ts @@ -31,7 +31,7 @@ export class SingleLineComment implements SlangNode, BaseComment { this.value = ast.unparse(); - this.loc = metadata.loc; + [this.loc] = metadata; } print(): Doc { diff --git a/src/slang-nodes/SingleLineNatSpecComment.ts b/src/slang-nodes/SingleLineNatSpecComment.ts index 154bdaadf..af871979e 100644 --- a/src/slang-nodes/SingleLineNatSpecComment.ts +++ b/src/slang-nodes/SingleLineNatSpecComment.ts @@ -31,7 +31,7 @@ export class SingleLineNatSpecComment implements SlangNode, BaseComment { this.value = ast.unparse(); - this.loc = metadata.loc; + [this.loc] = metadata; } print(): Doc { diff --git a/src/slang-nodes/SourceUnit.ts b/src/slang-nodes/SourceUnit.ts index 70bfc900b..fc6b6d970 100644 --- a/src/slang-nodes/SourceUnit.ts +++ b/src/slang-nodes/SourceUnit.ts @@ -5,7 +5,7 @@ import { SourceUnitMembers } from './SourceUnitMembers.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; -import type { AstNode } from './types.d.ts'; +import type { AstNode, Comment } from './types.d.ts'; import type { PrintFunction, SlangNode } from '../types.d.ts'; const { line } = doc.builders; @@ -13,7 +13,7 @@ const { line } = doc.builders; export class SourceUnit implements SlangNode { readonly kind = NonterminalKind.SourceUnit; - comments; + comments: Comment[]; loc; @@ -26,10 +26,10 @@ export class SourceUnit implements SlangNode { metadata = updateMetadata(metadata, [this.members]); + [this.loc, this.comments] = metadata; // Because of comments being extracted like a russian doll, the order needs // to be fixed at the end. - this.comments = metadata.comments.sort((a, b) => a.loc.start - b.loc.start); - this.loc = metadata.loc; + this.comments = this.comments.sort((a, b) => a.loc.start - b.loc.start); } print( diff --git a/src/slang-nodes/SourceUnitMember.ts b/src/slang-nodes/SourceUnitMember.ts index 928c6b356..3e1336ce5 100644 --- a/src/slang-nodes/SourceUnitMember.ts +++ b/src/slang-nodes/SourceUnitMember.ts @@ -125,8 +125,7 @@ export class SourceUnitMember implements SlangNode { metadata = updateMetadata(metadata, [this.variant]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/SourceUnitMembers.ts b/src/slang-nodes/SourceUnitMembers.ts index 687cdaef3..cb8075086 100644 --- a/src/slang-nodes/SourceUnitMembers.ts +++ b/src/slang-nodes/SourceUnitMembers.ts @@ -24,8 +24,7 @@ export class SourceUnitMembers implements SlangNode { metadata = updateMetadata(metadata, [this.items]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print( diff --git a/src/slang-nodes/StateVariableAttribute.ts b/src/slang-nodes/StateVariableAttribute.ts index 7eef02626..cdba8feb9 100644 --- a/src/slang-nodes/StateVariableAttribute.ts +++ b/src/slang-nodes/StateVariableAttribute.ts @@ -28,8 +28,7 @@ export class StateVariableAttribute implements SlangNode { typeof this.variant === 'string' ? [] : [this.variant] ); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/StateVariableAttributes.ts b/src/slang-nodes/StateVariableAttributes.ts index 0b46a6f57..d32f05dad 100644 --- a/src/slang-nodes/StateVariableAttributes.ts +++ b/src/slang-nodes/StateVariableAttributes.ts @@ -26,8 +26,7 @@ export class StateVariableAttributes implements SlangNode { metadata = updateMetadata(metadata, [this.items]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; this.items = this.items.sort(sortFunctionAttributes); } diff --git a/src/slang-nodes/StateVariableDefinition.ts b/src/slang-nodes/StateVariableDefinition.ts index 7db4c2c3c..241d91492 100644 --- a/src/slang-nodes/StateVariableDefinition.ts +++ b/src/slang-nodes/StateVariableDefinition.ts @@ -47,8 +47,7 @@ export class StateVariableDefinition implements SlangNode { this.value ]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/StateVariableDefinitionValue.ts b/src/slang-nodes/StateVariableDefinitionValue.ts index 3d161d140..f651385ec 100644 --- a/src/slang-nodes/StateVariableDefinitionValue.ts +++ b/src/slang-nodes/StateVariableDefinitionValue.ts @@ -29,8 +29,7 @@ export class StateVariableDefinitionValue implements SlangNode { metadata = updateMetadata(metadata, [this.value]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print( diff --git a/src/slang-nodes/Statement.ts b/src/slang-nodes/Statement.ts index b49f762cd..c14c458f5 100644 --- a/src/slang-nodes/Statement.ts +++ b/src/slang-nodes/Statement.ts @@ -148,8 +148,7 @@ export class Statement implements SlangNode { metadata = updateMetadata(metadata, [this.variant]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/Statements.ts b/src/slang-nodes/Statements.ts index c4d4cfea8..c2bcf1091 100644 --- a/src/slang-nodes/Statements.ts +++ b/src/slang-nodes/Statements.ts @@ -29,8 +29,7 @@ export class Statements implements SlangNode { metadata = updateMetadata(metadata, [this.items]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print( diff --git a/src/slang-nodes/StorageLayoutSpecifier.ts b/src/slang-nodes/StorageLayoutSpecifier.ts index de287758f..6583925e6 100644 --- a/src/slang-nodes/StorageLayoutSpecifier.ts +++ b/src/slang-nodes/StorageLayoutSpecifier.ts @@ -30,8 +30,7 @@ export class StorageLayoutSpecifier implements SlangNode { metadata = updateMetadata(metadata, [this.expression]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/StorageLocation.ts b/src/slang-nodes/StorageLocation.ts index 89b97f2a3..354aea349 100644 --- a/src/slang-nodes/StorageLocation.ts +++ b/src/slang-nodes/StorageLocation.ts @@ -19,8 +19,7 @@ export class StorageLocation implements SlangNode { this.variant = ast.variant.unparse(); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(): Doc { diff --git a/src/slang-nodes/StringExpression.ts b/src/slang-nodes/StringExpression.ts index 7b283498a..d1c1b0ced 100644 --- a/src/slang-nodes/StringExpression.ts +++ b/src/slang-nodes/StringExpression.ts @@ -65,8 +65,7 @@ export class StringExpression implements SlangNode { metadata = updateMetadata(metadata, [this.variant]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/StringLiteral.ts b/src/slang-nodes/StringLiteral.ts index c7bf84476..61c3a6547 100644 --- a/src/slang-nodes/StringLiteral.ts +++ b/src/slang-nodes/StringLiteral.ts @@ -21,8 +21,7 @@ export class StringLiteral implements SlangNode { this.variant = ast.variant.unparse(); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; this.variant = printString(this.variant.slice(1, -1), options); } diff --git a/src/slang-nodes/StringLiterals.ts b/src/slang-nodes/StringLiterals.ts index afca5d826..01a051e62 100644 --- a/src/slang-nodes/StringLiterals.ts +++ b/src/slang-nodes/StringLiterals.ts @@ -26,8 +26,7 @@ export class StringLiterals implements SlangNode { metadata = updateMetadata(metadata, [this.items]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/StructDefinition.ts b/src/slang-nodes/StructDefinition.ts index 341393faf..f235edc8b 100644 --- a/src/slang-nodes/StructDefinition.ts +++ b/src/slang-nodes/StructDefinition.ts @@ -27,8 +27,7 @@ export class StructDefinition implements SlangNode { metadata = updateMetadata(metadata, [this.members]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/StructMember.ts b/src/slang-nodes/StructMember.ts index 470fa0ae8..ebb2980fe 100644 --- a/src/slang-nodes/StructMember.ts +++ b/src/slang-nodes/StructMember.ts @@ -27,8 +27,7 @@ export class StructMember implements SlangNode { metadata = updateMetadata(metadata, [this.typeName]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/StructMembers.ts b/src/slang-nodes/StructMembers.ts index 7fd975619..d3fc6ca68 100644 --- a/src/slang-nodes/StructMembers.ts +++ b/src/slang-nodes/StructMembers.ts @@ -27,8 +27,7 @@ export class StructMembers implements SlangNode { metadata = updateMetadata(metadata, [this.items]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ThrowStatement.ts b/src/slang-nodes/ThrowStatement.ts index 155f87b6d..25b7dfdef 100644 --- a/src/slang-nodes/ThrowStatement.ts +++ b/src/slang-nodes/ThrowStatement.ts @@ -15,8 +15,7 @@ export class ThrowStatement implements SlangNode { constructor(ast: ast.ThrowStatement) { const metadata = getNodeMetadata(ast); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(): Doc { diff --git a/src/slang-nodes/TryStatement.ts b/src/slang-nodes/TryStatement.ts index c714e6915..ee3868373 100644 --- a/src/slang-nodes/TryStatement.ts +++ b/src/slang-nodes/TryStatement.ts @@ -47,8 +47,7 @@ export class TryStatement implements SlangNode { this.catchClauses ]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/TupleDeconstructionElement.ts b/src/slang-nodes/TupleDeconstructionElement.ts index d294ef837..79108e1e1 100644 --- a/src/slang-nodes/TupleDeconstructionElement.ts +++ b/src/slang-nodes/TupleDeconstructionElement.ts @@ -28,8 +28,7 @@ export class TupleDeconstructionElement implements SlangNode { metadata = updateMetadata(metadata, [this.member]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/TupleDeconstructionElements.ts b/src/slang-nodes/TupleDeconstructionElements.ts index 113a6908a..a80f553d0 100644 --- a/src/slang-nodes/TupleDeconstructionElements.ts +++ b/src/slang-nodes/TupleDeconstructionElements.ts @@ -29,8 +29,7 @@ export class TupleDeconstructionElements implements SlangNode { metadata = updateMetadata(metadata, [this.items]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/TupleDeconstructionStatement.ts b/src/slang-nodes/TupleDeconstructionStatement.ts index 5c15ef3f4..b0e69765b 100644 --- a/src/slang-nodes/TupleDeconstructionStatement.ts +++ b/src/slang-nodes/TupleDeconstructionStatement.ts @@ -36,8 +36,7 @@ export class TupleDeconstructionStatement implements SlangNode { metadata = updateMetadata(metadata, [this.elements, this.expression]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print( diff --git a/src/slang-nodes/TupleExpression.ts b/src/slang-nodes/TupleExpression.ts index 89bd6a396..29cc559f7 100644 --- a/src/slang-nodes/TupleExpression.ts +++ b/src/slang-nodes/TupleExpression.ts @@ -23,8 +23,7 @@ export class TupleExpression implements SlangNode { metadata = updateMetadata(metadata, [this.items]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/TupleMember.ts b/src/slang-nodes/TupleMember.ts index 8a761d01d..686017c4c 100644 --- a/src/slang-nodes/TupleMember.ts +++ b/src/slang-nodes/TupleMember.ts @@ -38,8 +38,7 @@ export class TupleMember implements SlangNode { metadata = updateMetadata(metadata, [this.variant]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/TupleValue.ts b/src/slang-nodes/TupleValue.ts index 70a5482fc..a239bb828 100644 --- a/src/slang-nodes/TupleValue.ts +++ b/src/slang-nodes/TupleValue.ts @@ -25,8 +25,7 @@ export class TupleValue implements SlangNode { metadata = updateMetadata(metadata, [this.expression]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/TupleValues.ts b/src/slang-nodes/TupleValues.ts index ba0e73db6..eed1a93a7 100644 --- a/src/slang-nodes/TupleValues.ts +++ b/src/slang-nodes/TupleValues.ts @@ -26,8 +26,7 @@ export class TupleValues implements SlangNode { metadata = updateMetadata(metadata, [this.items]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } getSingleExpression(): Expression | undefined { diff --git a/src/slang-nodes/TypeExpression.ts b/src/slang-nodes/TypeExpression.ts index dc180f338..2ed4d4532 100644 --- a/src/slang-nodes/TypeExpression.ts +++ b/src/slang-nodes/TypeExpression.ts @@ -23,8 +23,7 @@ export class TypeExpression implements SlangNode { metadata = updateMetadata(metadata, [this.typeName]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/TypeName.ts b/src/slang-nodes/TypeName.ts index 13f1363b1..14003cffd 100644 --- a/src/slang-nodes/TypeName.ts +++ b/src/slang-nodes/TypeName.ts @@ -56,8 +56,7 @@ export class TypeName implements SlangNode { metadata = updateMetadata(metadata, [this.variant]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/TypedTupleMember.ts b/src/slang-nodes/TypedTupleMember.ts index bc075a541..a525e8456 100644 --- a/src/slang-nodes/TypedTupleMember.ts +++ b/src/slang-nodes/TypedTupleMember.ts @@ -34,8 +34,7 @@ export class TypedTupleMember implements SlangNode { metadata = updateMetadata(metadata, [this.typeName, this.storageLocation]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/UncheckedBlock.ts b/src/slang-nodes/UncheckedBlock.ts index e1340278e..9d8bcf0dc 100644 --- a/src/slang-nodes/UncheckedBlock.ts +++ b/src/slang-nodes/UncheckedBlock.ts @@ -23,8 +23,7 @@ export class UncheckedBlock implements SlangNode { metadata = updateMetadata(metadata, [this.block]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/UnicodeStringLiteral.ts b/src/slang-nodes/UnicodeStringLiteral.ts index d10bafb5e..d21766f8b 100644 --- a/src/slang-nodes/UnicodeStringLiteral.ts +++ b/src/slang-nodes/UnicodeStringLiteral.ts @@ -21,8 +21,7 @@ export class UnicodeStringLiteral implements SlangNode { this.variant = ast.variant.unparse(); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; this.variant = `unicode${printString(this.variant.slice(8, -1), options)}`; } diff --git a/src/slang-nodes/UnicodeStringLiterals.ts b/src/slang-nodes/UnicodeStringLiterals.ts index 5436b6cf8..86aa2eecf 100644 --- a/src/slang-nodes/UnicodeStringLiterals.ts +++ b/src/slang-nodes/UnicodeStringLiterals.ts @@ -28,8 +28,7 @@ export class UnicodeStringLiterals implements SlangNode { metadata = updateMetadata(metadata, [this.items]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/UnnamedFunctionAttribute.ts b/src/slang-nodes/UnnamedFunctionAttribute.ts index 5f2b57b12..e9776d812 100644 --- a/src/slang-nodes/UnnamedFunctionAttribute.ts +++ b/src/slang-nodes/UnnamedFunctionAttribute.ts @@ -32,8 +32,7 @@ export class UnnamedFunctionAttribute implements SlangNode { typeof this.variant === 'string' ? [] : [this.variant] ); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/UnnamedFunctionAttributes.ts b/src/slang-nodes/UnnamedFunctionAttributes.ts index 2d4f8b79e..2b777c029 100644 --- a/src/slang-nodes/UnnamedFunctionAttributes.ts +++ b/src/slang-nodes/UnnamedFunctionAttributes.ts @@ -32,8 +32,7 @@ export class UnnamedFunctionAttributes implements SlangNode { metadata = updateMetadata(metadata, [this.items]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; this.items = this.items.sort(sortFunctionAttributes); } diff --git a/src/slang-nodes/UnnamedFunctionDefinition.ts b/src/slang-nodes/UnnamedFunctionDefinition.ts index 89caaadfb..1f90d8c71 100644 --- a/src/slang-nodes/UnnamedFunctionDefinition.ts +++ b/src/slang-nodes/UnnamedFunctionDefinition.ts @@ -39,8 +39,7 @@ export class UnnamedFunctionDefinition implements SlangNode { this.body ]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; this.cleanModifierInvocationArguments(); } diff --git a/src/slang-nodes/UntypedTupleMember.ts b/src/slang-nodes/UntypedTupleMember.ts index 9dcf661ed..2e9f75476 100644 --- a/src/slang-nodes/UntypedTupleMember.ts +++ b/src/slang-nodes/UntypedTupleMember.ts @@ -29,8 +29,7 @@ export class UntypedTupleMember implements SlangNode { metadata = updateMetadata(metadata, [this.storageLocation]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/UserDefinedValueTypeDefinition.ts b/src/slang-nodes/UserDefinedValueTypeDefinition.ts index 9561d87ff..8da792ee8 100644 --- a/src/slang-nodes/UserDefinedValueTypeDefinition.ts +++ b/src/slang-nodes/UserDefinedValueTypeDefinition.ts @@ -26,8 +26,7 @@ export class UserDefinedValueTypeDefinition implements SlangNode { metadata = updateMetadata(metadata, [this.valueType]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print( diff --git a/src/slang-nodes/UsingAlias.ts b/src/slang-nodes/UsingAlias.ts index d8c4d14b6..6b03da3da 100644 --- a/src/slang-nodes/UsingAlias.ts +++ b/src/slang-nodes/UsingAlias.ts @@ -22,8 +22,7 @@ export class UsingAlias implements SlangNode { metadata = updateMetadata(metadata, [this.operator]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/UsingClause.ts b/src/slang-nodes/UsingClause.ts index 6e8ea43ed..a98e4b7f2 100644 --- a/src/slang-nodes/UsingClause.ts +++ b/src/slang-nodes/UsingClause.ts @@ -34,8 +34,7 @@ export class UsingClause implements SlangNode { metadata = updateMetadata(metadata, [this.variant]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/UsingDeconstruction.ts b/src/slang-nodes/UsingDeconstruction.ts index 250bcc443..3aa51b8fc 100644 --- a/src/slang-nodes/UsingDeconstruction.ts +++ b/src/slang-nodes/UsingDeconstruction.ts @@ -22,8 +22,7 @@ export class UsingDeconstruction implements SlangNode { metadata = updateMetadata(metadata, [this.symbols]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/UsingDeconstructionSymbol.ts b/src/slang-nodes/UsingDeconstructionSymbol.ts index e14d1d9e6..9fd1b5303 100644 --- a/src/slang-nodes/UsingDeconstructionSymbol.ts +++ b/src/slang-nodes/UsingDeconstructionSymbol.ts @@ -28,8 +28,7 @@ export class UsingDeconstructionSymbol implements SlangNode { metadata = updateMetadata(metadata, [this.name, this.alias]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/UsingDeconstructionSymbols.ts b/src/slang-nodes/UsingDeconstructionSymbols.ts index a89f7fe8c..ea5f9b7fb 100644 --- a/src/slang-nodes/UsingDeconstructionSymbols.ts +++ b/src/slang-nodes/UsingDeconstructionSymbols.ts @@ -27,8 +27,7 @@ export class UsingDeconstructionSymbols implements SlangNode { metadata = updateMetadata(metadata, [this.items]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print( diff --git a/src/slang-nodes/UsingDirective.ts b/src/slang-nodes/UsingDirective.ts index 45481f747..5b7e9e287 100644 --- a/src/slang-nodes/UsingDirective.ts +++ b/src/slang-nodes/UsingDirective.ts @@ -31,8 +31,7 @@ export class UsingDirective implements SlangNode { metadata = updateMetadata(metadata, [this.clause, this.target]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/UsingOperator.ts b/src/slang-nodes/UsingOperator.ts index 3fe61a41b..07f8f8cb3 100644 --- a/src/slang-nodes/UsingOperator.ts +++ b/src/slang-nodes/UsingOperator.ts @@ -19,8 +19,7 @@ export class UsingOperator implements SlangNode { this.variant = ast.variant.unparse(); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(): Doc { diff --git a/src/slang-nodes/UsingTarget.ts b/src/slang-nodes/UsingTarget.ts index 5629960a7..4da95b10c 100644 --- a/src/slang-nodes/UsingTarget.ts +++ b/src/slang-nodes/UsingTarget.ts @@ -29,8 +29,7 @@ export class UsingTarget implements SlangNode { typeof this.variant === 'string' ? [] : [this.variant] ); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/VariableDeclarationStatement.ts b/src/slang-nodes/VariableDeclarationStatement.ts index 842932609..ff5ba850e 100644 --- a/src/slang-nodes/VariableDeclarationStatement.ts +++ b/src/slang-nodes/VariableDeclarationStatement.ts @@ -49,8 +49,7 @@ export class VariableDeclarationStatement implements SlangNode { this.value ]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print( diff --git a/src/slang-nodes/VariableDeclarationType.ts b/src/slang-nodes/VariableDeclarationType.ts index 5475295d1..7be5a37d4 100644 --- a/src/slang-nodes/VariableDeclarationType.ts +++ b/src/slang-nodes/VariableDeclarationType.ts @@ -32,8 +32,7 @@ export class VariableDeclarationType implements SlangNode { typeof this.variant === 'string' ? [] : [this.variant] ); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/VariableDeclarationValue.ts b/src/slang-nodes/VariableDeclarationValue.ts index 4df39346c..8bc117fe1 100644 --- a/src/slang-nodes/VariableDeclarationValue.ts +++ b/src/slang-nodes/VariableDeclarationValue.ts @@ -26,8 +26,7 @@ export class VariableDeclarationValue implements SlangNode { metadata = updateMetadata(metadata, [this.expression]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/VersionExpression.ts b/src/slang-nodes/VersionExpression.ts index 57c622096..811e73d95 100644 --- a/src/slang-nodes/VersionExpression.ts +++ b/src/slang-nodes/VersionExpression.ts @@ -32,8 +32,7 @@ export class VersionExpression implements SlangNode { metadata = updateMetadata(metadata, [this.variant]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/VersionExpressionSet.ts b/src/slang-nodes/VersionExpressionSet.ts index 8f9e71572..47b931e22 100644 --- a/src/slang-nodes/VersionExpressionSet.ts +++ b/src/slang-nodes/VersionExpressionSet.ts @@ -25,8 +25,7 @@ export class VersionExpressionSet implements SlangNode { metadata = updateMetadata(metadata, [this.items]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/VersionExpressionSets.ts b/src/slang-nodes/VersionExpressionSets.ts index fb16282d0..414d01f9f 100644 --- a/src/slang-nodes/VersionExpressionSets.ts +++ b/src/slang-nodes/VersionExpressionSets.ts @@ -25,8 +25,7 @@ export class VersionExpressionSets implements SlangNode { metadata = updateMetadata(metadata, [this.items]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/VersionLiteral.ts b/src/slang-nodes/VersionLiteral.ts index 2b56a0e71..2722fc1f2 100644 --- a/src/slang-nodes/VersionLiteral.ts +++ b/src/slang-nodes/VersionLiteral.ts @@ -28,8 +28,7 @@ export class VersionLiteral implements SlangNode { typeof this.variant === 'string' ? [] : [this.variant] ); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/VersionOperator.ts b/src/slang-nodes/VersionOperator.ts index 166a84fd3..935a2202c 100644 --- a/src/slang-nodes/VersionOperator.ts +++ b/src/slang-nodes/VersionOperator.ts @@ -19,8 +19,7 @@ export class VersionOperator implements SlangNode { this.variant = ast.variant.unparse(); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(): Doc { diff --git a/src/slang-nodes/VersionPragma.ts b/src/slang-nodes/VersionPragma.ts index d84a1aa5b..b17d4a3bd 100644 --- a/src/slang-nodes/VersionPragma.ts +++ b/src/slang-nodes/VersionPragma.ts @@ -22,8 +22,7 @@ export class VersionPragma implements SlangNode { metadata = updateMetadata(metadata, [this.sets]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/VersionRange.ts b/src/slang-nodes/VersionRange.ts index 5920b123a..46691952f 100644 --- a/src/slang-nodes/VersionRange.ts +++ b/src/slang-nodes/VersionRange.ts @@ -25,8 +25,7 @@ export class VersionRange implements SlangNode { metadata = updateMetadata(metadata, [this.start, this.end]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/VersionTerm.ts b/src/slang-nodes/VersionTerm.ts index 3208cb400..f5bba351a 100644 --- a/src/slang-nodes/VersionTerm.ts +++ b/src/slang-nodes/VersionTerm.ts @@ -28,8 +28,7 @@ export class VersionTerm implements SlangNode { metadata = updateMetadata(metadata, [this.operator, this.literal]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/WhileStatement.ts b/src/slang-nodes/WhileStatement.ts index 28c061389..8c9efa312 100644 --- a/src/slang-nodes/WhileStatement.ts +++ b/src/slang-nodes/WhileStatement.ts @@ -31,8 +31,7 @@ export class WhileStatement implements SlangNode { metadata = updateMetadata(metadata, [this.condition, this.body]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulArguments.ts b/src/slang-nodes/YulArguments.ts index 82a61a94c..c31d8a5fb 100644 --- a/src/slang-nodes/YulArguments.ts +++ b/src/slang-nodes/YulArguments.ts @@ -24,8 +24,7 @@ export class YulArguments implements SlangNode { metadata = updateMetadata(metadata, [this.items]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulAssignmentOperator.ts b/src/slang-nodes/YulAssignmentOperator.ts index adbe53147..77698bfb6 100644 --- a/src/slang-nodes/YulAssignmentOperator.ts +++ b/src/slang-nodes/YulAssignmentOperator.ts @@ -28,8 +28,7 @@ export class YulAssignmentOperator implements SlangNode { typeof this.variant === 'string' ? [] : [this.variant] ); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulBlock.ts b/src/slang-nodes/YulBlock.ts index 89947e7a4..842f57493 100644 --- a/src/slang-nodes/YulBlock.ts +++ b/src/slang-nodes/YulBlock.ts @@ -23,8 +23,7 @@ export class YulBlock implements SlangNode { metadata = updateMetadata(metadata, [this.statements]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulBreakStatement.ts b/src/slang-nodes/YulBreakStatement.ts index 36b393efd..61626a2ee 100644 --- a/src/slang-nodes/YulBreakStatement.ts +++ b/src/slang-nodes/YulBreakStatement.ts @@ -15,8 +15,7 @@ export class YulBreakStatement implements SlangNode { constructor(ast: ast.YulBreakStatement) { const metadata = getNodeMetadata(ast); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(): Doc { diff --git a/src/slang-nodes/YulColonAndEqual.ts b/src/slang-nodes/YulColonAndEqual.ts index df6109356..33e845ade 100644 --- a/src/slang-nodes/YulColonAndEqual.ts +++ b/src/slang-nodes/YulColonAndEqual.ts @@ -15,8 +15,7 @@ export class YulColonAndEqual implements SlangNode { constructor(ast: ast.YulColonAndEqual) { const metadata = getNodeMetadata(ast); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(): Doc { diff --git a/src/slang-nodes/YulContinueStatement.ts b/src/slang-nodes/YulContinueStatement.ts index 3ff4bae62..3121eef3b 100644 --- a/src/slang-nodes/YulContinueStatement.ts +++ b/src/slang-nodes/YulContinueStatement.ts @@ -15,8 +15,7 @@ export class YulContinueStatement implements SlangNode { constructor(ast: ast.YulContinueStatement) { const metadata = getNodeMetadata(ast); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(): Doc { diff --git a/src/slang-nodes/YulDefaultCase.ts b/src/slang-nodes/YulDefaultCase.ts index 06e7280f8..c40711058 100644 --- a/src/slang-nodes/YulDefaultCase.ts +++ b/src/slang-nodes/YulDefaultCase.ts @@ -23,8 +23,7 @@ export class YulDefaultCase implements SlangNode { metadata = updateMetadata(metadata, [this.body]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulEqualAndColon.ts b/src/slang-nodes/YulEqualAndColon.ts index a1a1ed2de..7f0caa2cc 100644 --- a/src/slang-nodes/YulEqualAndColon.ts +++ b/src/slang-nodes/YulEqualAndColon.ts @@ -15,8 +15,7 @@ export class YulEqualAndColon implements SlangNode { constructor(ast: ast.YulEqualAndColon) { const metadata = getNodeMetadata(ast); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(): Doc { diff --git a/src/slang-nodes/YulExpression.ts b/src/slang-nodes/YulExpression.ts index 4b812654d..6a613edb1 100644 --- a/src/slang-nodes/YulExpression.ts +++ b/src/slang-nodes/YulExpression.ts @@ -40,8 +40,7 @@ export class YulExpression implements SlangNode { metadata = updateMetadata(metadata, [this.variant]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulForStatement.ts b/src/slang-nodes/YulForStatement.ts index eb4da4547..20d6cb453 100644 --- a/src/slang-nodes/YulForStatement.ts +++ b/src/slang-nodes/YulForStatement.ts @@ -41,8 +41,7 @@ export class YulForStatement implements SlangNode { this.body ]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulFunctionCallExpression.ts b/src/slang-nodes/YulFunctionCallExpression.ts index 14db27a8c..92de20153 100644 --- a/src/slang-nodes/YulFunctionCallExpression.ts +++ b/src/slang-nodes/YulFunctionCallExpression.ts @@ -30,8 +30,7 @@ export class YulFunctionCallExpression implements SlangNode { metadata = updateMetadata(metadata, [this.operand, this.arguments]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulFunctionDefinition.ts b/src/slang-nodes/YulFunctionDefinition.ts index f01e5f7f7..70ae595f3 100644 --- a/src/slang-nodes/YulFunctionDefinition.ts +++ b/src/slang-nodes/YulFunctionDefinition.ts @@ -41,8 +41,7 @@ export class YulFunctionDefinition implements SlangNode { this.body ]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulIdentifier.ts b/src/slang-nodes/YulIdentifier.ts index 0011831a3..842346e39 100644 --- a/src/slang-nodes/YulIdentifier.ts +++ b/src/slang-nodes/YulIdentifier.ts @@ -19,8 +19,7 @@ export class YulIdentifier implements SlangNode { this.value = ast.unparse(); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(): Doc { diff --git a/src/slang-nodes/YulIfStatement.ts b/src/slang-nodes/YulIfStatement.ts index 791281f5a..36f33b7b4 100644 --- a/src/slang-nodes/YulIfStatement.ts +++ b/src/slang-nodes/YulIfStatement.ts @@ -27,8 +27,7 @@ export class YulIfStatement implements SlangNode { metadata = updateMetadata(metadata, [this.condition, this.body]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulLabel.ts b/src/slang-nodes/YulLabel.ts index 3abd04a17..94036bfa6 100644 --- a/src/slang-nodes/YulLabel.ts +++ b/src/slang-nodes/YulLabel.ts @@ -23,8 +23,7 @@ export class YulLabel implements SlangNode { this.label = new YulIdentifier(ast.label); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulLeaveStatement.ts b/src/slang-nodes/YulLeaveStatement.ts index 9d0c70b03..482407665 100644 --- a/src/slang-nodes/YulLeaveStatement.ts +++ b/src/slang-nodes/YulLeaveStatement.ts @@ -15,8 +15,7 @@ export class YulLeaveStatement implements SlangNode { constructor(ast: ast.YulLeaveStatement) { const metadata = getNodeMetadata(ast); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(): Doc { diff --git a/src/slang-nodes/YulLiteral.ts b/src/slang-nodes/YulLiteral.ts index 15afb5af4..c7b174fcb 100644 --- a/src/slang-nodes/YulLiteral.ts +++ b/src/slang-nodes/YulLiteral.ts @@ -46,8 +46,7 @@ export class YulLiteral implements SlangNode { typeof this.variant === 'string' ? [] : [this.variant] ); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulParameters.ts b/src/slang-nodes/YulParameters.ts index 703950f32..c21baaa60 100644 --- a/src/slang-nodes/YulParameters.ts +++ b/src/slang-nodes/YulParameters.ts @@ -21,8 +21,7 @@ export class YulParameters implements SlangNode { this.items = ast.items.map((item) => new YulIdentifier(item)); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulParametersDeclaration.ts b/src/slang-nodes/YulParametersDeclaration.ts index d52920a03..d5870fa31 100644 --- a/src/slang-nodes/YulParametersDeclaration.ts +++ b/src/slang-nodes/YulParametersDeclaration.ts @@ -22,8 +22,7 @@ export class YulParametersDeclaration implements SlangNode { metadata = updateMetadata(metadata, [this.parameters]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulPath.ts b/src/slang-nodes/YulPath.ts index a24cb49fb..f2c9cb135 100644 --- a/src/slang-nodes/YulPath.ts +++ b/src/slang-nodes/YulPath.ts @@ -23,8 +23,7 @@ export class YulPath implements SlangNode { this.items = ast.items.map((item) => new YulIdentifier(item)); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulPaths.ts b/src/slang-nodes/YulPaths.ts index 50d463039..421beef6d 100644 --- a/src/slang-nodes/YulPaths.ts +++ b/src/slang-nodes/YulPaths.ts @@ -25,8 +25,7 @@ export class YulPaths implements SlangNode { metadata = updateMetadata(metadata, [this.items]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulReturnsDeclaration.ts b/src/slang-nodes/YulReturnsDeclaration.ts index 1815c3895..d513a0bfd 100644 --- a/src/slang-nodes/YulReturnsDeclaration.ts +++ b/src/slang-nodes/YulReturnsDeclaration.ts @@ -26,8 +26,7 @@ export class YulReturnsDeclaration implements SlangNode { metadata = updateMetadata(metadata, [this.variables]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulStackAssignmentOperator.ts b/src/slang-nodes/YulStackAssignmentOperator.ts index 68fedcca1..90bf602ed 100644 --- a/src/slang-nodes/YulStackAssignmentOperator.ts +++ b/src/slang-nodes/YulStackAssignmentOperator.ts @@ -28,8 +28,7 @@ export class YulStackAssignmentOperator implements SlangNode { typeof this.variant === 'string' ? [] : [this.variant] ); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulStackAssignmentStatement.ts b/src/slang-nodes/YulStackAssignmentStatement.ts index c1da83c53..3388486c8 100644 --- a/src/slang-nodes/YulStackAssignmentStatement.ts +++ b/src/slang-nodes/YulStackAssignmentStatement.ts @@ -30,8 +30,7 @@ export class YulStackAssignmentStatement implements SlangNode { metadata = updateMetadata(metadata, [this.assignment]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulStatement.ts b/src/slang-nodes/YulStatement.ts index 054a71046..f4426ec79 100644 --- a/src/slang-nodes/YulStatement.ts +++ b/src/slang-nodes/YulStatement.ts @@ -119,8 +119,7 @@ export class YulStatement implements SlangNode { metadata = updateMetadata(metadata, [this.variant]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulStatements.ts b/src/slang-nodes/YulStatements.ts index 082a36008..2caa2b77c 100644 --- a/src/slang-nodes/YulStatements.ts +++ b/src/slang-nodes/YulStatements.ts @@ -29,8 +29,7 @@ export class YulStatements implements SlangNode { metadata = updateMetadata(metadata, [this.items]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print( diff --git a/src/slang-nodes/YulSwitchCase.ts b/src/slang-nodes/YulSwitchCase.ts index 30096cb70..0c5d7be8b 100644 --- a/src/slang-nodes/YulSwitchCase.ts +++ b/src/slang-nodes/YulSwitchCase.ts @@ -39,8 +39,7 @@ export class YulSwitchCase implements SlangNode { metadata = updateMetadata(metadata, [this.variant]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulSwitchCases.ts b/src/slang-nodes/YulSwitchCases.ts index 44dffb224..8d209daad 100644 --- a/src/slang-nodes/YulSwitchCases.ts +++ b/src/slang-nodes/YulSwitchCases.ts @@ -26,8 +26,7 @@ export class YulSwitchCases implements SlangNode { metadata = updateMetadata(metadata, [this.items]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulSwitchStatement.ts b/src/slang-nodes/YulSwitchStatement.ts index 20efea326..cbcee13e6 100644 --- a/src/slang-nodes/YulSwitchStatement.ts +++ b/src/slang-nodes/YulSwitchStatement.ts @@ -30,8 +30,7 @@ export class YulSwitchStatement implements SlangNode { metadata = updateMetadata(metadata, [this.expression, this.cases]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulValueCase.ts b/src/slang-nodes/YulValueCase.ts index 34a299662..bc86d6977 100644 --- a/src/slang-nodes/YulValueCase.ts +++ b/src/slang-nodes/YulValueCase.ts @@ -27,8 +27,7 @@ export class YulValueCase implements SlangNode { metadata = updateMetadata(metadata, [this.value, this.body]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulVariableAssignmentStatement.ts b/src/slang-nodes/YulVariableAssignmentStatement.ts index f71d878df..b458698c7 100644 --- a/src/slang-nodes/YulVariableAssignmentStatement.ts +++ b/src/slang-nodes/YulVariableAssignmentStatement.ts @@ -41,8 +41,7 @@ export class YulVariableAssignmentStatement implements SlangNode { this.expression ]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print( diff --git a/src/slang-nodes/YulVariableDeclarationStatement.ts b/src/slang-nodes/YulVariableDeclarationStatement.ts index a2bf6dedd..80ec96213 100644 --- a/src/slang-nodes/YulVariableDeclarationStatement.ts +++ b/src/slang-nodes/YulVariableDeclarationStatement.ts @@ -33,8 +33,7 @@ export class YulVariableDeclarationStatement implements SlangNode { metadata = updateMetadata(metadata, [this.value]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print( diff --git a/src/slang-nodes/YulVariableDeclarationValue.ts b/src/slang-nodes/YulVariableDeclarationValue.ts index 01f7c416c..657d25b7f 100644 --- a/src/slang-nodes/YulVariableDeclarationValue.ts +++ b/src/slang-nodes/YulVariableDeclarationValue.ts @@ -30,8 +30,7 @@ export class YulVariableDeclarationValue implements SlangNode { metadata = updateMetadata(metadata, [this.assignment, this.expression]); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulVariableNames.ts b/src/slang-nodes/YulVariableNames.ts index 9e7ac521b..2184979b2 100644 --- a/src/slang-nodes/YulVariableNames.ts +++ b/src/slang-nodes/YulVariableNames.ts @@ -24,8 +24,7 @@ export class YulVariableNames implements SlangNode { this.items = ast.items.map((item) => new YulIdentifier(item)); - this.comments = metadata.comments; - this.loc = metadata.loc; + [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-utils/metadata.ts b/src/slang-utils/metadata.ts index f99d64f89..4c4a2df45 100644 --- a/src/slang-utils/metadata.ts +++ b/src/slang-utils/metadata.ts @@ -43,15 +43,15 @@ export function getNodeMetadata( ): Metadata { if (ast instanceof TerminalNode) { const offset = offsets.get(ast.id) || 0; - return { - comments: [], - loc: { + return [ + { start: offset, end: offset + ast.textLength.utf16, leadingOffset: 0, trailingOffset: 0 - } - }; + }, + [] + ]; } const { cst: parent } = ast; const children = parent.children().map(({ node }) => node); @@ -110,7 +110,7 @@ export function getNodeMetadata( trailingOffset }; - return { comments, loc }; + return [loc, comments]; } function collectComments( @@ -129,7 +129,7 @@ function collectComments( } export function updateMetadata( - { comments, loc }: Metadata, + [loc, comments]: Metadata, childNodes: (StrictAstNode | StrictAstNode[] | undefined)[] ): Metadata { // Collect comments @@ -164,5 +164,5 @@ export function updateMetadata( } } - return { comments, loc }; + return [loc, comments]; } diff --git a/src/types.d.ts b/src/types.d.ts index daf0f2d4b..d974678b1 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -32,10 +32,7 @@ interface BaseComment { followingNode?: StrictAstNode; } -interface Metadata { - comments: Comment[]; - loc: AstLocation; -} +type Metadata = [AstLocation, Comment[]]; interface SlangNode { kind: From 0c4c0219345f1d8059900b2658a138b26f382be8 Mon Sep 17 00:00:00 2001 From: Klaus Date: Tue, 8 Jul 2025 12:40:39 +0100 Subject: [PATCH 2/8] avoid using the temporary variable `metadata` since it can be destructured directly --- src/slang-nodes/AbicoderPragma.ts | 4 +--- src/slang-nodes/AdditiveExpression.ts | 9 +++++---- src/slang-nodes/AddressType.ts | 4 +--- src/slang-nodes/AndExpression.ts | 9 +++++---- src/slang-nodes/ArgumentsDeclaration.ts | 6 ++---- src/slang-nodes/ArrayExpression.ts | 6 ++---- src/slang-nodes/ArrayTypeName.ts | 9 +++++---- src/slang-nodes/ArrayValues.ts | 6 ++---- src/slang-nodes/AssemblyFlags.ts | 6 ++---- src/slang-nodes/AssemblyFlagsDeclaration.ts | 6 ++---- src/slang-nodes/AssemblyStatement.ts | 10 ++++++---- src/slang-nodes/AssignmentExpression.ts | 9 +++++---- src/slang-nodes/BitwiseAndExpression.ts | 9 +++++---- src/slang-nodes/BitwiseOrExpression.ts | 9 +++++---- src/slang-nodes/BitwiseXorExpression.ts | 9 +++++---- src/slang-nodes/Block.ts | 6 ++---- src/slang-nodes/BreakStatement.ts | 4 +--- src/slang-nodes/CallOptions.ts | 6 ++---- src/slang-nodes/CallOptionsExpression.ts | 9 +++++---- src/slang-nodes/CatchClause.ts | 9 +++++---- src/slang-nodes/CatchClauseError.ts | 6 ++---- src/slang-nodes/CatchClauses.ts | 6 ++---- src/slang-nodes/ConditionalExpression.ts | 6 ++---- src/slang-nodes/ConstantDefinition.ts | 9 +++++---- src/slang-nodes/ConstructorAttribute.ts | 6 ++---- src/slang-nodes/ConstructorAttributes.ts | 6 ++---- src/slang-nodes/ConstructorDefinition.ts | 6 ++---- src/slang-nodes/ContinueStatement.ts | 4 +--- src/slang-nodes/ContractDefinition.ts | 9 +++++---- src/slang-nodes/ContractMember.ts | 6 ++---- src/slang-nodes/ContractMembers.ts | 6 ++---- src/slang-nodes/ContractSpecifier.ts | 6 ++---- src/slang-nodes/ContractSpecifiers.ts | 6 ++---- src/slang-nodes/DecimalNumberExpression.ts | 6 ++---- src/slang-nodes/DoWhileStatement.ts | 9 +++++---- src/slang-nodes/ElementaryType.ts | 6 ++---- src/slang-nodes/ElseBranch.ts | 6 ++---- src/slang-nodes/EmitStatement.ts | 9 +++++---- src/slang-nodes/EnumDefinition.ts | 6 ++---- src/slang-nodes/EnumMembers.ts | 4 +--- src/slang-nodes/EqualityExpression.ts | 9 +++++---- src/slang-nodes/ErrorDefinition.ts | 6 ++---- src/slang-nodes/ErrorParameter.ts | 6 ++---- src/slang-nodes/ErrorParameters.ts | 6 ++---- src/slang-nodes/ErrorParametersDeclaration.ts | 6 ++---- src/slang-nodes/EventDefinition.ts | 6 ++---- src/slang-nodes/EventParameter.ts | 6 ++---- src/slang-nodes/EventParameters.ts | 6 ++---- src/slang-nodes/EventParametersDeclaration.ts | 6 ++---- src/slang-nodes/ExperimentalFeature.ts | 6 ++---- src/slang-nodes/ExperimentalPragma.ts | 6 ++---- src/slang-nodes/ExponentiationExpression.ts | 9 +++++---- src/slang-nodes/Expression.ts | 6 ++---- src/slang-nodes/ExpressionStatement.ts | 6 ++---- src/slang-nodes/FallbackFunctionAttribute.ts | 6 ++---- src/slang-nodes/FallbackFunctionAttributes.ts | 6 ++---- src/slang-nodes/FallbackFunctionDefinition.ts | 6 ++---- src/slang-nodes/ForStatement.ts | 6 ++---- src/slang-nodes/ForStatementCondition.ts | 6 ++---- src/slang-nodes/ForStatementInitialization.ts | 6 ++---- src/slang-nodes/FunctionAttribute.ts | 6 ++---- src/slang-nodes/FunctionAttributes.ts | 6 ++---- src/slang-nodes/FunctionBody.ts | 6 ++---- src/slang-nodes/FunctionCallExpression.ts | 9 +++++---- src/slang-nodes/FunctionDefinition.ts | 6 ++---- src/slang-nodes/FunctionName.ts | 4 +--- src/slang-nodes/FunctionType.ts | 6 ++---- src/slang-nodes/FunctionTypeAttribute.ts | 4 +--- src/slang-nodes/FunctionTypeAttributes.ts | 6 ++---- src/slang-nodes/HexNumberExpression.ts | 6 ++---- src/slang-nodes/HexStringLiteral.ts | 4 +--- src/slang-nodes/HexStringLiterals.ts | 6 ++---- src/slang-nodes/Identifier.ts | 4 +--- src/slang-nodes/IdentifierPath.ts | 4 +--- src/slang-nodes/IfStatement.ts | 6 ++---- src/slang-nodes/ImportAlias.ts | 4 +--- src/slang-nodes/ImportClause.ts | 6 ++---- src/slang-nodes/ImportDeconstruction.ts | 9 +++++---- src/slang-nodes/ImportDeconstructionSymbol.ts | 6 ++---- src/slang-nodes/ImportDeconstructionSymbols.ts | 6 ++---- src/slang-nodes/ImportDirective.ts | 6 ++---- src/slang-nodes/IndexAccessEnd.ts | 6 ++---- src/slang-nodes/IndexAccessExpression.ts | 10 ++++++---- src/slang-nodes/InequalityExpression.ts | 9 +++++---- src/slang-nodes/InheritanceSpecifier.ts | 6 ++---- src/slang-nodes/InheritanceType.ts | 9 +++++---- src/slang-nodes/InheritanceTypes.ts | 6 ++---- src/slang-nodes/InterfaceDefinition.ts | 9 +++++---- src/slang-nodes/InterfaceMembers.ts | 6 ++---- src/slang-nodes/LibraryDefinition.ts | 6 ++---- src/slang-nodes/LibraryMembers.ts | 6 ++---- src/slang-nodes/MappingKey.ts | 6 ++---- src/slang-nodes/MappingKeyType.ts | 6 ++---- src/slang-nodes/MappingType.ts | 9 +++++---- src/slang-nodes/MappingValue.ts | 6 ++---- src/slang-nodes/MemberAccessExpression.ts | 6 ++---- src/slang-nodes/ModifierAttribute.ts | 6 ++---- src/slang-nodes/ModifierAttributes.ts | 6 ++---- src/slang-nodes/ModifierDefinition.ts | 6 ++---- src/slang-nodes/ModifierInvocation.ts | 9 +++++---- src/slang-nodes/MultiLineComment.ts | 4 +--- src/slang-nodes/MultiLineNatSpecComment.ts | 4 +--- src/slang-nodes/MultiplicativeExpression.ts | 9 +++++---- src/slang-nodes/NamedArgument.ts | 6 ++---- src/slang-nodes/NamedArgumentGroup.ts | 6 ++---- src/slang-nodes/NamedArguments.ts | 6 ++---- src/slang-nodes/NamedArgumentsDeclaration.ts | 6 ++---- src/slang-nodes/NamedImport.ts | 9 +++++---- src/slang-nodes/NewExpression.ts | 6 ++---- src/slang-nodes/NumberUnit.ts | 4 +--- src/slang-nodes/OrExpression.ts | 9 +++++---- src/slang-nodes/OverridePaths.ts | 6 ++---- src/slang-nodes/OverridePathsDeclaration.ts | 6 ++---- src/slang-nodes/OverrideSpecifier.ts | 6 ++---- src/slang-nodes/Parameter.ts | 9 +++++---- src/slang-nodes/Parameters.ts | 6 ++---- src/slang-nodes/ParametersDeclaration.ts | 6 ++---- src/slang-nodes/PathImport.ts | 9 +++++---- src/slang-nodes/PositionalArguments.ts | 6 ++---- src/slang-nodes/PositionalArgumentsDeclaration.ts | 6 ++---- src/slang-nodes/PostfixExpression.ts | 6 ++---- src/slang-nodes/Pragma.ts | 6 ++---- src/slang-nodes/PragmaDirective.ts | 6 ++---- src/slang-nodes/PrefixExpression.ts | 6 ++---- src/slang-nodes/ReceiveFunctionAttribute.ts | 6 ++---- src/slang-nodes/ReceiveFunctionAttributes.ts | 6 ++---- src/slang-nodes/ReceiveFunctionDefinition.ts | 6 ++---- src/slang-nodes/ReturnStatement.ts | 6 ++---- src/slang-nodes/ReturnsDeclaration.ts | 6 ++---- src/slang-nodes/RevertStatement.ts | 9 +++++---- src/slang-nodes/ShiftExpression.ts | 9 +++++---- src/slang-nodes/SimpleVersionLiteral.ts | 4 +--- src/slang-nodes/SingleLineComment.ts | 4 +--- src/slang-nodes/SingleLineNatSpecComment.ts | 4 +--- src/slang-nodes/SourceUnit.ts | 4 ++-- src/slang-nodes/SourceUnitMember.ts | 6 ++---- src/slang-nodes/SourceUnitMembers.ts | 6 ++---- src/slang-nodes/StateVariableAttribute.ts | 6 ++---- src/slang-nodes/StateVariableAttributes.ts | 6 ++---- src/slang-nodes/StateVariableDefinition.ts | 6 ++---- src/slang-nodes/StateVariableDefinitionValue.ts | 6 ++---- src/slang-nodes/Statement.ts | 6 ++---- src/slang-nodes/Statements.ts | 6 ++---- src/slang-nodes/StorageLayoutSpecifier.ts | 6 ++---- src/slang-nodes/StorageLocation.ts | 4 +--- src/slang-nodes/StringExpression.ts | 6 ++---- src/slang-nodes/StringLiteral.ts | 4 +--- src/slang-nodes/StringLiterals.ts | 6 ++---- src/slang-nodes/StructDefinition.ts | 6 ++---- src/slang-nodes/StructMember.ts | 6 ++---- src/slang-nodes/StructMembers.ts | 6 ++---- src/slang-nodes/ThrowStatement.ts | 4 +--- src/slang-nodes/TryStatement.ts | 6 ++---- src/slang-nodes/TupleDeconstructionElement.ts | 6 ++---- src/slang-nodes/TupleDeconstructionElements.ts | 6 ++---- src/slang-nodes/TupleDeconstructionStatement.ts | 9 +++++---- src/slang-nodes/TupleExpression.ts | 6 ++---- src/slang-nodes/TupleMember.ts | 6 ++---- src/slang-nodes/TupleValue.ts | 6 ++---- src/slang-nodes/TupleValues.ts | 6 ++---- src/slang-nodes/TypeExpression.ts | 6 ++---- src/slang-nodes/TypeName.ts | 6 ++---- src/slang-nodes/TypedTupleMember.ts | 9 +++++---- src/slang-nodes/UncheckedBlock.ts | 6 ++---- src/slang-nodes/UnicodeStringLiteral.ts | 4 +--- src/slang-nodes/UnicodeStringLiterals.ts | 6 ++---- src/slang-nodes/UnnamedFunctionAttribute.ts | 6 ++---- src/slang-nodes/UnnamedFunctionAttributes.ts | 6 ++---- src/slang-nodes/UnnamedFunctionDefinition.ts | 6 ++---- src/slang-nodes/UntypedTupleMember.ts | 8 ++++---- src/slang-nodes/UserDefinedValueTypeDefinition.ts | 6 ++---- src/slang-nodes/UsingAlias.ts | 6 ++---- src/slang-nodes/UsingClause.ts | 6 ++---- src/slang-nodes/UsingDeconstruction.ts | 6 ++---- src/slang-nodes/UsingDeconstructionSymbol.ts | 9 +++++---- src/slang-nodes/UsingDeconstructionSymbols.ts | 6 ++---- src/slang-nodes/UsingDirective.ts | 9 +++++---- src/slang-nodes/UsingOperator.ts | 4 +--- src/slang-nodes/UsingTarget.ts | 6 ++---- src/slang-nodes/VariableDeclarationStatement.ts | 6 ++---- src/slang-nodes/VariableDeclarationType.ts | 6 ++---- src/slang-nodes/VariableDeclarationValue.ts | 6 ++---- src/slang-nodes/VersionExpression.ts | 6 ++---- src/slang-nodes/VersionExpressionSet.ts | 6 ++---- src/slang-nodes/VersionExpressionSets.ts | 6 ++---- src/slang-nodes/VersionLiteral.ts | 6 ++---- src/slang-nodes/VersionOperator.ts | 4 +--- src/slang-nodes/VersionPragma.ts | 6 ++---- src/slang-nodes/VersionRange.ts | 9 +++++---- src/slang-nodes/VersionTerm.ts | 9 +++++---- src/slang-nodes/WhileStatement.ts | 9 +++++---- src/slang-nodes/YulArguments.ts | 6 ++---- src/slang-nodes/YulAssignmentOperator.ts | 6 ++---- src/slang-nodes/YulBlock.ts | 6 ++---- src/slang-nodes/YulBreakStatement.ts | 4 +--- src/slang-nodes/YulColonAndEqual.ts | 4 +--- src/slang-nodes/YulContinueStatement.ts | 4 +--- src/slang-nodes/YulDefaultCase.ts | 6 ++---- src/slang-nodes/YulEqualAndColon.ts | 4 +--- src/slang-nodes/YulExpression.ts | 6 ++---- src/slang-nodes/YulForStatement.ts | 6 ++---- src/slang-nodes/YulFunctionCallExpression.ts | 9 +++++---- src/slang-nodes/YulFunctionDefinition.ts | 6 ++---- src/slang-nodes/YulIdentifier.ts | 4 +--- src/slang-nodes/YulIfStatement.ts | 9 +++++---- src/slang-nodes/YulLabel.ts | 4 +--- src/slang-nodes/YulLeaveStatement.ts | 4 +--- src/slang-nodes/YulLiteral.ts | 6 ++---- src/slang-nodes/YulParameters.ts | 4 +--- src/slang-nodes/YulParametersDeclaration.ts | 6 ++---- src/slang-nodes/YulPath.ts | 4 +--- src/slang-nodes/YulPaths.ts | 6 ++---- src/slang-nodes/YulReturnsDeclaration.ts | 6 ++---- src/slang-nodes/YulStackAssignmentOperator.ts | 6 ++---- src/slang-nodes/YulStackAssignmentStatement.ts | 6 ++---- src/slang-nodes/YulStatement.ts | 6 ++---- src/slang-nodes/YulStatements.ts | 6 ++---- src/slang-nodes/YulSwitchCase.ts | 6 ++---- src/slang-nodes/YulSwitchCases.ts | 6 ++---- src/slang-nodes/YulSwitchStatement.ts | 9 +++++---- src/slang-nodes/YulValueCase.ts | 9 +++++---- src/slang-nodes/YulVariableAssignmentStatement.ts | 6 ++---- src/slang-nodes/YulVariableDeclarationStatement.ts | 6 ++---- src/slang-nodes/YulVariableDeclarationValue.ts | 9 +++++---- src/slang-nodes/YulVariableNames.ts | 4 +--- 225 files changed, 550 insertions(+), 865 deletions(-) diff --git a/src/slang-nodes/AbicoderPragma.ts b/src/slang-nodes/AbicoderPragma.ts index 00fb0dd56..c36415ac7 100644 --- a/src/slang-nodes/AbicoderPragma.ts +++ b/src/slang-nodes/AbicoderPragma.ts @@ -16,11 +16,9 @@ export class AbicoderPragma implements SlangNode { version: Identifier; constructor(ast: ast.AbicoderPragma) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.version = new Identifier(ast.version); - - [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/AdditiveExpression.ts b/src/slang-nodes/AdditiveExpression.ts index 1bd810123..92c828a8d 100644 --- a/src/slang-nodes/AdditiveExpression.ts +++ b/src/slang-nodes/AdditiveExpression.ts @@ -39,15 +39,16 @@ export class AdditiveExpression implements SlangNode { rightOperand: Expression; constructor(ast: ast.AdditiveExpression, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.leftOperand = new Expression(ast.leftOperand, options); this.operator = ast.operator.unparse(); this.rightOperand = new Expression(ast.rightOperand, options); - metadata = updateMetadata(metadata, [this.leftOperand, this.rightOperand]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [ + this.leftOperand, + this.rightOperand + ]); this.leftOperand = tryToHug(this.leftOperand); this.rightOperand = tryToHug(this.rightOperand); diff --git a/src/slang-nodes/AddressType.ts b/src/slang-nodes/AddressType.ts index aaf3c0769..8a3fe8411 100644 --- a/src/slang-nodes/AddressType.ts +++ b/src/slang-nodes/AddressType.ts @@ -16,11 +16,9 @@ export class AddressType implements SlangNode { payableKeyword?: string; constructor(ast: ast.AddressType) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.payableKeyword = ast.payableKeyword?.unparse(); - - [this.loc, this.comments] = metadata; } print(): Doc { diff --git a/src/slang-nodes/AndExpression.ts b/src/slang-nodes/AndExpression.ts index 16159d1b2..d6411dbf9 100644 --- a/src/slang-nodes/AndExpression.ts +++ b/src/slang-nodes/AndExpression.ts @@ -22,15 +22,16 @@ export class AndExpression implements SlangNode { rightOperand: Expression; constructor(ast: ast.AndExpression, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.leftOperand = new Expression(ast.leftOperand, options); this.operator = ast.operator.unparse(); this.rightOperand = new Expression(ast.rightOperand, options); - metadata = updateMetadata(metadata, [this.leftOperand, this.rightOperand]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [ + this.leftOperand, + this.rightOperand + ]); } print( diff --git a/src/slang-nodes/ArgumentsDeclaration.ts b/src/slang-nodes/ArgumentsDeclaration.ts index 4444c7a02..346bf86de 100644 --- a/src/slang-nodes/ArgumentsDeclaration.ts +++ b/src/slang-nodes/ArgumentsDeclaration.ts @@ -18,7 +18,7 @@ export class ArgumentsDeclaration implements SlangNode { variant: PositionalArgumentsDeclaration | NamedArgumentsDeclaration; constructor(ast: ast.ArgumentsDeclaration, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); switch (ast.variant.cst.kind) { case NonterminalKind.PositionalArgumentsDeclaration: @@ -37,9 +37,7 @@ export class ArgumentsDeclaration implements SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - metadata = updateMetadata(metadata, [this.variant]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ArrayExpression.ts b/src/slang-nodes/ArrayExpression.ts index a1c011371..bdaf0d1a9 100644 --- a/src/slang-nodes/ArrayExpression.ts +++ b/src/slang-nodes/ArrayExpression.ts @@ -20,13 +20,11 @@ export class ArrayExpression implements SlangNode { items: ArrayValues; constructor(ast: ast.ArrayExpression, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.items = new ArrayValues(ast.items, options); - metadata = updateMetadata(metadata, [this.items]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ArrayTypeName.ts b/src/slang-nodes/ArrayTypeName.ts index b305b9293..1245b0b16 100644 --- a/src/slang-nodes/ArrayTypeName.ts +++ b/src/slang-nodes/ArrayTypeName.ts @@ -20,16 +20,17 @@ export class ArrayTypeName implements SlangNode { index?: Expression; constructor(ast: ast.ArrayTypeName, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.operand = new TypeName(ast.operand, options); if (ast.index) { this.index = new Expression(ast.index, options); } - metadata = updateMetadata(metadata, [this.operand, this.index]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [ + this.operand, + this.index + ]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ArrayValues.ts b/src/slang-nodes/ArrayValues.ts index 250ecb725..d0a8c7e99 100644 --- a/src/slang-nodes/ArrayValues.ts +++ b/src/slang-nodes/ArrayValues.ts @@ -18,13 +18,11 @@ export class ArrayValues implements SlangNode { items: Expression[]; constructor(ast: ast.ArrayValues, options: ParserOptions) { - let metadata = getNodeMetadata(ast, true); + const metadata = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new Expression(item, options)); - metadata = updateMetadata(metadata, [this.items]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/AssemblyFlags.ts b/src/slang-nodes/AssemblyFlags.ts index 15f4a2526..987a06ef1 100644 --- a/src/slang-nodes/AssemblyFlags.ts +++ b/src/slang-nodes/AssemblyFlags.ts @@ -18,13 +18,11 @@ export class AssemblyFlags implements SlangNode { items: StringLiteral[]; constructor(ast: ast.AssemblyFlags, options: ParserOptions) { - let metadata = getNodeMetadata(ast, true); + const metadata = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new StringLiteral(item, options)); - metadata = updateMetadata(metadata, [this.items]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/AssemblyFlagsDeclaration.ts b/src/slang-nodes/AssemblyFlagsDeclaration.ts index bdf0a3d58..e818829fe 100644 --- a/src/slang-nodes/AssemblyFlagsDeclaration.ts +++ b/src/slang-nodes/AssemblyFlagsDeclaration.ts @@ -20,13 +20,11 @@ export class AssemblyFlagsDeclaration implements SlangNode { ast: ast.AssemblyFlagsDeclaration, options: ParserOptions ) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.flags = new AssemblyFlags(ast.flags, options); - metadata = updateMetadata(metadata, [this.flags]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.flags]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/AssemblyStatement.ts b/src/slang-nodes/AssemblyStatement.ts index 8e268acff..ac22f4b35 100644 --- a/src/slang-nodes/AssemblyStatement.ts +++ b/src/slang-nodes/AssemblyStatement.ts @@ -24,7 +24,7 @@ export class AssemblyStatement implements SlangNode { body: YulBlock; constructor(ast: ast.AssemblyStatement, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); if (ast.label) { this.label = new StringLiteral(ast.label, options); @@ -34,9 +34,11 @@ export class AssemblyStatement implements SlangNode { } this.body = new YulBlock(ast.body, options); - metadata = updateMetadata(metadata, [this.label, this.flags, this.body]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [ + this.label, + this.flags, + this.body + ]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/AssignmentExpression.ts b/src/slang-nodes/AssignmentExpression.ts index 046005db3..c1bd86131 100644 --- a/src/slang-nodes/AssignmentExpression.ts +++ b/src/slang-nodes/AssignmentExpression.ts @@ -25,15 +25,16 @@ export class AssignmentExpression implements SlangNode { rightOperand: Expression; constructor(ast: ast.AssignmentExpression, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.leftOperand = new Expression(ast.leftOperand, options); this.operator = ast.operator.unparse(); this.rightOperand = new Expression(ast.rightOperand, options); - metadata = updateMetadata(metadata, [this.leftOperand, this.rightOperand]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [ + this.leftOperand, + this.rightOperand + ]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/BitwiseAndExpression.ts b/src/slang-nodes/BitwiseAndExpression.ts index b5f35601f..b22b36d01 100644 --- a/src/slang-nodes/BitwiseAndExpression.ts +++ b/src/slang-nodes/BitwiseAndExpression.ts @@ -35,15 +35,16 @@ export class BitwiseAndExpression implements SlangNode { rightOperand: Expression; constructor(ast: ast.BitwiseAndExpression, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.leftOperand = new Expression(ast.leftOperand, options); this.operator = ast.operator.unparse(); this.rightOperand = new Expression(ast.rightOperand, options); - metadata = updateMetadata(metadata, [this.leftOperand, this.rightOperand]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [ + this.leftOperand, + this.rightOperand + ]); this.leftOperand = tryToHug(this.leftOperand); this.rightOperand = tryToHug(this.rightOperand); diff --git a/src/slang-nodes/BitwiseOrExpression.ts b/src/slang-nodes/BitwiseOrExpression.ts index 7fae801b2..5bbe9706a 100644 --- a/src/slang-nodes/BitwiseOrExpression.ts +++ b/src/slang-nodes/BitwiseOrExpression.ts @@ -45,15 +45,16 @@ export class BitwiseOrExpression implements SlangNode { rightOperand: Expression; constructor(ast: ast.BitwiseOrExpression, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.leftOperand = new Expression(ast.leftOperand, options); this.operator = ast.operator.unparse(); this.rightOperand = new Expression(ast.rightOperand, options); - metadata = updateMetadata(metadata, [this.leftOperand, this.rightOperand]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [ + this.leftOperand, + this.rightOperand + ]); this.leftOperand = tryToHug(this.leftOperand); this.rightOperand = tryToHug(this.rightOperand); diff --git a/src/slang-nodes/BitwiseXorExpression.ts b/src/slang-nodes/BitwiseXorExpression.ts index ff8c6750f..acd9ccbe4 100644 --- a/src/slang-nodes/BitwiseXorExpression.ts +++ b/src/slang-nodes/BitwiseXorExpression.ts @@ -35,15 +35,16 @@ export class BitwiseXorExpression implements SlangNode { rightOperand: Expression; constructor(ast: ast.BitwiseXorExpression, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.leftOperand = new Expression(ast.leftOperand, options); this.operator = ast.operator.unparse(); this.rightOperand = new Expression(ast.rightOperand, options); - metadata = updateMetadata(metadata, [this.leftOperand, this.rightOperand]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [ + this.leftOperand, + this.rightOperand + ]); this.leftOperand = tryToHug(this.leftOperand); this.rightOperand = tryToHug(this.rightOperand); diff --git a/src/slang-nodes/Block.ts b/src/slang-nodes/Block.ts index 76f176528..901242d17 100644 --- a/src/slang-nodes/Block.ts +++ b/src/slang-nodes/Block.ts @@ -17,13 +17,11 @@ export class Block implements SlangNode { statements: Statements; constructor(ast: ast.Block, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.statements = new Statements(ast.statements, options); - metadata = updateMetadata(metadata, [this.statements]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.statements]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/BreakStatement.ts b/src/slang-nodes/BreakStatement.ts index 19d9b3b82..24c4f0917 100644 --- a/src/slang-nodes/BreakStatement.ts +++ b/src/slang-nodes/BreakStatement.ts @@ -13,9 +13,7 @@ export class BreakStatement implements SlangNode { loc; constructor(ast: ast.BreakStatement) { - const metadata = getNodeMetadata(ast); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = getNodeMetadata(ast); } print(): Doc { diff --git a/src/slang-nodes/CallOptions.ts b/src/slang-nodes/CallOptions.ts index 7c5dd728a..3822b7780 100644 --- a/src/slang-nodes/CallOptions.ts +++ b/src/slang-nodes/CallOptions.ts @@ -21,13 +21,11 @@ export class CallOptions implements SlangNode { items: NamedArgument[]; constructor(ast: ast.CallOptions, options: ParserOptions) { - let metadata = getNodeMetadata(ast, true); + const metadata = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new NamedArgument(item, options)); - metadata = updateMetadata(metadata, [this.items]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.items]); } print( diff --git a/src/slang-nodes/CallOptionsExpression.ts b/src/slang-nodes/CallOptionsExpression.ts index c5bbc8aa6..33750ad46 100644 --- a/src/slang-nodes/CallOptionsExpression.ts +++ b/src/slang-nodes/CallOptionsExpression.ts @@ -20,14 +20,15 @@ export class CallOptionsExpression implements SlangNode { options: CallOptions; constructor(ast: ast.CallOptionsExpression, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.operand = new Expression(ast.operand, options); this.options = new CallOptions(ast.options, options); - metadata = updateMetadata(metadata, [this.operand, this.options]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [ + this.operand, + this.options + ]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/CatchClause.ts b/src/slang-nodes/CatchClause.ts index 18923866e..7a2862e26 100644 --- a/src/slang-nodes/CatchClause.ts +++ b/src/slang-nodes/CatchClause.ts @@ -20,16 +20,17 @@ export class CatchClause implements SlangNode { body: Block; constructor(ast: ast.CatchClause, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); if (ast.error) { this.error = new CatchClauseError(ast.error, options); } this.body = new Block(ast.body, options); - metadata = updateMetadata(metadata, [this.error, this.body]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [ + this.error, + this.body + ]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/CatchClauseError.ts b/src/slang-nodes/CatchClauseError.ts index 5d4ed3ee1..abced7b2d 100644 --- a/src/slang-nodes/CatchClauseError.ts +++ b/src/slang-nodes/CatchClauseError.ts @@ -23,16 +23,14 @@ export class CatchClauseError implements SlangNode { parameters: ParametersDeclaration; constructor(ast: ast.CatchClauseError, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); if (ast.name) { this.name = new Identifier(ast.name); } this.parameters = new ParametersDeclaration(ast.parameters, options); - metadata = updateMetadata(metadata, [this.parameters]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.parameters]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/CatchClauses.ts b/src/slang-nodes/CatchClauses.ts index 78269e922..47769c288 100644 --- a/src/slang-nodes/CatchClauses.ts +++ b/src/slang-nodes/CatchClauses.ts @@ -20,13 +20,11 @@ export class CatchClauses implements SlangNode { items: CatchClause[]; constructor(ast: ast.CatchClauses, options: ParserOptions) { - let metadata = getNodeMetadata(ast, true); + const metadata = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new CatchClause(item, options)); - metadata = updateMetadata(metadata, [this.items]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ConditionalExpression.ts b/src/slang-nodes/ConditionalExpression.ts index 12ee34516..2508d52e9 100644 --- a/src/slang-nodes/ConditionalExpression.ts +++ b/src/slang-nodes/ConditionalExpression.ts @@ -122,20 +122,18 @@ export class ConditionalExpression implements SlangNode { falseExpression: Expression; constructor(ast: ast.ConditionalExpression, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.operand = new Expression(ast.operand, options); this.trueExpression = new Expression(ast.trueExpression, options); this.falseExpression = new Expression(ast.falseExpression, options); - metadata = updateMetadata(metadata, [ + [this.loc, this.comments] = updateMetadata(metadata, [ this.operand, this.trueExpression, this.falseExpression ]); - [this.loc, this.comments] = metadata; - if (options.experimentalTernaries) { // We can remove parentheses only because we are sure that the // `condition` must be a single `bool` value. diff --git a/src/slang-nodes/ConstantDefinition.ts b/src/slang-nodes/ConstantDefinition.ts index 26834237f..40623e10e 100644 --- a/src/slang-nodes/ConstantDefinition.ts +++ b/src/slang-nodes/ConstantDefinition.ts @@ -23,15 +23,16 @@ export class ConstantDefinition implements SlangNode { value: Expression; constructor(ast: ast.ConstantDefinition, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.typeName = new TypeName(ast.typeName, options); this.name = new Identifier(ast.name); this.value = new Expression(ast.value, options); - metadata = updateMetadata(metadata, [this.typeName, this.value]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [ + this.typeName, + this.value + ]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ConstructorAttribute.ts b/src/slang-nodes/ConstructorAttribute.ts index 46f695ece..98f775b25 100644 --- a/src/slang-nodes/ConstructorAttribute.ts +++ b/src/slang-nodes/ConstructorAttribute.ts @@ -17,19 +17,17 @@ export class ConstructorAttribute implements SlangNode { variant: ModifierInvocation | string; constructor(ast: ast.ConstructorAttribute, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.variant = ast.variant instanceof TerminalNode ? ast.variant.unparse() : new ModifierInvocation(ast.variant, options); - metadata = updateMetadata( + [this.loc, this.comments] = updateMetadata( metadata, typeof this.variant === 'string' ? [] : [this.variant] ); - - [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ConstructorAttributes.ts b/src/slang-nodes/ConstructorAttributes.ts index 790b3e199..d45956d06 100644 --- a/src/slang-nodes/ConstructorAttributes.ts +++ b/src/slang-nodes/ConstructorAttributes.ts @@ -21,15 +21,13 @@ export class ConstructorAttributes implements SlangNode { items: ConstructorAttribute[]; constructor(ast: ast.ConstructorAttributes, options: ParserOptions) { - let metadata = getNodeMetadata(ast, true); + const metadata = getNodeMetadata(ast, true); this.items = ast.items.map( (item) => new ConstructorAttribute(item, options) ); - metadata = updateMetadata(metadata, [this.items]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.items]); this.items = this.items.sort(sortFunctionAttributes); } diff --git a/src/slang-nodes/ConstructorDefinition.ts b/src/slang-nodes/ConstructorDefinition.ts index c7fd89e23..1bf468853 100644 --- a/src/slang-nodes/ConstructorDefinition.ts +++ b/src/slang-nodes/ConstructorDefinition.ts @@ -24,19 +24,17 @@ export class ConstructorDefinition implements SlangNode { body: Block; constructor(ast: ast.ConstructorDefinition, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.parameters = new ParametersDeclaration(ast.parameters, options); this.attributes = new ConstructorAttributes(ast.attributes, options); this.body = new Block(ast.body, options); - metadata = updateMetadata(metadata, [ + [this.loc, this.comments] = updateMetadata(metadata, [ this.parameters, this.attributes, this.body ]); - - [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ContinueStatement.ts b/src/slang-nodes/ContinueStatement.ts index fa4997f46..457cff4ec 100644 --- a/src/slang-nodes/ContinueStatement.ts +++ b/src/slang-nodes/ContinueStatement.ts @@ -13,9 +13,7 @@ export class ContinueStatement implements SlangNode { loc; constructor(ast: ast.ContinueStatement) { - const metadata = getNodeMetadata(ast); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = getNodeMetadata(ast); } print(): Doc { diff --git a/src/slang-nodes/ContractDefinition.ts b/src/slang-nodes/ContractDefinition.ts index 0c376bb58..02edd9306 100644 --- a/src/slang-nodes/ContractDefinition.ts +++ b/src/slang-nodes/ContractDefinition.ts @@ -29,16 +29,17 @@ export class ContractDefinition implements SlangNode { members: ContractMembers; constructor(ast: ast.ContractDefinition, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.abstractKeyword = ast.abstractKeyword?.unparse(); this.name = new Identifier(ast.name); this.specifiers = new ContractSpecifiers(ast.specifiers, options); this.members = new ContractMembers(ast.members, options); - metadata = updateMetadata(metadata, [this.specifiers, this.members]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [ + this.specifiers, + this.members + ]); this.cleanModifierInvocationArguments(options); } diff --git a/src/slang-nodes/ContractMember.ts b/src/slang-nodes/ContractMember.ts index adf9296f9..15bc6a36f 100644 --- a/src/slang-nodes/ContractMember.ts +++ b/src/slang-nodes/ContractMember.ts @@ -42,7 +42,7 @@ export class ContractMember implements SlangNode { | UserDefinedValueTypeDefinition; constructor(ast: ast.ContractMember, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); switch (ast.variant.cst.kind) { case NonterminalKind.UsingDirective: @@ -123,9 +123,7 @@ export class ContractMember implements SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - metadata = updateMetadata(metadata, [this.variant]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ContractMembers.ts b/src/slang-nodes/ContractMembers.ts index ea1ee2056..6230f46b2 100644 --- a/src/slang-nodes/ContractMembers.ts +++ b/src/slang-nodes/ContractMembers.ts @@ -23,13 +23,11 @@ export class ContractMembers implements SlangNode { items: ContractMember[]; constructor(ast: ast.ContractMembers, options: ParserOptions) { - let metadata = getNodeMetadata(ast, true); + const metadata = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new ContractMember(item, options)); - metadata = updateMetadata(metadata, [this.items]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.items]); } print( diff --git a/src/slang-nodes/ContractSpecifier.ts b/src/slang-nodes/ContractSpecifier.ts index dbf43596f..7d4ff1e51 100644 --- a/src/slang-nodes/ContractSpecifier.ts +++ b/src/slang-nodes/ContractSpecifier.ts @@ -18,7 +18,7 @@ export class ContractSpecifier implements SlangNode { variant: InheritanceSpecifier | StorageLayoutSpecifier; constructor(ast: ast.ContractSpecifier, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); switch (ast.variant.cst.kind) { case NonterminalKind.InheritanceSpecifier: @@ -36,9 +36,7 @@ export class ContractSpecifier implements SlangNode { default: throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - metadata = updateMetadata(metadata, [this.variant]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ContractSpecifiers.ts b/src/slang-nodes/ContractSpecifiers.ts index b3c7c94df..e35b42817 100644 --- a/src/slang-nodes/ContractSpecifiers.ts +++ b/src/slang-nodes/ContractSpecifiers.ts @@ -22,13 +22,11 @@ export class ContractSpecifiers implements SlangNode { items: ContractSpecifier[]; constructor(ast: ast.ContractSpecifiers, options: ParserOptions) { - let metadata = getNodeMetadata(ast, true); + const metadata = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new ContractSpecifier(item, options)); - metadata = updateMetadata(metadata, [this.items]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.items]); this.items = this.items.sort(sortContractSpecifiers); } diff --git a/src/slang-nodes/DecimalNumberExpression.ts b/src/slang-nodes/DecimalNumberExpression.ts index cc1c869f8..cfedddd08 100644 --- a/src/slang-nodes/DecimalNumberExpression.ts +++ b/src/slang-nodes/DecimalNumberExpression.ts @@ -19,16 +19,14 @@ export class DecimalNumberExpression implements SlangNode { unit?: NumberUnit; constructor(ast: ast.DecimalNumberExpression) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.literal = ast.literal.unparse(); if (ast.unit) { this.unit = new NumberUnit(ast.unit); } - metadata = updateMetadata(metadata, [this.unit]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.unit]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/DoWhileStatement.ts b/src/slang-nodes/DoWhileStatement.ts index 09231ba07..b48d3abb5 100644 --- a/src/slang-nodes/DoWhileStatement.ts +++ b/src/slang-nodes/DoWhileStatement.ts @@ -24,14 +24,15 @@ export class DoWhileStatement implements SlangNode { condition: Expression; constructor(ast: ast.DoWhileStatement, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.body = new Statement(ast.body, options); this.condition = new Expression(ast.condition, options); - metadata = updateMetadata(metadata, [this.body, this.condition]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [ + this.body, + this.condition + ]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ElementaryType.ts b/src/slang-nodes/ElementaryType.ts index ae3523d49..4f05b6a14 100644 --- a/src/slang-nodes/ElementaryType.ts +++ b/src/slang-nodes/ElementaryType.ts @@ -16,19 +16,17 @@ export class ElementaryType implements SlangNode { variant: AddressType | string; constructor(ast: ast.ElementaryType) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.variant = ast.variant instanceof TerminalNode ? ast.variant.unparse() : new AddressType(ast.variant); - metadata = updateMetadata( + [this.loc, this.comments] = updateMetadata( metadata, typeof this.variant === 'string' ? [] : [this.variant] ); - - [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ElseBranch.ts b/src/slang-nodes/ElseBranch.ts index a74d0e46e..09ea47f95 100644 --- a/src/slang-nodes/ElseBranch.ts +++ b/src/slang-nodes/ElseBranch.ts @@ -26,13 +26,11 @@ export class ElseBranch implements SlangNode { body: Statement; constructor(ast: ast.ElseBranch, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.body = new Statement(ast.body, options); - metadata = updateMetadata(metadata, [this.body]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.body]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/EmitStatement.ts b/src/slang-nodes/EmitStatement.ts index d47f3897b..a1819387f 100644 --- a/src/slang-nodes/EmitStatement.ts +++ b/src/slang-nodes/EmitStatement.ts @@ -20,14 +20,15 @@ export class EmitStatement implements SlangNode { arguments: ArgumentsDeclaration; constructor(ast: ast.EmitStatement, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.event = new IdentifierPath(ast.event); this.arguments = new ArgumentsDeclaration(ast.arguments, options); - metadata = updateMetadata(metadata, [this.event, this.arguments]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [ + this.event, + this.arguments + ]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/EnumDefinition.ts b/src/slang-nodes/EnumDefinition.ts index c82d3f31f..0a9ae19e5 100644 --- a/src/slang-nodes/EnumDefinition.ts +++ b/src/slang-nodes/EnumDefinition.ts @@ -19,14 +19,12 @@ export class EnumDefinition implements SlangNode { members: EnumMembers; constructor(ast: ast.EnumDefinition) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.name = new Identifier(ast.name); this.members = new EnumMembers(ast.members); - metadata = updateMetadata(metadata, [this.members]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.members]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/EnumMembers.ts b/src/slang-nodes/EnumMembers.ts index be8c84614..ef5eedbea 100644 --- a/src/slang-nodes/EnumMembers.ts +++ b/src/slang-nodes/EnumMembers.ts @@ -20,11 +20,9 @@ export class EnumMembers implements SlangNode { items: Identifier[]; constructor(ast: ast.EnumMembers) { - const metadata = getNodeMetadata(ast, true); + [this.loc, this.comments] = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new Identifier(item)); - - [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/EqualityExpression.ts b/src/slang-nodes/EqualityExpression.ts index 9227fe053..faf2eb155 100644 --- a/src/slang-nodes/EqualityExpression.ts +++ b/src/slang-nodes/EqualityExpression.ts @@ -33,15 +33,16 @@ export class EqualityExpression implements SlangNode { rightOperand: Expression; constructor(ast: ast.EqualityExpression, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.leftOperand = new Expression(ast.leftOperand, options); this.operator = ast.operator.unparse(); this.rightOperand = new Expression(ast.rightOperand, options); - metadata = updateMetadata(metadata, [this.leftOperand, this.rightOperand]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [ + this.leftOperand, + this.rightOperand + ]); this.leftOperand = tryToHug(this.leftOperand); } diff --git a/src/slang-nodes/ErrorDefinition.ts b/src/slang-nodes/ErrorDefinition.ts index e643bc52c..c8cd7d52d 100644 --- a/src/slang-nodes/ErrorDefinition.ts +++ b/src/slang-nodes/ErrorDefinition.ts @@ -20,14 +20,12 @@ export class ErrorDefinition implements SlangNode { members: ErrorParametersDeclaration; constructor(ast: ast.ErrorDefinition, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.name = new Identifier(ast.name); this.members = new ErrorParametersDeclaration(ast.members, options); - metadata = updateMetadata(metadata, [this.members]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.members]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ErrorParameter.ts b/src/slang-nodes/ErrorParameter.ts index ddf004fc6..7642cf1c2 100644 --- a/src/slang-nodes/ErrorParameter.ts +++ b/src/slang-nodes/ErrorParameter.ts @@ -21,16 +21,14 @@ export class ErrorParameter implements SlangNode { name?: Identifier; constructor(ast: ast.ErrorParameter, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.typeName = new TypeName(ast.typeName, options); if (ast.name) { this.name = new Identifier(ast.name); } - metadata = updateMetadata(metadata, [this.typeName]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.typeName]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ErrorParameters.ts b/src/slang-nodes/ErrorParameters.ts index a9c01854e..544ce99a9 100644 --- a/src/slang-nodes/ErrorParameters.ts +++ b/src/slang-nodes/ErrorParameters.ts @@ -18,13 +18,11 @@ export class ErrorParameters implements SlangNode { items: ErrorParameter[]; constructor(ast: ast.ErrorParameters, options: ParserOptions) { - let metadata = getNodeMetadata(ast, true); + const metadata = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new ErrorParameter(item, options)); - metadata = updateMetadata(metadata, [this.items]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ErrorParametersDeclaration.ts b/src/slang-nodes/ErrorParametersDeclaration.ts index 411e6a00e..6bec2c6ef 100644 --- a/src/slang-nodes/ErrorParametersDeclaration.ts +++ b/src/slang-nodes/ErrorParametersDeclaration.ts @@ -20,13 +20,11 @@ export class ErrorParametersDeclaration implements SlangNode { ast: ast.ErrorParametersDeclaration, options: ParserOptions ) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.parameters = new ErrorParameters(ast.parameters, options); - metadata = updateMetadata(metadata, [this.parameters]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.parameters]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/EventDefinition.ts b/src/slang-nodes/EventDefinition.ts index 5428361e7..84d5b9cbe 100644 --- a/src/slang-nodes/EventDefinition.ts +++ b/src/slang-nodes/EventDefinition.ts @@ -22,15 +22,13 @@ export class EventDefinition implements SlangNode { anonymousKeyword?: string; constructor(ast: ast.EventDefinition, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.name = new Identifier(ast.name); this.parameters = new EventParametersDeclaration(ast.parameters, options); this.anonymousKeyword = ast.anonymousKeyword?.unparse(); - metadata = updateMetadata(metadata, [this.parameters]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.parameters]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/EventParameter.ts b/src/slang-nodes/EventParameter.ts index 2619ddedd..ae97d5022 100644 --- a/src/slang-nodes/EventParameter.ts +++ b/src/slang-nodes/EventParameter.ts @@ -23,7 +23,7 @@ export class EventParameter implements SlangNode { name?: Identifier; constructor(ast: ast.EventParameter, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.typeName = new TypeName(ast.typeName, options); this.indexedKeyword = ast.indexedKeyword?.unparse(); @@ -31,9 +31,7 @@ export class EventParameter implements SlangNode { this.name = new Identifier(ast.name); } - metadata = updateMetadata(metadata, [this.typeName]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.typeName]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/EventParameters.ts b/src/slang-nodes/EventParameters.ts index 02d39c6c7..1159e0363 100644 --- a/src/slang-nodes/EventParameters.ts +++ b/src/slang-nodes/EventParameters.ts @@ -18,13 +18,11 @@ export class EventParameters implements SlangNode { items: EventParameter[]; constructor(ast: ast.EventParameters, options: ParserOptions) { - let metadata = getNodeMetadata(ast, true); + const metadata = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new EventParameter(item, options)); - metadata = updateMetadata(metadata, [this.items]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/EventParametersDeclaration.ts b/src/slang-nodes/EventParametersDeclaration.ts index a4512702a..427c827b6 100644 --- a/src/slang-nodes/EventParametersDeclaration.ts +++ b/src/slang-nodes/EventParametersDeclaration.ts @@ -20,13 +20,11 @@ export class EventParametersDeclaration implements SlangNode { ast: ast.EventParametersDeclaration, options: ParserOptions ) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.parameters = new EventParameters(ast.parameters, options); - metadata = updateMetadata(metadata, [this.parameters]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.parameters]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ExperimentalFeature.ts b/src/slang-nodes/ExperimentalFeature.ts index 220ece8b1..ea9135b71 100644 --- a/src/slang-nodes/ExperimentalFeature.ts +++ b/src/slang-nodes/ExperimentalFeature.ts @@ -22,19 +22,17 @@ export class ExperimentalFeature implements SlangNode { variant: StringLiteral | Identifier; constructor(ast: ast.ExperimentalFeature, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.variant = ast.variant instanceof TerminalNode ? new Identifier(ast.variant) : new StringLiteral(ast.variant, options); - metadata = updateMetadata( + [this.loc, this.comments] = updateMetadata( metadata, this.variant.kind === TerminalKind.Identifier ? [] : [this.variant] ); - - [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ExperimentalPragma.ts b/src/slang-nodes/ExperimentalPragma.ts index b1c733e52..383ade03d 100644 --- a/src/slang-nodes/ExperimentalPragma.ts +++ b/src/slang-nodes/ExperimentalPragma.ts @@ -17,13 +17,11 @@ export class ExperimentalPragma implements SlangNode { feature: ExperimentalFeature; constructor(ast: ast.ExperimentalPragma, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.feature = new ExperimentalFeature(ast.feature, options); - metadata = updateMetadata(metadata, [this.feature]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.feature]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ExponentiationExpression.ts b/src/slang-nodes/ExponentiationExpression.ts index 818a04a63..3206a46ca 100644 --- a/src/slang-nodes/ExponentiationExpression.ts +++ b/src/slang-nodes/ExponentiationExpression.ts @@ -53,15 +53,16 @@ export class ExponentiationExpression implements SlangNode { ast: ast.ExponentiationExpression, options: ParserOptions ) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.leftOperand = new Expression(ast.leftOperand, options); this.operator = ast.operator.unparse(); this.rightOperand = new Expression(ast.rightOperand, options); - metadata = updateMetadata(metadata, [this.leftOperand, this.rightOperand]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [ + this.leftOperand, + this.rightOperand + ]); this.rightOperand = tryToHug(this.rightOperand); this.leftOperand = tryToHug(this.leftOperand); diff --git a/src/slang-nodes/Expression.ts b/src/slang-nodes/Expression.ts index d0862948e..dc58b25c1 100644 --- a/src/slang-nodes/Expression.ts +++ b/src/slang-nodes/Expression.ts @@ -76,7 +76,7 @@ export class Expression implements SlangNode { | Identifier; constructor(ast: ast.Expression, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); if (ast.variant instanceof TerminalNode) { this.variant = new Identifier(ast.variant); @@ -244,12 +244,10 @@ export class Expression implements SlangNode { } } - metadata = updateMetadata( + [this.loc, this.comments] = updateMetadata( metadata, this.variant.kind === TerminalKind.Identifier ? [] : [this.variant] ); - - [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ExpressionStatement.ts b/src/slang-nodes/ExpressionStatement.ts index 7ab8d7f21..3cf638072 100644 --- a/src/slang-nodes/ExpressionStatement.ts +++ b/src/slang-nodes/ExpressionStatement.ts @@ -17,13 +17,11 @@ export class ExpressionStatement implements SlangNode { expression: Expression; constructor(ast: ast.ExpressionStatement, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.expression = new Expression(ast.expression, options); - metadata = updateMetadata(metadata, [this.expression]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.expression]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/FallbackFunctionAttribute.ts b/src/slang-nodes/FallbackFunctionAttribute.ts index d1be09c99..55297b96d 100644 --- a/src/slang-nodes/FallbackFunctionAttribute.ts +++ b/src/slang-nodes/FallbackFunctionAttribute.ts @@ -21,7 +21,7 @@ export class FallbackFunctionAttribute implements SlangNode { ast: ast.FallbackFunctionAttribute, options: ParserOptions ) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); if (ast.variant instanceof TerminalNode) { this.variant = ast.variant.unparse(); @@ -43,12 +43,10 @@ export class FallbackFunctionAttribute implements SlangNode { } } - metadata = updateMetadata( + [this.loc, this.comments] = updateMetadata( metadata, typeof this.variant === 'string' ? [] : [this.variant] ); - - [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/FallbackFunctionAttributes.ts b/src/slang-nodes/FallbackFunctionAttributes.ts index b272bc011..a69434258 100644 --- a/src/slang-nodes/FallbackFunctionAttributes.ts +++ b/src/slang-nodes/FallbackFunctionAttributes.ts @@ -24,15 +24,13 @@ export class FallbackFunctionAttributes implements SlangNode { ast: ast.FallbackFunctionAttributes, options: ParserOptions ) { - let metadata = getNodeMetadata(ast, true); + const metadata = getNodeMetadata(ast, true); this.items = ast.items.map( (item) => new FallbackFunctionAttribute(item, options) ); - metadata = updateMetadata(metadata, [this.items]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.items]); this.items = this.items.sort(sortFunctionAttributes); } diff --git a/src/slang-nodes/FallbackFunctionDefinition.ts b/src/slang-nodes/FallbackFunctionDefinition.ts index 6d3196124..0d1952f7b 100644 --- a/src/slang-nodes/FallbackFunctionDefinition.ts +++ b/src/slang-nodes/FallbackFunctionDefinition.ts @@ -30,7 +30,7 @@ export class FallbackFunctionDefinition implements SlangNode { ast: ast.FallbackFunctionDefinition, options: ParserOptions ) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.parameters = new ParametersDeclaration(ast.parameters, options); this.attributes = new FallbackFunctionAttributes(ast.attributes, options); @@ -39,15 +39,13 @@ export class FallbackFunctionDefinition implements SlangNode { } this.body = new FunctionBody(ast.body, options); - metadata = updateMetadata(metadata, [ + [this.loc, this.comments] = updateMetadata(metadata, [ this.parameters, this.attributes, this.returns, this.body ]); - [this.loc, this.comments] = metadata; - this.cleanModifierInvocationArguments(); } diff --git a/src/slang-nodes/ForStatement.ts b/src/slang-nodes/ForStatement.ts index a2cfed736..e2b8e0830 100644 --- a/src/slang-nodes/ForStatement.ts +++ b/src/slang-nodes/ForStatement.ts @@ -30,7 +30,7 @@ export class ForStatement implements SlangNode { body: Statement; constructor(ast: ast.ForStatement, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.initialization = new ForStatementInitialization( ast.initialization, @@ -42,14 +42,12 @@ export class ForStatement implements SlangNode { } this.body = new Statement(ast.body, options); - metadata = updateMetadata(metadata, [ + [this.loc, this.comments] = updateMetadata(metadata, [ this.initialization, this.condition, this.iterator, this.body ]); - - [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ForStatementCondition.ts b/src/slang-nodes/ForStatementCondition.ts index ee7e9f120..6ad65aa03 100644 --- a/src/slang-nodes/ForStatementCondition.ts +++ b/src/slang-nodes/ForStatementCondition.ts @@ -17,19 +17,17 @@ export class ForStatementCondition implements SlangNode { variant: ExpressionStatement | string; constructor(ast: ast.ForStatementCondition, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.variant = ast.variant instanceof TerminalNode ? ast.variant.unparse() : new ExpressionStatement(ast.variant, options); - metadata = updateMetadata( + [this.loc, this.comments] = updateMetadata( metadata, typeof this.variant === 'string' ? [] : [this.variant] ); - - [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ForStatementInitialization.ts b/src/slang-nodes/ForStatementInitialization.ts index ce12ef3f5..7b8609abc 100644 --- a/src/slang-nodes/ForStatementInitialization.ts +++ b/src/slang-nodes/ForStatementInitialization.ts @@ -26,7 +26,7 @@ export class ForStatementInitialization implements SlangNode { ast: ast.ForStatementInitialization, options: ParserOptions ) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); if (ast.variant instanceof TerminalNode) { this.variant = ast.variant.unparse(); @@ -55,12 +55,10 @@ export class ForStatementInitialization implements SlangNode { } } - metadata = updateMetadata( + [this.loc, this.comments] = updateMetadata( metadata, typeof this.variant === 'string' ? [] : [this.variant] ); - - [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/FunctionAttribute.ts b/src/slang-nodes/FunctionAttribute.ts index 07358fad3..48cea1fb4 100644 --- a/src/slang-nodes/FunctionAttribute.ts +++ b/src/slang-nodes/FunctionAttribute.ts @@ -18,7 +18,7 @@ export class FunctionAttribute implements SlangNode { variant: ModifierInvocation | OverrideSpecifier | string; constructor(ast: ast.FunctionAttribute, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); if (ast.variant instanceof TerminalNode) { this.variant = ast.variant.unparse(); @@ -40,12 +40,10 @@ export class FunctionAttribute implements SlangNode { } } - metadata = updateMetadata( + [this.loc, this.comments] = updateMetadata( metadata, typeof this.variant === 'string' ? [] : [this.variant] ); - - [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/FunctionAttributes.ts b/src/slang-nodes/FunctionAttributes.ts index 5dcb94e5f..324c1d929 100644 --- a/src/slang-nodes/FunctionAttributes.ts +++ b/src/slang-nodes/FunctionAttributes.ts @@ -21,13 +21,11 @@ export class FunctionAttributes implements SlangNode { items: FunctionAttribute[]; constructor(ast: ast.FunctionAttributes, options: ParserOptions) { - let metadata = getNodeMetadata(ast, true); + const metadata = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new FunctionAttribute(item, options)); - metadata = updateMetadata(metadata, [this.items]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.items]); this.items = this.items.sort(sortFunctionAttributes); } diff --git a/src/slang-nodes/FunctionBody.ts b/src/slang-nodes/FunctionBody.ts index 2aaa6548a..0d31cf407 100644 --- a/src/slang-nodes/FunctionBody.ts +++ b/src/slang-nodes/FunctionBody.ts @@ -17,19 +17,17 @@ export class FunctionBody implements SlangNode { variant: Block | string; constructor(ast: ast.FunctionBody, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.variant = ast.variant instanceof TerminalNode ? ast.variant.unparse() : new Block(ast.variant, options); - metadata = updateMetadata( + [this.loc, this.comments] = updateMetadata( metadata, typeof this.variant === 'string' ? [] : [this.variant] ); - - [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/FunctionCallExpression.ts b/src/slang-nodes/FunctionCallExpression.ts index 4a05697ae..7d28447c4 100644 --- a/src/slang-nodes/FunctionCallExpression.ts +++ b/src/slang-nodes/FunctionCallExpression.ts @@ -27,14 +27,15 @@ export class FunctionCallExpression implements SlangNode { ast: ast.FunctionCallExpression, options: ParserOptions ) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.operand = new Expression(ast.operand, options); this.arguments = new ArgumentsDeclaration(ast.arguments, options); - metadata = updateMetadata(metadata, [this.operand, this.arguments]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [ + this.operand, + this.arguments + ]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/FunctionDefinition.ts b/src/slang-nodes/FunctionDefinition.ts index 1f54f9475..1d3474674 100644 --- a/src/slang-nodes/FunctionDefinition.ts +++ b/src/slang-nodes/FunctionDefinition.ts @@ -31,7 +31,7 @@ export class FunctionDefinition implements SlangNode { body: FunctionBody; constructor(ast: ast.FunctionDefinition, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.name = new FunctionName(ast.name); this.parameters = new ParametersDeclaration(ast.parameters, options); @@ -41,7 +41,7 @@ export class FunctionDefinition implements SlangNode { } this.body = new FunctionBody(ast.body, options); - metadata = updateMetadata(metadata, [ + [this.loc, this.comments] = updateMetadata(metadata, [ this.name, this.parameters, this.attributes, @@ -49,8 +49,6 @@ export class FunctionDefinition implements SlangNode { this.body ]); - [this.loc, this.comments] = metadata; - // Older versions of Solidity defined a constructor as a function having // the same name as the contract. if (satisfies(options.compiler, '>=0.5.0')) { diff --git a/src/slang-nodes/FunctionName.ts b/src/slang-nodes/FunctionName.ts index 25951bb52..5f2cf6010 100644 --- a/src/slang-nodes/FunctionName.ts +++ b/src/slang-nodes/FunctionName.ts @@ -16,11 +16,9 @@ export class FunctionName implements SlangNode { variant: Identifier; constructor(ast: ast.FunctionName) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.variant = new Identifier(ast.variant); - - [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/FunctionType.ts b/src/slang-nodes/FunctionType.ts index 77aaba3dd..a34cbbb31 100644 --- a/src/slang-nodes/FunctionType.ts +++ b/src/slang-nodes/FunctionType.ts @@ -24,7 +24,7 @@ export class FunctionType implements SlangNode { returns?: ReturnsDeclaration; constructor(ast: ast.FunctionType, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.parameters = new ParametersDeclaration(ast.parameters, options); this.attributes = new FunctionTypeAttributes(ast.attributes); @@ -32,13 +32,11 @@ export class FunctionType implements SlangNode { this.returns = new ReturnsDeclaration(ast.returns, options); } - metadata = updateMetadata(metadata, [ + [this.loc, this.comments] = updateMetadata(metadata, [ this.parameters, this.attributes, this.returns ]); - - [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/FunctionTypeAttribute.ts b/src/slang-nodes/FunctionTypeAttribute.ts index f298eb2fc..e45f56219 100644 --- a/src/slang-nodes/FunctionTypeAttribute.ts +++ b/src/slang-nodes/FunctionTypeAttribute.ts @@ -15,11 +15,9 @@ export class FunctionTypeAttribute implements SlangNode { variant: string; constructor(ast: ast.FunctionTypeAttribute) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.variant = ast.variant.unparse(); - - [this.loc, this.comments] = metadata; } print(): Doc { diff --git a/src/slang-nodes/FunctionTypeAttributes.ts b/src/slang-nodes/FunctionTypeAttributes.ts index 9289eb6bd..d5678fe64 100644 --- a/src/slang-nodes/FunctionTypeAttributes.ts +++ b/src/slang-nodes/FunctionTypeAttributes.ts @@ -20,13 +20,11 @@ export class FunctionTypeAttributes implements SlangNode { items: FunctionTypeAttribute[]; constructor(ast: ast.FunctionTypeAttributes) { - let metadata = getNodeMetadata(ast, true); + const metadata = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new FunctionTypeAttribute(item)); - metadata = updateMetadata(metadata, [this.items]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.items]); this.items = this.items.sort(sortFunctionAttributes); } diff --git a/src/slang-nodes/HexNumberExpression.ts b/src/slang-nodes/HexNumberExpression.ts index bb3ca4186..27ba8dd7a 100644 --- a/src/slang-nodes/HexNumberExpression.ts +++ b/src/slang-nodes/HexNumberExpression.ts @@ -19,16 +19,14 @@ export class HexNumberExpression implements SlangNode { unit?: NumberUnit; constructor(ast: ast.HexNumberExpression) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.literal = ast.literal.unparse(); if (ast.unit) { this.unit = new NumberUnit(ast.unit); } - metadata = updateMetadata(metadata, [this.unit]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.unit]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/HexStringLiteral.ts b/src/slang-nodes/HexStringLiteral.ts index 58ddc0d79..2656506ae 100644 --- a/src/slang-nodes/HexStringLiteral.ts +++ b/src/slang-nodes/HexStringLiteral.ts @@ -17,12 +17,10 @@ export class HexStringLiteral implements SlangNode { variant: string; constructor(ast: ast.HexStringLiteral, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.variant = ast.variant.unparse(); - [this.loc, this.comments] = metadata; - this.variant = `hex${printString(this.variant.slice(4, -1), options)}`; } diff --git a/src/slang-nodes/HexStringLiterals.ts b/src/slang-nodes/HexStringLiterals.ts index c007816f4..adeee5d58 100644 --- a/src/slang-nodes/HexStringLiterals.ts +++ b/src/slang-nodes/HexStringLiterals.ts @@ -20,13 +20,11 @@ export class HexStringLiterals implements SlangNode { items: HexStringLiteral[]; constructor(ast: ast.HexStringLiterals, options: ParserOptions) { - let metadata = getNodeMetadata(ast, true); + const metadata = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new HexStringLiteral(item, options)); - metadata = updateMetadata(metadata, [this.items]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/Identifier.ts b/src/slang-nodes/Identifier.ts index af7c35711..74491dcba 100644 --- a/src/slang-nodes/Identifier.ts +++ b/src/slang-nodes/Identifier.ts @@ -15,11 +15,9 @@ export class Identifier implements SlangNode { value: string; constructor(ast: TerminalNode) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.value = ast.unparse(); - - [this.loc, this.comments] = metadata; } print(): Doc { diff --git a/src/slang-nodes/IdentifierPath.ts b/src/slang-nodes/IdentifierPath.ts index f5c8bb847..0ebcf4cf1 100644 --- a/src/slang-nodes/IdentifierPath.ts +++ b/src/slang-nodes/IdentifierPath.ts @@ -19,11 +19,9 @@ export class IdentifierPath implements SlangNode { items: Identifier[]; constructor(ast: ast.IdentifierPath) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.items = ast.items.map((item) => new Identifier(item)); - - [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/IfStatement.ts b/src/slang-nodes/IfStatement.ts index 434e1dc6d..791d28ce2 100644 --- a/src/slang-nodes/IfStatement.ts +++ b/src/slang-nodes/IfStatement.ts @@ -28,7 +28,7 @@ export class IfStatement implements SlangNode { elseBranch?: ElseBranch; constructor(ast: ast.IfStatement, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.condition = new Expression(ast.condition, options); this.body = new Statement(ast.body, options); @@ -36,13 +36,11 @@ export class IfStatement implements SlangNode { this.elseBranch = new ElseBranch(ast.elseBranch, options); } - metadata = updateMetadata(metadata, [ + [this.loc, this.comments] = updateMetadata(metadata, [ this.condition, this.body, this.elseBranch ]); - - [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ImportAlias.ts b/src/slang-nodes/ImportAlias.ts index f62a131d4..ba9b47608 100644 --- a/src/slang-nodes/ImportAlias.ts +++ b/src/slang-nodes/ImportAlias.ts @@ -16,11 +16,9 @@ export class ImportAlias implements SlangNode { identifier: Identifier; constructor(ast: ast.ImportAlias) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.identifier = new Identifier(ast.identifier); - - [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ImportClause.ts b/src/slang-nodes/ImportClause.ts index a939feb75..e60fe0ab1 100644 --- a/src/slang-nodes/ImportClause.ts +++ b/src/slang-nodes/ImportClause.ts @@ -19,7 +19,7 @@ export class ImportClause implements SlangNode { variant: PathImport | NamedImport | ImportDeconstruction; constructor(ast: ast.ImportClause, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); switch (ast.variant.cst.kind) { case NonterminalKind.PathImport: @@ -38,9 +38,7 @@ export class ImportClause implements SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - metadata = updateMetadata(metadata, [this.variant]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ImportDeconstruction.ts b/src/slang-nodes/ImportDeconstruction.ts index d33aefd71..adb24701d 100644 --- a/src/slang-nodes/ImportDeconstruction.ts +++ b/src/slang-nodes/ImportDeconstruction.ts @@ -20,14 +20,15 @@ export class ImportDeconstruction implements SlangNode { path: StringLiteral; constructor(ast: ast.ImportDeconstruction, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.symbols = new ImportDeconstructionSymbols(ast.symbols); this.path = new StringLiteral(ast.path, options); - metadata = updateMetadata(metadata, [this.symbols, this.path]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [ + this.symbols, + this.path + ]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ImportDeconstructionSymbol.ts b/src/slang-nodes/ImportDeconstructionSymbol.ts index eba863681..df492ce79 100644 --- a/src/slang-nodes/ImportDeconstructionSymbol.ts +++ b/src/slang-nodes/ImportDeconstructionSymbol.ts @@ -19,16 +19,14 @@ export class ImportDeconstructionSymbol implements SlangNode { alias?: ImportAlias; constructor(ast: ast.ImportDeconstructionSymbol) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.name = new Identifier(ast.name); if (ast.alias) { this.alias = new ImportAlias(ast.alias); } - metadata = updateMetadata(metadata, [this.alias]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.alias]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ImportDeconstructionSymbols.ts b/src/slang-nodes/ImportDeconstructionSymbols.ts index bd2cd955a..b86e67350 100644 --- a/src/slang-nodes/ImportDeconstructionSymbols.ts +++ b/src/slang-nodes/ImportDeconstructionSymbols.ts @@ -22,13 +22,11 @@ export class ImportDeconstructionSymbols implements SlangNode { items: ImportDeconstructionSymbol[]; constructor(ast: ast.ImportDeconstructionSymbols) { - let metadata = getNodeMetadata(ast, true); + const metadata = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new ImportDeconstructionSymbol(item)); - metadata = updateMetadata(metadata, [this.items]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.items]); } print( diff --git a/src/slang-nodes/ImportDirective.ts b/src/slang-nodes/ImportDirective.ts index 683a78517..87b0bb035 100644 --- a/src/slang-nodes/ImportDirective.ts +++ b/src/slang-nodes/ImportDirective.ts @@ -17,13 +17,11 @@ export class ImportDirective implements SlangNode { clause: ImportClause; constructor(ast: ast.ImportDirective, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.clause = new ImportClause(ast.clause, options); - metadata = updateMetadata(metadata, [this.clause]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.clause]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/IndexAccessEnd.ts b/src/slang-nodes/IndexAccessEnd.ts index 61432de81..06e1d43ae 100644 --- a/src/slang-nodes/IndexAccessEnd.ts +++ b/src/slang-nodes/IndexAccessEnd.ts @@ -17,15 +17,13 @@ export class IndexAccessEnd implements SlangNode { end?: Expression; constructor(ast: ast.IndexAccessEnd, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); if (ast.end) { this.end = new Expression(ast.end, options); } - metadata = updateMetadata(metadata, [this.end]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.end]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/IndexAccessExpression.ts b/src/slang-nodes/IndexAccessExpression.ts index 2df6f90f4..ea76d354c 100644 --- a/src/slang-nodes/IndexAccessExpression.ts +++ b/src/slang-nodes/IndexAccessExpression.ts @@ -27,7 +27,7 @@ export class IndexAccessExpression implements SlangNode { end?: IndexAccessEnd; constructor(ast: ast.IndexAccessExpression, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.operand = new Expression(ast.operand, options); if (ast.start) { @@ -37,9 +37,11 @@ export class IndexAccessExpression implements SlangNode { this.end = new IndexAccessEnd(ast.end, options); } - metadata = updateMetadata(metadata, [this.operand, this.start, this.end]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [ + this.operand, + this.start, + this.end + ]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/InequalityExpression.ts b/src/slang-nodes/InequalityExpression.ts index 42de1d850..2de94240a 100644 --- a/src/slang-nodes/InequalityExpression.ts +++ b/src/slang-nodes/InequalityExpression.ts @@ -31,15 +31,16 @@ export class InequalityExpression implements SlangNode { rightOperand: Expression; constructor(ast: ast.InequalityExpression, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.leftOperand = new Expression(ast.leftOperand, options); this.operator = ast.operator.unparse(); this.rightOperand = new Expression(ast.rightOperand, options); - metadata = updateMetadata(metadata, [this.leftOperand, this.rightOperand]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [ + this.leftOperand, + this.rightOperand + ]); } print( diff --git a/src/slang-nodes/InheritanceSpecifier.ts b/src/slang-nodes/InheritanceSpecifier.ts index 81f58519d..75a51f18e 100644 --- a/src/slang-nodes/InheritanceSpecifier.ts +++ b/src/slang-nodes/InheritanceSpecifier.ts @@ -17,13 +17,11 @@ export class InheritanceSpecifier implements SlangNode { types: InheritanceTypes; constructor(ast: ast.InheritanceSpecifier, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.types = new InheritanceTypes(ast.types, options); - metadata = updateMetadata(metadata, [this.types]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.types]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/InheritanceType.ts b/src/slang-nodes/InheritanceType.ts index 87f569250..39cdcc601 100644 --- a/src/slang-nodes/InheritanceType.ts +++ b/src/slang-nodes/InheritanceType.ts @@ -20,16 +20,17 @@ export class InheritanceType implements SlangNode { arguments?: ArgumentsDeclaration; constructor(ast: ast.InheritanceType, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.typeName = new IdentifierPath(ast.typeName); if (ast.arguments) { this.arguments = new ArgumentsDeclaration(ast.arguments, options); } - metadata = updateMetadata(metadata, [this.typeName, this.arguments]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [ + this.typeName, + this.arguments + ]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/InheritanceTypes.ts b/src/slang-nodes/InheritanceTypes.ts index f7280439b..c9375202c 100644 --- a/src/slang-nodes/InheritanceTypes.ts +++ b/src/slang-nodes/InheritanceTypes.ts @@ -21,13 +21,11 @@ export class InheritanceTypes implements SlangNode { items: InheritanceType[]; constructor(ast: ast.InheritanceTypes, options: ParserOptions) { - let metadata = getNodeMetadata(ast, true); + const metadata = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new InheritanceType(item, options)); - metadata = updateMetadata(metadata, [this.items]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/InterfaceDefinition.ts b/src/slang-nodes/InterfaceDefinition.ts index a26ab55a4..759fece6a 100644 --- a/src/slang-nodes/InterfaceDefinition.ts +++ b/src/slang-nodes/InterfaceDefinition.ts @@ -26,7 +26,7 @@ export class InterfaceDefinition implements SlangNode { members: InterfaceMembers; constructor(ast: ast.InterfaceDefinition, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.name = new Identifier(ast.name); if (ast.inheritance) { @@ -34,9 +34,10 @@ export class InterfaceDefinition implements SlangNode { } this.members = new InterfaceMembers(ast.members, options); - metadata = updateMetadata(metadata, [this.inheritance, this.members]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [ + this.inheritance, + this.members + ]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/InterfaceMembers.ts b/src/slang-nodes/InterfaceMembers.ts index 0e1b81c3e..3f928dca7 100644 --- a/src/slang-nodes/InterfaceMembers.ts +++ b/src/slang-nodes/InterfaceMembers.ts @@ -22,13 +22,11 @@ export class InterfaceMembers implements SlangNode { items: ContractMember[]; constructor(ast: ast.InterfaceMembers, options: ParserOptions) { - let metadata = getNodeMetadata(ast, true); + const metadata = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new ContractMember(item, options)); - metadata = updateMetadata(metadata, [this.items]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.items]); } print( diff --git a/src/slang-nodes/LibraryDefinition.ts b/src/slang-nodes/LibraryDefinition.ts index 2c44991de..441b985eb 100644 --- a/src/slang-nodes/LibraryDefinition.ts +++ b/src/slang-nodes/LibraryDefinition.ts @@ -23,14 +23,12 @@ export class LibraryDefinition implements SlangNode { members: LibraryMembers; constructor(ast: ast.LibraryDefinition, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.name = new Identifier(ast.name); this.members = new LibraryMembers(ast.members, options); - metadata = updateMetadata(metadata, [this.members]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.members]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/LibraryMembers.ts b/src/slang-nodes/LibraryMembers.ts index 0c49602cd..2b72c72b3 100644 --- a/src/slang-nodes/LibraryMembers.ts +++ b/src/slang-nodes/LibraryMembers.ts @@ -22,13 +22,11 @@ export class LibraryMembers implements SlangNode { items: ContractMember[]; constructor(ast: ast.LibraryMembers, options: ParserOptions) { - let metadata = getNodeMetadata(ast, true); + const metadata = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new ContractMember(item, options)); - metadata = updateMetadata(metadata, [this.items]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.items]); } print( diff --git a/src/slang-nodes/MappingKey.ts b/src/slang-nodes/MappingKey.ts index da7a6958b..27bb7a722 100644 --- a/src/slang-nodes/MappingKey.ts +++ b/src/slang-nodes/MappingKey.ts @@ -20,16 +20,14 @@ export class MappingKey implements SlangNode { name?: Identifier; constructor(ast: ast.MappingKey) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.keyType = new MappingKeyType(ast.keyType); if (ast.name) { this.name = new Identifier(ast.name); } - metadata = updateMetadata(metadata, [this.keyType]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.keyType]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/MappingKeyType.ts b/src/slang-nodes/MappingKeyType.ts index 2e4e7a3e1..1c0edd134 100644 --- a/src/slang-nodes/MappingKeyType.ts +++ b/src/slang-nodes/MappingKeyType.ts @@ -17,7 +17,7 @@ export class MappingKeyType implements SlangNode { variant: ElementaryType | IdentifierPath; constructor(ast: ast.MappingKeyType) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); switch (ast.variant.cst.kind) { case NonterminalKind.ElementaryType: @@ -30,9 +30,7 @@ export class MappingKeyType implements SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - metadata = updateMetadata(metadata, [this.variant]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/MappingType.ts b/src/slang-nodes/MappingType.ts index 0320c6553..95e846987 100644 --- a/src/slang-nodes/MappingType.ts +++ b/src/slang-nodes/MappingType.ts @@ -20,14 +20,15 @@ export class MappingType implements SlangNode { valueType: MappingValue; constructor(ast: ast.MappingType, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.keyType = new MappingKey(ast.keyType); this.valueType = new MappingValue(ast.valueType, options); - metadata = updateMetadata(metadata, [this.keyType, this.valueType]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [ + this.keyType, + this.valueType + ]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/MappingValue.ts b/src/slang-nodes/MappingValue.ts index 44d87eee4..28ce267f8 100644 --- a/src/slang-nodes/MappingValue.ts +++ b/src/slang-nodes/MappingValue.ts @@ -21,16 +21,14 @@ export class MappingValue implements SlangNode { name?: Identifier; constructor(ast: ast.MappingValue, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.typeName = new TypeName(ast.typeName, options); if (ast.name) { this.name = new Identifier(ast.name); } - metadata = updateMetadata(metadata, [this.typeName]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.typeName]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/MemberAccessExpression.ts b/src/slang-nodes/MemberAccessExpression.ts index 4f0914c5c..24b6efd7d 100644 --- a/src/slang-nodes/MemberAccessExpression.ts +++ b/src/slang-nodes/MemberAccessExpression.ts @@ -126,14 +126,12 @@ export class MemberAccessExpression implements SlangNode { ast: ast.MemberAccessExpression, options: ParserOptions ) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.operand = new Expression(ast.operand, options); this.member = new Identifier(ast.member); - metadata = updateMetadata(metadata, [this.operand]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.operand]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ModifierAttribute.ts b/src/slang-nodes/ModifierAttribute.ts index 2a3c7a14f..c57419f04 100644 --- a/src/slang-nodes/ModifierAttribute.ts +++ b/src/slang-nodes/ModifierAttribute.ts @@ -16,19 +16,17 @@ export class ModifierAttribute implements SlangNode { variant: OverrideSpecifier | string; constructor(ast: ast.ModifierAttribute) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.variant = ast.variant instanceof TerminalNode ? ast.variant.unparse() : new OverrideSpecifier(ast.variant); - metadata = updateMetadata( + [this.loc, this.comments] = updateMetadata( metadata, typeof this.variant === 'string' ? [] : [this.variant] ); - - [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ModifierAttributes.ts b/src/slang-nodes/ModifierAttributes.ts index c6b78c701..bd4c156b8 100644 --- a/src/slang-nodes/ModifierAttributes.ts +++ b/src/slang-nodes/ModifierAttributes.ts @@ -20,13 +20,11 @@ export class ModifierAttributes implements SlangNode { items: ModifierAttribute[]; constructor(ast: ast.ModifierAttributes) { - let metadata = getNodeMetadata(ast, true); + const metadata = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new ModifierAttribute(item)); - metadata = updateMetadata(metadata, [this.items]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.items]); this.items = this.items.sort(sortFunctionAttributes); } diff --git a/src/slang-nodes/ModifierDefinition.ts b/src/slang-nodes/ModifierDefinition.ts index 1a0edee88..a3ab9cf09 100644 --- a/src/slang-nodes/ModifierDefinition.ts +++ b/src/slang-nodes/ModifierDefinition.ts @@ -28,7 +28,7 @@ export class ModifierDefinition implements SlangNode { body: FunctionBody; constructor(ast: ast.ModifierDefinition, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.name = new Identifier(ast.name); if (ast.parameters) { @@ -37,14 +37,12 @@ export class ModifierDefinition implements SlangNode { this.attributes = new ModifierAttributes(ast.attributes); this.body = new FunctionBody(ast.body, options); - metadata = updateMetadata(metadata, [ + [this.loc, this.comments] = updateMetadata(metadata, [ this.parameters, this.attributes, this.body ]); - [this.loc, this.comments] = metadata; - if (!this.parameters) { const parametersOffset = this.attributes.loc.start - this.attributes.loc.leadingOffset; diff --git a/src/slang-nodes/ModifierInvocation.ts b/src/slang-nodes/ModifierInvocation.ts index c391ad56c..9f70ef4ab 100644 --- a/src/slang-nodes/ModifierInvocation.ts +++ b/src/slang-nodes/ModifierInvocation.ts @@ -20,16 +20,17 @@ export class ModifierInvocation implements SlangNode { arguments?: ArgumentsDeclaration; constructor(ast: ast.ModifierInvocation, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.name = new IdentifierPath(ast.name); if (ast.arguments) { this.arguments = new ArgumentsDeclaration(ast.arguments, options); } - metadata = updateMetadata(metadata, [this.name, this.arguments]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [ + this.name, + this.arguments + ]); } cleanModifierInvocationArguments(): void { diff --git a/src/slang-nodes/MultiLineComment.ts b/src/slang-nodes/MultiLineComment.ts index b5a8fc4ed..25786ffaf 100644 --- a/src/slang-nodes/MultiLineComment.ts +++ b/src/slang-nodes/MultiLineComment.ts @@ -32,11 +32,9 @@ export class MultiLineComment implements SlangNode, BaseComment { followingNode?: StrictAstNode; constructor(ast: TerminalNode) { - const metadata = getNodeMetadata(ast); + [this.loc] = getNodeMetadata(ast); this.value = ast.unparse(); - - [this.loc] = metadata; } print(): Doc { diff --git a/src/slang-nodes/MultiLineNatSpecComment.ts b/src/slang-nodes/MultiLineNatSpecComment.ts index 6acb78718..4aefb73d5 100644 --- a/src/slang-nodes/MultiLineNatSpecComment.ts +++ b/src/slang-nodes/MultiLineNatSpecComment.ts @@ -32,11 +32,9 @@ export class MultiLineNatSpecComment implements SlangNode, BaseComment { followingNode?: StrictAstNode; constructor(ast: TerminalNode) { - const metadata = getNodeMetadata(ast); + [this.loc] = getNodeMetadata(ast); this.value = ast.unparse(); - - [this.loc] = metadata; } print(): Doc { diff --git a/src/slang-nodes/MultiplicativeExpression.ts b/src/slang-nodes/MultiplicativeExpression.ts index 73985569a..b084f32da 100644 --- a/src/slang-nodes/MultiplicativeExpression.ts +++ b/src/slang-nodes/MultiplicativeExpression.ts @@ -45,15 +45,16 @@ export class MultiplicativeExpression implements SlangNode { ast: ast.MultiplicativeExpression, options: ParserOptions ) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.leftOperand = new Expression(ast.leftOperand, options); this.operator = ast.operator.unparse(); this.rightOperand = new Expression(ast.rightOperand, options); - metadata = updateMetadata(metadata, [this.leftOperand, this.rightOperand]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [ + this.leftOperand, + this.rightOperand + ]); switch (this.operator) { case '*': diff --git a/src/slang-nodes/NamedArgument.ts b/src/slang-nodes/NamedArgument.ts index 420eee0c1..82bb1d62a 100644 --- a/src/slang-nodes/NamedArgument.ts +++ b/src/slang-nodes/NamedArgument.ts @@ -20,14 +20,12 @@ export class NamedArgument implements SlangNode { value: Expression; constructor(ast: ast.NamedArgument, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.name = new Identifier(ast.name); this.value = new Expression(ast.value, options); - metadata = updateMetadata(metadata, [this.value]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.value]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/NamedArgumentGroup.ts b/src/slang-nodes/NamedArgumentGroup.ts index 2cf21519b..a512682bf 100644 --- a/src/slang-nodes/NamedArgumentGroup.ts +++ b/src/slang-nodes/NamedArgumentGroup.ts @@ -17,13 +17,11 @@ export class NamedArgumentGroup implements SlangNode { arguments: NamedArguments; constructor(ast: ast.NamedArgumentGroup, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.arguments = new NamedArguments(ast.arguments, options); - metadata = updateMetadata(metadata, [this.arguments]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.arguments]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/NamedArguments.ts b/src/slang-nodes/NamedArguments.ts index 7d696863d..77892ca48 100644 --- a/src/slang-nodes/NamedArguments.ts +++ b/src/slang-nodes/NamedArguments.ts @@ -21,13 +21,11 @@ export class NamedArguments implements SlangNode { items: NamedArgument[]; constructor(ast: ast.NamedArguments, options: ParserOptions) { - let metadata = getNodeMetadata(ast, true); + const metadata = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new NamedArgument(item, options)); - metadata = updateMetadata(metadata, [this.items]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.items]); } print( diff --git a/src/slang-nodes/NamedArgumentsDeclaration.ts b/src/slang-nodes/NamedArgumentsDeclaration.ts index 451ce898a..447591c3b 100644 --- a/src/slang-nodes/NamedArgumentsDeclaration.ts +++ b/src/slang-nodes/NamedArgumentsDeclaration.ts @@ -20,15 +20,13 @@ export class NamedArgumentsDeclaration implements SlangNode { ast: ast.NamedArgumentsDeclaration, options: ParserOptions ) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); if (ast.arguments) { this.arguments = new NamedArgumentGroup(ast.arguments, options); } - metadata = updateMetadata(metadata, [this.arguments]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.arguments]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/NamedImport.ts b/src/slang-nodes/NamedImport.ts index 5b20a1f89..f2cf56418 100644 --- a/src/slang-nodes/NamedImport.ts +++ b/src/slang-nodes/NamedImport.ts @@ -20,14 +20,15 @@ export class NamedImport implements SlangNode { path: StringLiteral; constructor(ast: ast.NamedImport, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.alias = new ImportAlias(ast.alias); this.path = new StringLiteral(ast.path, options); - metadata = updateMetadata(metadata, [this.alias, this.path]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [ + this.alias, + this.path + ]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/NewExpression.ts b/src/slang-nodes/NewExpression.ts index 7bc665137..167d8fa6d 100644 --- a/src/slang-nodes/NewExpression.ts +++ b/src/slang-nodes/NewExpression.ts @@ -17,13 +17,11 @@ export class NewExpression implements SlangNode { typeName: TypeName; constructor(ast: ast.NewExpression, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.typeName = new TypeName(ast.typeName, options); - metadata = updateMetadata(metadata, [this.typeName]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.typeName]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/NumberUnit.ts b/src/slang-nodes/NumberUnit.ts index 5483b1337..c68b36b62 100644 --- a/src/slang-nodes/NumberUnit.ts +++ b/src/slang-nodes/NumberUnit.ts @@ -15,11 +15,9 @@ export class NumberUnit implements SlangNode { variant: string; constructor(ast: ast.NumberUnit) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.variant = ast.variant.unparse(); - - [this.loc, this.comments] = metadata; } print(): Doc { diff --git a/src/slang-nodes/OrExpression.ts b/src/slang-nodes/OrExpression.ts index c2ddd72a6..85f517ea8 100644 --- a/src/slang-nodes/OrExpression.ts +++ b/src/slang-nodes/OrExpression.ts @@ -25,15 +25,16 @@ export class OrExpression implements SlangNode { rightOperand: Expression; constructor(ast: ast.OrExpression, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.leftOperand = new Expression(ast.leftOperand, options); this.operator = ast.operator.unparse(); this.rightOperand = new Expression(ast.rightOperand, options); - metadata = updateMetadata(metadata, [this.leftOperand, this.rightOperand]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [ + this.leftOperand, + this.rightOperand + ]); this.leftOperand = tryToHug(this.leftOperand); this.rightOperand = tryToHug(this.rightOperand); diff --git a/src/slang-nodes/OverridePaths.ts b/src/slang-nodes/OverridePaths.ts index 116d84301..5ab8908bc 100644 --- a/src/slang-nodes/OverridePaths.ts +++ b/src/slang-nodes/OverridePaths.ts @@ -17,13 +17,11 @@ export class OverridePaths implements SlangNode { items: IdentifierPath[]; constructor(ast: ast.OverridePaths) { - let metadata = getNodeMetadata(ast, true); + const metadata = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new IdentifierPath(item)); - metadata = updateMetadata(metadata, [this.items]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/OverridePathsDeclaration.ts b/src/slang-nodes/OverridePathsDeclaration.ts index 863d87cf9..f4540f92f 100644 --- a/src/slang-nodes/OverridePathsDeclaration.ts +++ b/src/slang-nodes/OverridePathsDeclaration.ts @@ -16,13 +16,11 @@ export class OverridePathsDeclaration implements SlangNode { paths: OverridePaths; constructor(ast: ast.OverridePathsDeclaration) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.paths = new OverridePaths(ast.paths); - metadata = updateMetadata(metadata, [this.paths]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.paths]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/OverrideSpecifier.ts b/src/slang-nodes/OverrideSpecifier.ts index cdfedd160..b2ffd299b 100644 --- a/src/slang-nodes/OverrideSpecifier.ts +++ b/src/slang-nodes/OverrideSpecifier.ts @@ -16,15 +16,13 @@ export class OverrideSpecifier implements SlangNode { overridden?: OverridePathsDeclaration; constructor(ast: ast.OverrideSpecifier) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); if (ast.overridden) { this.overridden = new OverridePathsDeclaration(ast.overridden); } - metadata = updateMetadata(metadata, [this.overridden]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.overridden]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/Parameter.ts b/src/slang-nodes/Parameter.ts index 7c1056911..6733d5cae 100644 --- a/src/slang-nodes/Parameter.ts +++ b/src/slang-nodes/Parameter.ts @@ -27,7 +27,7 @@ export class Parameter implements SlangNode { name?: Identifier; constructor(ast: ast.Parameter, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.typeName = new TypeName(ast.typeName, options); if (ast.storageLocation) { @@ -37,9 +37,10 @@ export class Parameter implements SlangNode { this.name = new Identifier(ast.name); } - metadata = updateMetadata(metadata, [this.typeName, this.storageLocation]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [ + this.typeName, + this.storageLocation + ]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/Parameters.ts b/src/slang-nodes/Parameters.ts index 0f77d42ee..ec38b5454 100644 --- a/src/slang-nodes/Parameters.ts +++ b/src/slang-nodes/Parameters.ts @@ -20,13 +20,11 @@ export class Parameters implements SlangNode { items: Parameter[]; constructor(ast: ast.Parameters, options: ParserOptions) { - let metadata = getNodeMetadata(ast, true); + const metadata = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new Parameter(item, options)); - metadata = updateMetadata(metadata, [this.items]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ParametersDeclaration.ts b/src/slang-nodes/ParametersDeclaration.ts index c7ec97eb5..1dc602483 100644 --- a/src/slang-nodes/ParametersDeclaration.ts +++ b/src/slang-nodes/ParametersDeclaration.ts @@ -17,13 +17,11 @@ export class ParametersDeclaration implements SlangNode { parameters: Parameters; constructor(ast: ast.ParametersDeclaration, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.parameters = new Parameters(ast.parameters, options); - metadata = updateMetadata(metadata, [this.parameters]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.parameters]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/PathImport.ts b/src/slang-nodes/PathImport.ts index 12e923ab9..cc217c347 100644 --- a/src/slang-nodes/PathImport.ts +++ b/src/slang-nodes/PathImport.ts @@ -20,16 +20,17 @@ export class PathImport implements SlangNode { alias?: ImportAlias; constructor(ast: ast.PathImport, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.path = new StringLiteral(ast.path, options); if (ast.alias) { this.alias = new ImportAlias(ast.alias); } - metadata = updateMetadata(metadata, [this.path, this.alias]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [ + this.path, + this.alias + ]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/PositionalArguments.ts b/src/slang-nodes/PositionalArguments.ts index 5403e0108..8953cc944 100644 --- a/src/slang-nodes/PositionalArguments.ts +++ b/src/slang-nodes/PositionalArguments.ts @@ -20,13 +20,11 @@ export class PositionalArguments implements SlangNode { items: Expression[]; constructor(ast: ast.PositionalArguments, options: ParserOptions) { - let metadata = getNodeMetadata(ast, true); + const metadata = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new Expression(item, options)); - metadata = updateMetadata(metadata, [this.items]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/PositionalArgumentsDeclaration.ts b/src/slang-nodes/PositionalArgumentsDeclaration.ts index d02b93477..d425b8a70 100644 --- a/src/slang-nodes/PositionalArgumentsDeclaration.ts +++ b/src/slang-nodes/PositionalArgumentsDeclaration.ts @@ -23,13 +23,11 @@ export class PositionalArgumentsDeclaration implements SlangNode { ast: ast.PositionalArgumentsDeclaration, options: ParserOptions ) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.arguments = new PositionalArguments(ast.arguments, options); - metadata = updateMetadata(metadata, [this.arguments]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.arguments]); // We need to check the comments at this point because they will be removed // from this node into the root node. diff --git a/src/slang-nodes/PostfixExpression.ts b/src/slang-nodes/PostfixExpression.ts index b9a902285..a1b44f150 100644 --- a/src/slang-nodes/PostfixExpression.ts +++ b/src/slang-nodes/PostfixExpression.ts @@ -19,14 +19,12 @@ export class PostfixExpression implements SlangNode { operator: string; constructor(ast: ast.PostfixExpression, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.operand = new Expression(ast.operand, options); this.operator = ast.operator.unparse(); - metadata = updateMetadata(metadata, [this.operand]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.operand]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/Pragma.ts b/src/slang-nodes/Pragma.ts index e15aaeb45..3f46928d1 100644 --- a/src/slang-nodes/Pragma.ts +++ b/src/slang-nodes/Pragma.ts @@ -19,7 +19,7 @@ export class Pragma implements SlangNode { variant: AbicoderPragma | ExperimentalPragma | VersionPragma; constructor(ast: ast.Pragma, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); switch (ast.variant.cst.kind) { case NonterminalKind.AbicoderPragma: @@ -38,9 +38,7 @@ export class Pragma implements SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - metadata = updateMetadata(metadata, [this.variant]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/PragmaDirective.ts b/src/slang-nodes/PragmaDirective.ts index 5b2d4f8cf..b4addaf51 100644 --- a/src/slang-nodes/PragmaDirective.ts +++ b/src/slang-nodes/PragmaDirective.ts @@ -17,13 +17,11 @@ export class PragmaDirective implements SlangNode { pragma: Pragma; constructor(ast: ast.PragmaDirective, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.pragma = new Pragma(ast.pragma, options); - metadata = updateMetadata(metadata, [this.pragma]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.pragma]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/PrefixExpression.ts b/src/slang-nodes/PrefixExpression.ts index 7904fd916..bacc54385 100644 --- a/src/slang-nodes/PrefixExpression.ts +++ b/src/slang-nodes/PrefixExpression.ts @@ -19,14 +19,12 @@ export class PrefixExpression implements SlangNode { operand: Expression; constructor(ast: ast.PrefixExpression, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.operator = ast.operator.unparse(); this.operand = new Expression(ast.operand, options); - metadata = updateMetadata(metadata, [this.operand]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.operand]); if (this.operator === 'delete') { this.operator = `${this.operator} `; diff --git a/src/slang-nodes/ReceiveFunctionAttribute.ts b/src/slang-nodes/ReceiveFunctionAttribute.ts index 588ee4824..efe9cd3f9 100644 --- a/src/slang-nodes/ReceiveFunctionAttribute.ts +++ b/src/slang-nodes/ReceiveFunctionAttribute.ts @@ -21,7 +21,7 @@ export class ReceiveFunctionAttribute implements SlangNode { ast: ast.ReceiveFunctionAttribute, options: ParserOptions ) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); if (ast.variant instanceof TerminalNode) { this.variant = ast.variant.unparse(); @@ -43,12 +43,10 @@ export class ReceiveFunctionAttribute implements SlangNode { } } - metadata = updateMetadata( + [this.loc, this.comments] = updateMetadata( metadata, typeof this.variant === 'string' ? [] : [this.variant] ); - - [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ReceiveFunctionAttributes.ts b/src/slang-nodes/ReceiveFunctionAttributes.ts index 225da74f3..8ecae0036 100644 --- a/src/slang-nodes/ReceiveFunctionAttributes.ts +++ b/src/slang-nodes/ReceiveFunctionAttributes.ts @@ -24,15 +24,13 @@ export class ReceiveFunctionAttributes implements SlangNode { ast: ast.ReceiveFunctionAttributes, options: ParserOptions ) { - let metadata = getNodeMetadata(ast, true); + const metadata = getNodeMetadata(ast, true); this.items = ast.items.map( (item) => new ReceiveFunctionAttribute(item, options) ); - metadata = updateMetadata(metadata, [this.items]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.items]); this.items = this.items.sort(sortFunctionAttributes); } diff --git a/src/slang-nodes/ReceiveFunctionDefinition.ts b/src/slang-nodes/ReceiveFunctionDefinition.ts index 3227b77c9..4ccb83ca4 100644 --- a/src/slang-nodes/ReceiveFunctionDefinition.ts +++ b/src/slang-nodes/ReceiveFunctionDefinition.ts @@ -27,20 +27,18 @@ export class ReceiveFunctionDefinition implements SlangNode { ast: ast.ReceiveFunctionDefinition, options: ParserOptions ) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.parameters = new ParametersDeclaration(ast.parameters, options); this.attributes = new ReceiveFunctionAttributes(ast.attributes, options); this.body = new FunctionBody(ast.body, options); - metadata = updateMetadata(metadata, [ + [this.loc, this.comments] = updateMetadata(metadata, [ this.parameters, this.attributes, this.body ]); - [this.loc, this.comments] = metadata; - this.cleanModifierInvocationArguments(); } diff --git a/src/slang-nodes/ReturnStatement.ts b/src/slang-nodes/ReturnStatement.ts index eb54b8df9..379686f0e 100644 --- a/src/slang-nodes/ReturnStatement.ts +++ b/src/slang-nodes/ReturnStatement.ts @@ -37,15 +37,13 @@ export class ReturnStatement implements SlangNode { expression?: Expression; constructor(ast: ast.ReturnStatement, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); if (ast.expression) { this.expression = new Expression(ast.expression, options); } - metadata = updateMetadata(metadata, [this.expression]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.expression]); } print( diff --git a/src/slang-nodes/ReturnsDeclaration.ts b/src/slang-nodes/ReturnsDeclaration.ts index 8f2bdec73..910a6f0b9 100644 --- a/src/slang-nodes/ReturnsDeclaration.ts +++ b/src/slang-nodes/ReturnsDeclaration.ts @@ -20,13 +20,11 @@ export class ReturnsDeclaration implements SlangNode { variables: ParametersDeclaration; constructor(ast: ast.ReturnsDeclaration, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.variables = new ParametersDeclaration(ast.variables, options); - metadata = updateMetadata(metadata, [this.variables]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.variables]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/RevertStatement.ts b/src/slang-nodes/RevertStatement.ts index 7d24a5a4f..2e6989cfd 100644 --- a/src/slang-nodes/RevertStatement.ts +++ b/src/slang-nodes/RevertStatement.ts @@ -21,16 +21,17 @@ export class RevertStatement implements SlangNode { arguments: ArgumentsDeclaration; constructor(ast: ast.RevertStatement, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); if (ast.error) { this.error = new IdentifierPath(ast.error); } this.arguments = new ArgumentsDeclaration(ast.arguments, options); - metadata = updateMetadata(metadata, [this.error, this.arguments]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [ + this.error, + this.arguments + ]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ShiftExpression.ts b/src/slang-nodes/ShiftExpression.ts index 6b15ceb01..b2e70dade 100644 --- a/src/slang-nodes/ShiftExpression.ts +++ b/src/slang-nodes/ShiftExpression.ts @@ -47,15 +47,16 @@ export class ShiftExpression implements SlangNode { rightOperand: Expression; constructor(ast: ast.ShiftExpression, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.leftOperand = new Expression(ast.leftOperand, options); this.operator = ast.operator.unparse(); this.rightOperand = new Expression(ast.rightOperand, options); - metadata = updateMetadata(metadata, [this.leftOperand, this.rightOperand]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [ + this.leftOperand, + this.rightOperand + ]); this.leftOperand = tryToHugLeftOperand(this.leftOperand); this.rightOperand = tryToHugRightOperand(this.rightOperand); diff --git a/src/slang-nodes/SimpleVersionLiteral.ts b/src/slang-nodes/SimpleVersionLiteral.ts index 2cddd3bc8..fc8d86ea5 100644 --- a/src/slang-nodes/SimpleVersionLiteral.ts +++ b/src/slang-nodes/SimpleVersionLiteral.ts @@ -15,11 +15,9 @@ export class SimpleVersionLiteral implements SlangNode { items: string[]; constructor(ast: ast.SimpleVersionLiteral) { - const metadata = getNodeMetadata(ast, true); + [this.loc, this.comments] = getNodeMetadata(ast, true); this.items = ast.items.map((item) => item.unparse()); - - [this.loc, this.comments] = metadata; } print(): Doc { diff --git a/src/slang-nodes/SingleLineComment.ts b/src/slang-nodes/SingleLineComment.ts index 98f692c3a..ea42f506c 100644 --- a/src/slang-nodes/SingleLineComment.ts +++ b/src/slang-nodes/SingleLineComment.ts @@ -27,11 +27,9 @@ export class SingleLineComment implements SlangNode, BaseComment { followingNode?: StrictAstNode; constructor(ast: TerminalNode) { - const metadata = getNodeMetadata(ast); + [this.loc] = getNodeMetadata(ast); this.value = ast.unparse(); - - [this.loc] = metadata; } print(): Doc { diff --git a/src/slang-nodes/SingleLineNatSpecComment.ts b/src/slang-nodes/SingleLineNatSpecComment.ts index af871979e..ae785a88f 100644 --- a/src/slang-nodes/SingleLineNatSpecComment.ts +++ b/src/slang-nodes/SingleLineNatSpecComment.ts @@ -27,11 +27,9 @@ export class SingleLineNatSpecComment implements SlangNode, BaseComment { followingNode?: StrictAstNode; constructor(ast: TerminalNode) { - const metadata = getNodeMetadata(ast); + [this.loc] = getNodeMetadata(ast); this.value = ast.unparse(); - - [this.loc] = metadata; } print(): Doc { diff --git a/src/slang-nodes/SourceUnit.ts b/src/slang-nodes/SourceUnit.ts index fc6b6d970..1e127511a 100644 --- a/src/slang-nodes/SourceUnit.ts +++ b/src/slang-nodes/SourceUnit.ts @@ -20,11 +20,11 @@ export class SourceUnit implements SlangNode { members: SourceUnitMembers; constructor(ast: ast.SourceUnit, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.members = new SourceUnitMembers(ast.members, options); - metadata = updateMetadata(metadata, [this.members]); + [this.loc, this.comments] = updateMetadata(metadata, [this.members]); [this.loc, this.comments] = metadata; // Because of comments being extracted like a russian doll, the order needs diff --git a/src/slang-nodes/SourceUnitMember.ts b/src/slang-nodes/SourceUnitMember.ts index 3e1336ce5..ddcc9e6e5 100644 --- a/src/slang-nodes/SourceUnitMember.ts +++ b/src/slang-nodes/SourceUnitMember.ts @@ -42,7 +42,7 @@ export class SourceUnitMember implements SlangNode { | EventDefinition; constructor(ast: ast.SourceUnitMember, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); switch (ast.variant.cst.kind) { case NonterminalKind.PragmaDirective: @@ -123,9 +123,7 @@ export class SourceUnitMember implements SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - metadata = updateMetadata(metadata, [this.variant]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/SourceUnitMembers.ts b/src/slang-nodes/SourceUnitMembers.ts index cb8075086..06c11428f 100644 --- a/src/slang-nodes/SourceUnitMembers.ts +++ b/src/slang-nodes/SourceUnitMembers.ts @@ -18,13 +18,11 @@ export class SourceUnitMembers implements SlangNode { items: SourceUnitMember[]; constructor(ast: ast.SourceUnitMembers, options: ParserOptions) { - let metadata = getNodeMetadata(ast, true); + const metadata = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new SourceUnitMember(item, options)); - metadata = updateMetadata(metadata, [this.items]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.items]); } print( diff --git a/src/slang-nodes/StateVariableAttribute.ts b/src/slang-nodes/StateVariableAttribute.ts index cdba8feb9..001e5ecae 100644 --- a/src/slang-nodes/StateVariableAttribute.ts +++ b/src/slang-nodes/StateVariableAttribute.ts @@ -16,19 +16,17 @@ export class StateVariableAttribute implements SlangNode { variant: OverrideSpecifier | string; constructor(ast: ast.StateVariableAttribute) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.variant = ast.variant instanceof TerminalNode ? ast.variant.unparse() : new OverrideSpecifier(ast.variant); - metadata = updateMetadata( + [this.loc, this.comments] = updateMetadata( metadata, typeof this.variant === 'string' ? [] : [this.variant] ); - - [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/StateVariableAttributes.ts b/src/slang-nodes/StateVariableAttributes.ts index d32f05dad..b85cf8438 100644 --- a/src/slang-nodes/StateVariableAttributes.ts +++ b/src/slang-nodes/StateVariableAttributes.ts @@ -20,13 +20,11 @@ export class StateVariableAttributes implements SlangNode { items: StateVariableAttribute[]; constructor(ast: ast.StateVariableAttributes) { - let metadata = getNodeMetadata(ast, true); + const metadata = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new StateVariableAttribute(item)); - metadata = updateMetadata(metadata, [this.items]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.items]); this.items = this.items.sort(sortFunctionAttributes); } diff --git a/src/slang-nodes/StateVariableDefinition.ts b/src/slang-nodes/StateVariableDefinition.ts index 241d91492..954c94c66 100644 --- a/src/slang-nodes/StateVariableDefinition.ts +++ b/src/slang-nodes/StateVariableDefinition.ts @@ -32,7 +32,7 @@ export class StateVariableDefinition implements SlangNode { ast: ast.StateVariableDefinition, options: ParserOptions ) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.typeName = new TypeName(ast.typeName, options); this.attributes = new StateVariableAttributes(ast.attributes); @@ -41,13 +41,11 @@ export class StateVariableDefinition implements SlangNode { this.value = new StateVariableDefinitionValue(ast.value, options); } - metadata = updateMetadata(metadata, [ + [this.loc, this.comments] = updateMetadata(metadata, [ this.typeName, this.attributes, this.value ]); - - [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/StateVariableDefinitionValue.ts b/src/slang-nodes/StateVariableDefinitionValue.ts index f651385ec..2cce02f42 100644 --- a/src/slang-nodes/StateVariableDefinitionValue.ts +++ b/src/slang-nodes/StateVariableDefinitionValue.ts @@ -23,13 +23,11 @@ export class StateVariableDefinitionValue implements SlangNode { ast: ast.StateVariableDefinitionValue, options: ParserOptions ) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.value = new Expression(ast.value, options); - metadata = updateMetadata(metadata, [this.value]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.value]); } print( diff --git a/src/slang-nodes/Statement.ts b/src/slang-nodes/Statement.ts index c14c458f5..5d725514d 100644 --- a/src/slang-nodes/Statement.ts +++ b/src/slang-nodes/Statement.ts @@ -50,7 +50,7 @@ export class Statement implements SlangNode { | UncheckedBlock; constructor(ast: ast.Statement, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); switch (ast.variant.cst.kind) { case NonterminalKind.ExpressionStatement: @@ -146,9 +146,7 @@ export class Statement implements SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - metadata = updateMetadata(metadata, [this.variant]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/Statements.ts b/src/slang-nodes/Statements.ts index c2bcf1091..57866ef3e 100644 --- a/src/slang-nodes/Statements.ts +++ b/src/slang-nodes/Statements.ts @@ -23,13 +23,11 @@ export class Statements implements SlangNode { items: Statement[]; constructor(ast: ast.Statements, options: ParserOptions) { - let metadata = getNodeMetadata(ast, true); + const metadata = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new Statement(item, options)); - metadata = updateMetadata(metadata, [this.items]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.items]); } print( diff --git a/src/slang-nodes/StorageLayoutSpecifier.ts b/src/slang-nodes/StorageLayoutSpecifier.ts index 6583925e6..1e17be0f7 100644 --- a/src/slang-nodes/StorageLayoutSpecifier.ts +++ b/src/slang-nodes/StorageLayoutSpecifier.ts @@ -24,13 +24,11 @@ export class StorageLayoutSpecifier implements SlangNode { ast: ast.StorageLayoutSpecifier, options: ParserOptions ) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.expression = new Expression(ast.expression, options); - metadata = updateMetadata(metadata, [this.expression]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.expression]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/StorageLocation.ts b/src/slang-nodes/StorageLocation.ts index 354aea349..6e70db1c8 100644 --- a/src/slang-nodes/StorageLocation.ts +++ b/src/slang-nodes/StorageLocation.ts @@ -15,11 +15,9 @@ export class StorageLocation implements SlangNode { variant: string; constructor(ast: ast.StorageLocation) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.variant = ast.variant.unparse(); - - [this.loc, this.comments] = metadata; } print(): Doc { diff --git a/src/slang-nodes/StringExpression.ts b/src/slang-nodes/StringExpression.ts index d1c1b0ced..8f498453a 100644 --- a/src/slang-nodes/StringExpression.ts +++ b/src/slang-nodes/StringExpression.ts @@ -26,7 +26,7 @@ export class StringExpression implements SlangNode { | UnicodeStringLiterals; constructor(ast: ast.StringExpression, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); switch (ast.variant.cst.kind) { case NonterminalKind.StringLiteral: @@ -63,9 +63,7 @@ export class StringExpression implements SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - metadata = updateMetadata(metadata, [this.variant]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/StringLiteral.ts b/src/slang-nodes/StringLiteral.ts index 61c3a6547..4875b4a8d 100644 --- a/src/slang-nodes/StringLiteral.ts +++ b/src/slang-nodes/StringLiteral.ts @@ -17,12 +17,10 @@ export class StringLiteral implements SlangNode { variant: string; constructor(ast: ast.StringLiteral, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.variant = ast.variant.unparse(); - [this.loc, this.comments] = metadata; - this.variant = printString(this.variant.slice(1, -1), options); } diff --git a/src/slang-nodes/StringLiterals.ts b/src/slang-nodes/StringLiterals.ts index 01a051e62..ca0c69a91 100644 --- a/src/slang-nodes/StringLiterals.ts +++ b/src/slang-nodes/StringLiterals.ts @@ -20,13 +20,11 @@ export class StringLiterals implements SlangNode { items: StringLiteral[]; constructor(ast: ast.StringLiterals, options: ParserOptions) { - let metadata = getNodeMetadata(ast, true); + const metadata = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new StringLiteral(item, options)); - metadata = updateMetadata(metadata, [this.items]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/StructDefinition.ts b/src/slang-nodes/StructDefinition.ts index f235edc8b..150fa218a 100644 --- a/src/slang-nodes/StructDefinition.ts +++ b/src/slang-nodes/StructDefinition.ts @@ -20,14 +20,12 @@ export class StructDefinition implements SlangNode { members: StructMembers; constructor(ast: ast.StructDefinition, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.name = new Identifier(ast.name); this.members = new StructMembers(ast.members, options); - metadata = updateMetadata(metadata, [this.members]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.members]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/StructMember.ts b/src/slang-nodes/StructMember.ts index ebb2980fe..d3cf2f0b3 100644 --- a/src/slang-nodes/StructMember.ts +++ b/src/slang-nodes/StructMember.ts @@ -20,14 +20,12 @@ export class StructMember implements SlangNode { name: Identifier; constructor(ast: ast.StructMember, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.typeName = new TypeName(ast.typeName, options); this.name = new Identifier(ast.name); - metadata = updateMetadata(metadata, [this.typeName]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.typeName]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/StructMembers.ts b/src/slang-nodes/StructMembers.ts index d3fc6ca68..38e0d0fd1 100644 --- a/src/slang-nodes/StructMembers.ts +++ b/src/slang-nodes/StructMembers.ts @@ -21,13 +21,11 @@ export class StructMembers implements SlangNode { items: StructMember[]; constructor(ast: ast.StructMembers, options: ParserOptions) { - let metadata = getNodeMetadata(ast, true); + const metadata = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new StructMember(item, options)); - metadata = updateMetadata(metadata, [this.items]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ThrowStatement.ts b/src/slang-nodes/ThrowStatement.ts index 25b7dfdef..7f1024f10 100644 --- a/src/slang-nodes/ThrowStatement.ts +++ b/src/slang-nodes/ThrowStatement.ts @@ -13,9 +13,7 @@ export class ThrowStatement implements SlangNode { loc; constructor(ast: ast.ThrowStatement) { - const metadata = getNodeMetadata(ast); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = getNodeMetadata(ast); } print(): Doc { diff --git a/src/slang-nodes/TryStatement.ts b/src/slang-nodes/TryStatement.ts index ee3868373..27ef1c9f2 100644 --- a/src/slang-nodes/TryStatement.ts +++ b/src/slang-nodes/TryStatement.ts @@ -31,7 +31,7 @@ export class TryStatement implements SlangNode { catchClauses: CatchClauses; constructor(ast: ast.TryStatement, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.expression = new Expression(ast.expression, options); if (ast.returns) { @@ -40,14 +40,12 @@ export class TryStatement implements SlangNode { this.body = new Block(ast.body, options); this.catchClauses = new CatchClauses(ast.catchClauses, options); - metadata = updateMetadata(metadata, [ + [this.loc, this.comments] = updateMetadata(metadata, [ this.expression, this.returns, this.body, this.catchClauses ]); - - [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/TupleDeconstructionElement.ts b/src/slang-nodes/TupleDeconstructionElement.ts index 79108e1e1..5a7831608 100644 --- a/src/slang-nodes/TupleDeconstructionElement.ts +++ b/src/slang-nodes/TupleDeconstructionElement.ts @@ -20,15 +20,13 @@ export class TupleDeconstructionElement implements SlangNode { ast: ast.TupleDeconstructionElement, options: ParserOptions ) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); if (ast.member) { this.member = new TupleMember(ast.member, options); } - metadata = updateMetadata(metadata, [this.member]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.member]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/TupleDeconstructionElements.ts b/src/slang-nodes/TupleDeconstructionElements.ts index a80f553d0..ba79c450f 100644 --- a/src/slang-nodes/TupleDeconstructionElements.ts +++ b/src/slang-nodes/TupleDeconstructionElements.ts @@ -21,15 +21,13 @@ export class TupleDeconstructionElements implements SlangNode { ast: ast.TupleDeconstructionElements, options: ParserOptions ) { - let metadata = getNodeMetadata(ast, true); + const metadata = getNodeMetadata(ast, true); this.items = ast.items.map( (item) => new TupleDeconstructionElement(item, options) ); - metadata = updateMetadata(metadata, [this.items]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/TupleDeconstructionStatement.ts b/src/slang-nodes/TupleDeconstructionStatement.ts index b0e69765b..05936d50c 100644 --- a/src/slang-nodes/TupleDeconstructionStatement.ts +++ b/src/slang-nodes/TupleDeconstructionStatement.ts @@ -28,15 +28,16 @@ export class TupleDeconstructionStatement implements SlangNode { ast: ast.TupleDeconstructionStatement, options: ParserOptions ) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.varKeyword = ast.varKeyword?.unparse(); this.elements = new TupleDeconstructionElements(ast.elements, options); this.expression = new Expression(ast.expression, options); - metadata = updateMetadata(metadata, [this.elements, this.expression]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [ + this.elements, + this.expression + ]); } print( diff --git a/src/slang-nodes/TupleExpression.ts b/src/slang-nodes/TupleExpression.ts index 29cc559f7..c56fc181e 100644 --- a/src/slang-nodes/TupleExpression.ts +++ b/src/slang-nodes/TupleExpression.ts @@ -17,13 +17,11 @@ export class TupleExpression implements SlangNode { items: TupleValues; constructor(ast: ast.TupleExpression, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.items = new TupleValues(ast.items, options); - metadata = updateMetadata(metadata, [this.items]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/TupleMember.ts b/src/slang-nodes/TupleMember.ts index 686017c4c..70aa481cb 100644 --- a/src/slang-nodes/TupleMember.ts +++ b/src/slang-nodes/TupleMember.ts @@ -18,7 +18,7 @@ export class TupleMember implements SlangNode { variant: TypedTupleMember | UntypedTupleMember; constructor(ast: ast.TupleMember, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); switch (ast.variant.cst.kind) { case NonterminalKind.TypedTupleMember: @@ -36,9 +36,7 @@ export class TupleMember implements SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - metadata = updateMetadata(metadata, [this.variant]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/TupleValue.ts b/src/slang-nodes/TupleValue.ts index a239bb828..5a9daf638 100644 --- a/src/slang-nodes/TupleValue.ts +++ b/src/slang-nodes/TupleValue.ts @@ -17,15 +17,13 @@ export class TupleValue implements SlangNode { expression?: Expression; constructor(ast: ast.TupleValue, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); if (ast.expression) { this.expression = new Expression(ast.expression, options); } - metadata = updateMetadata(metadata, [this.expression]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.expression]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/TupleValues.ts b/src/slang-nodes/TupleValues.ts index eed1a93a7..e9dcbc884 100644 --- a/src/slang-nodes/TupleValues.ts +++ b/src/slang-nodes/TupleValues.ts @@ -20,13 +20,11 @@ export class TupleValues implements SlangNode { items: TupleValue[]; constructor(ast: ast.TupleValues, options: ParserOptions) { - let metadata = getNodeMetadata(ast, true); + const metadata = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new TupleValue(item, options)); - metadata = updateMetadata(metadata, [this.items]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.items]); } getSingleExpression(): Expression | undefined { diff --git a/src/slang-nodes/TypeExpression.ts b/src/slang-nodes/TypeExpression.ts index 2ed4d4532..452e6dad0 100644 --- a/src/slang-nodes/TypeExpression.ts +++ b/src/slang-nodes/TypeExpression.ts @@ -17,13 +17,11 @@ export class TypeExpression implements SlangNode { typeName: TypeName; constructor(ast: ast.TypeExpression, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.typeName = new TypeName(ast.typeName, options); - metadata = updateMetadata(metadata, [this.typeName]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.typeName]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/TypeName.ts b/src/slang-nodes/TypeName.ts index 14003cffd..2fd3e3c5d 100644 --- a/src/slang-nodes/TypeName.ts +++ b/src/slang-nodes/TypeName.ts @@ -26,7 +26,7 @@ export class TypeName implements SlangNode { | IdentifierPath; constructor(ast: ast.TypeName, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); switch (ast.variant.cst.kind) { case NonterminalKind.ArrayTypeName: @@ -54,9 +54,7 @@ export class TypeName implements SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - metadata = updateMetadata(metadata, [this.variant]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/TypedTupleMember.ts b/src/slang-nodes/TypedTupleMember.ts index a525e8456..4a5653b35 100644 --- a/src/slang-nodes/TypedTupleMember.ts +++ b/src/slang-nodes/TypedTupleMember.ts @@ -24,7 +24,7 @@ export class TypedTupleMember implements SlangNode { name: Identifier; constructor(ast: ast.TypedTupleMember, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.typeName = new TypeName(ast.typeName, options); if (ast.storageLocation) { @@ -32,9 +32,10 @@ export class TypedTupleMember implements SlangNode { } this.name = new Identifier(ast.name); - metadata = updateMetadata(metadata, [this.typeName, this.storageLocation]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [ + this.typeName, + this.storageLocation + ]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/UncheckedBlock.ts b/src/slang-nodes/UncheckedBlock.ts index 9d8bcf0dc..b1086fde9 100644 --- a/src/slang-nodes/UncheckedBlock.ts +++ b/src/slang-nodes/UncheckedBlock.ts @@ -17,13 +17,11 @@ export class UncheckedBlock implements SlangNode { block: Block; constructor(ast: ast.UncheckedBlock, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.block = new Block(ast.block, options); - metadata = updateMetadata(metadata, [this.block]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.block]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/UnicodeStringLiteral.ts b/src/slang-nodes/UnicodeStringLiteral.ts index d21766f8b..4721f842a 100644 --- a/src/slang-nodes/UnicodeStringLiteral.ts +++ b/src/slang-nodes/UnicodeStringLiteral.ts @@ -17,12 +17,10 @@ export class UnicodeStringLiteral implements SlangNode { variant: string; constructor(ast: ast.UnicodeStringLiteral, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.variant = ast.variant.unparse(); - [this.loc, this.comments] = metadata; - this.variant = `unicode${printString(this.variant.slice(8, -1), options)}`; } diff --git a/src/slang-nodes/UnicodeStringLiterals.ts b/src/slang-nodes/UnicodeStringLiterals.ts index 86aa2eecf..24eb07e31 100644 --- a/src/slang-nodes/UnicodeStringLiterals.ts +++ b/src/slang-nodes/UnicodeStringLiterals.ts @@ -20,15 +20,13 @@ export class UnicodeStringLiterals implements SlangNode { items: UnicodeStringLiteral[]; constructor(ast: ast.UnicodeStringLiterals, options: ParserOptions) { - let metadata = getNodeMetadata(ast, true); + const metadata = getNodeMetadata(ast, true); this.items = ast.items.map( (item) => new UnicodeStringLiteral(item, options) ); - metadata = updateMetadata(metadata, [this.items]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/UnnamedFunctionAttribute.ts b/src/slang-nodes/UnnamedFunctionAttribute.ts index e9776d812..fa0c7d417 100644 --- a/src/slang-nodes/UnnamedFunctionAttribute.ts +++ b/src/slang-nodes/UnnamedFunctionAttribute.ts @@ -20,19 +20,17 @@ export class UnnamedFunctionAttribute implements SlangNode { ast: ast.UnnamedFunctionAttribute, options: ParserOptions ) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.variant = ast.variant instanceof TerminalNode ? ast.variant.unparse() : new ModifierInvocation(ast.variant, options); - metadata = updateMetadata( + [this.loc, this.comments] = updateMetadata( metadata, typeof this.variant === 'string' ? [] : [this.variant] ); - - [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/UnnamedFunctionAttributes.ts b/src/slang-nodes/UnnamedFunctionAttributes.ts index 2b777c029..b136ca658 100644 --- a/src/slang-nodes/UnnamedFunctionAttributes.ts +++ b/src/slang-nodes/UnnamedFunctionAttributes.ts @@ -24,15 +24,13 @@ export class UnnamedFunctionAttributes implements SlangNode { ast: ast.UnnamedFunctionAttributes, options: ParserOptions ) { - let metadata = getNodeMetadata(ast, true); + const metadata = getNodeMetadata(ast, true); this.items = ast.items.map( (item) => new UnnamedFunctionAttribute(item, options) ); - metadata = updateMetadata(metadata, [this.items]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.items]); this.items = this.items.sort(sortFunctionAttributes); } diff --git a/src/slang-nodes/UnnamedFunctionDefinition.ts b/src/slang-nodes/UnnamedFunctionDefinition.ts index 1f90d8c71..5fc1661d1 100644 --- a/src/slang-nodes/UnnamedFunctionDefinition.ts +++ b/src/slang-nodes/UnnamedFunctionDefinition.ts @@ -27,20 +27,18 @@ export class UnnamedFunctionDefinition implements SlangNode { ast: ast.UnnamedFunctionDefinition, options: ParserOptions ) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.parameters = new ParametersDeclaration(ast.parameters, options); this.attributes = new UnnamedFunctionAttributes(ast.attributes, options); this.body = new FunctionBody(ast.body, options); - metadata = updateMetadata(metadata, [ + [this.loc, this.comments] = updateMetadata(metadata, [ this.parameters, this.attributes, this.body ]); - [this.loc, this.comments] = metadata; - this.cleanModifierInvocationArguments(); } diff --git a/src/slang-nodes/UntypedTupleMember.ts b/src/slang-nodes/UntypedTupleMember.ts index 2e9f75476..980ae3a25 100644 --- a/src/slang-nodes/UntypedTupleMember.ts +++ b/src/slang-nodes/UntypedTupleMember.ts @@ -20,16 +20,16 @@ export class UntypedTupleMember implements SlangNode { name: Identifier; constructor(ast: ast.UntypedTupleMember) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); if (ast.storageLocation) { this.storageLocation = new StorageLocation(ast.storageLocation); } this.name = new Identifier(ast.name); - metadata = updateMetadata(metadata, [this.storageLocation]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [ + this.storageLocation + ]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/UserDefinedValueTypeDefinition.ts b/src/slang-nodes/UserDefinedValueTypeDefinition.ts index 8da792ee8..5369b61f2 100644 --- a/src/slang-nodes/UserDefinedValueTypeDefinition.ts +++ b/src/slang-nodes/UserDefinedValueTypeDefinition.ts @@ -19,14 +19,12 @@ export class UserDefinedValueTypeDefinition implements SlangNode { valueType: ElementaryType; constructor(ast: ast.UserDefinedValueTypeDefinition) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.name = new Identifier(ast.name); this.valueType = new ElementaryType(ast.valueType); - metadata = updateMetadata(metadata, [this.valueType]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.valueType]); } print( diff --git a/src/slang-nodes/UsingAlias.ts b/src/slang-nodes/UsingAlias.ts index 6b03da3da..3f99b1ac1 100644 --- a/src/slang-nodes/UsingAlias.ts +++ b/src/slang-nodes/UsingAlias.ts @@ -16,13 +16,11 @@ export class UsingAlias implements SlangNode { operator: UsingOperator; constructor(ast: ast.UsingAlias) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.operator = new UsingOperator(ast.operator); - metadata = updateMetadata(metadata, [this.operator]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.operator]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/UsingClause.ts b/src/slang-nodes/UsingClause.ts index a98e4b7f2..832f96a63 100644 --- a/src/slang-nodes/UsingClause.ts +++ b/src/slang-nodes/UsingClause.ts @@ -17,7 +17,7 @@ export class UsingClause implements SlangNode { variant: IdentifierPath | UsingDeconstruction; constructor(ast: ast.UsingClause) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); switch (ast.variant.cst.kind) { case NonterminalKind.IdentifierPath: @@ -32,9 +32,7 @@ export class UsingClause implements SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - metadata = updateMetadata(metadata, [this.variant]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/UsingDeconstruction.ts b/src/slang-nodes/UsingDeconstruction.ts index 3aa51b8fc..081c08416 100644 --- a/src/slang-nodes/UsingDeconstruction.ts +++ b/src/slang-nodes/UsingDeconstruction.ts @@ -16,13 +16,11 @@ export class UsingDeconstruction implements SlangNode { symbols: UsingDeconstructionSymbols; constructor(ast: ast.UsingDeconstruction) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.symbols = new UsingDeconstructionSymbols(ast.symbols); - metadata = updateMetadata(metadata, [this.symbols]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.symbols]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/UsingDeconstructionSymbol.ts b/src/slang-nodes/UsingDeconstructionSymbol.ts index 9fd1b5303..9e647b66d 100644 --- a/src/slang-nodes/UsingDeconstructionSymbol.ts +++ b/src/slang-nodes/UsingDeconstructionSymbol.ts @@ -19,16 +19,17 @@ export class UsingDeconstructionSymbol implements SlangNode { alias?: UsingAlias; constructor(ast: ast.UsingDeconstructionSymbol) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.name = new IdentifierPath(ast.name); if (ast.alias) { this.alias = new UsingAlias(ast.alias); } - metadata = updateMetadata(metadata, [this.name, this.alias]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [ + this.name, + this.alias + ]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/UsingDeconstructionSymbols.ts b/src/slang-nodes/UsingDeconstructionSymbols.ts index ea5f9b7fb..8b8afde5e 100644 --- a/src/slang-nodes/UsingDeconstructionSymbols.ts +++ b/src/slang-nodes/UsingDeconstructionSymbols.ts @@ -21,13 +21,11 @@ export class UsingDeconstructionSymbols implements SlangNode { items: UsingDeconstructionSymbol[]; constructor(ast: ast.UsingDeconstructionSymbols) { - let metadata = getNodeMetadata(ast, true); + const metadata = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new UsingDeconstructionSymbol(item)); - metadata = updateMetadata(metadata, [this.items]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.items]); } print( diff --git a/src/slang-nodes/UsingDirective.ts b/src/slang-nodes/UsingDirective.ts index 5b7e9e287..9cf329c48 100644 --- a/src/slang-nodes/UsingDirective.ts +++ b/src/slang-nodes/UsingDirective.ts @@ -23,15 +23,16 @@ export class UsingDirective implements SlangNode { globalKeyword?: string; constructor(ast: ast.UsingDirective, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.clause = new UsingClause(ast.clause); this.target = new UsingTarget(ast.target, options); this.globalKeyword = ast.globalKeyword?.unparse(); - metadata = updateMetadata(metadata, [this.clause, this.target]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [ + this.clause, + this.target + ]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/UsingOperator.ts b/src/slang-nodes/UsingOperator.ts index 07f8f8cb3..fc667478c 100644 --- a/src/slang-nodes/UsingOperator.ts +++ b/src/slang-nodes/UsingOperator.ts @@ -15,11 +15,9 @@ export class UsingOperator implements SlangNode { variant: string; constructor(ast: ast.UsingOperator) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.variant = ast.variant.unparse(); - - [this.loc, this.comments] = metadata; } print(): Doc { diff --git a/src/slang-nodes/UsingTarget.ts b/src/slang-nodes/UsingTarget.ts index 4da95b10c..65525ede0 100644 --- a/src/slang-nodes/UsingTarget.ts +++ b/src/slang-nodes/UsingTarget.ts @@ -17,19 +17,17 @@ export class UsingTarget implements SlangNode { variant: TypeName | string; constructor(ast: ast.UsingTarget, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.variant = ast.variant instanceof TerminalNode ? ast.variant.unparse() : new TypeName(ast.variant, options); - metadata = updateMetadata( + [this.loc, this.comments] = updateMetadata( metadata, typeof this.variant === 'string' ? [] : [this.variant] ); - - [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/VariableDeclarationStatement.ts b/src/slang-nodes/VariableDeclarationStatement.ts index ff5ba850e..e3a695bd5 100644 --- a/src/slang-nodes/VariableDeclarationStatement.ts +++ b/src/slang-nodes/VariableDeclarationStatement.ts @@ -32,7 +32,7 @@ export class VariableDeclarationStatement implements SlangNode { ast: ast.VariableDeclarationStatement, options: ParserOptions ) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.variableType = new VariableDeclarationType(ast.variableType, options); if (ast.storageLocation) { @@ -43,13 +43,11 @@ export class VariableDeclarationStatement implements SlangNode { this.value = new VariableDeclarationValue(ast.value, options); } - metadata = updateMetadata(metadata, [ + [this.loc, this.comments] = updateMetadata(metadata, [ this.variableType, this.storageLocation, this.value ]); - - [this.loc, this.comments] = metadata; } print( diff --git a/src/slang-nodes/VariableDeclarationType.ts b/src/slang-nodes/VariableDeclarationType.ts index 7be5a37d4..f15df9f44 100644 --- a/src/slang-nodes/VariableDeclarationType.ts +++ b/src/slang-nodes/VariableDeclarationType.ts @@ -20,19 +20,17 @@ export class VariableDeclarationType implements SlangNode { ast: ast.VariableDeclarationType, options: ParserOptions ) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.variant = ast.variant instanceof TerminalNode ? ast.variant.unparse() : new TypeName(ast.variant, options); - metadata = updateMetadata( + [this.loc, this.comments] = updateMetadata( metadata, typeof this.variant === 'string' ? [] : [this.variant] ); - - [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/VariableDeclarationValue.ts b/src/slang-nodes/VariableDeclarationValue.ts index 8bc117fe1..851c2107e 100644 --- a/src/slang-nodes/VariableDeclarationValue.ts +++ b/src/slang-nodes/VariableDeclarationValue.ts @@ -20,13 +20,11 @@ export class VariableDeclarationValue implements SlangNode { ast: ast.VariableDeclarationValue, options: ParserOptions ) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.expression = new Expression(ast.expression, options); - metadata = updateMetadata(metadata, [this.expression]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.expression]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/VersionExpression.ts b/src/slang-nodes/VersionExpression.ts index 811e73d95..a100bca4d 100644 --- a/src/slang-nodes/VersionExpression.ts +++ b/src/slang-nodes/VersionExpression.ts @@ -17,7 +17,7 @@ export class VersionExpression implements SlangNode { variant: VersionRange | VersionTerm; constructor(ast: ast.VersionExpression) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); switch (ast.variant.cst.kind) { case NonterminalKind.VersionRange: @@ -30,9 +30,7 @@ export class VersionExpression implements SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - metadata = updateMetadata(metadata, [this.variant]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/VersionExpressionSet.ts b/src/slang-nodes/VersionExpressionSet.ts index 47b931e22..dd21e9adc 100644 --- a/src/slang-nodes/VersionExpressionSet.ts +++ b/src/slang-nodes/VersionExpressionSet.ts @@ -19,13 +19,11 @@ export class VersionExpressionSet implements SlangNode { items: VersionExpression[]; constructor(ast: ast.VersionExpressionSet) { - let metadata = getNodeMetadata(ast, true); + const metadata = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new VersionExpression(item)); - metadata = updateMetadata(metadata, [this.items]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/VersionExpressionSets.ts b/src/slang-nodes/VersionExpressionSets.ts index 414d01f9f..6c5deebe8 100644 --- a/src/slang-nodes/VersionExpressionSets.ts +++ b/src/slang-nodes/VersionExpressionSets.ts @@ -19,13 +19,11 @@ export class VersionExpressionSets implements SlangNode { items: VersionExpressionSet[]; constructor(ast: ast.VersionExpressionSets) { - let metadata = getNodeMetadata(ast, true); + const metadata = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new VersionExpressionSet(item)); - metadata = updateMetadata(metadata, [this.items]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/VersionLiteral.ts b/src/slang-nodes/VersionLiteral.ts index 2722fc1f2..a8babc6f1 100644 --- a/src/slang-nodes/VersionLiteral.ts +++ b/src/slang-nodes/VersionLiteral.ts @@ -16,19 +16,17 @@ export class VersionLiteral implements SlangNode { variant: SimpleVersionLiteral | string; constructor(ast: ast.VersionLiteral) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.variant = ast.variant instanceof TerminalNode ? ast.variant.unparse() : new SimpleVersionLiteral(ast.variant); - metadata = updateMetadata( + [this.loc, this.comments] = updateMetadata( metadata, typeof this.variant === 'string' ? [] : [this.variant] ); - - [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/VersionOperator.ts b/src/slang-nodes/VersionOperator.ts index 935a2202c..8c6ba7572 100644 --- a/src/slang-nodes/VersionOperator.ts +++ b/src/slang-nodes/VersionOperator.ts @@ -15,11 +15,9 @@ export class VersionOperator implements SlangNode { variant: string; constructor(ast: ast.VersionOperator) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.variant = ast.variant.unparse(); - - [this.loc, this.comments] = metadata; } print(): Doc { diff --git a/src/slang-nodes/VersionPragma.ts b/src/slang-nodes/VersionPragma.ts index b17d4a3bd..bffeacfd9 100644 --- a/src/slang-nodes/VersionPragma.ts +++ b/src/slang-nodes/VersionPragma.ts @@ -16,13 +16,11 @@ export class VersionPragma implements SlangNode { sets: VersionExpressionSets; constructor(ast: ast.VersionPragma) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.sets = new VersionExpressionSets(ast.sets); - metadata = updateMetadata(metadata, [this.sets]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.sets]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/VersionRange.ts b/src/slang-nodes/VersionRange.ts index 46691952f..76f9cc70a 100644 --- a/src/slang-nodes/VersionRange.ts +++ b/src/slang-nodes/VersionRange.ts @@ -18,14 +18,15 @@ export class VersionRange implements SlangNode { end: VersionLiteral; constructor(ast: ast.VersionRange) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.start = new VersionLiteral(ast.start); this.end = new VersionLiteral(ast.end); - metadata = updateMetadata(metadata, [this.start, this.end]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [ + this.start, + this.end + ]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/VersionTerm.ts b/src/slang-nodes/VersionTerm.ts index f5bba351a..c615742f4 100644 --- a/src/slang-nodes/VersionTerm.ts +++ b/src/slang-nodes/VersionTerm.ts @@ -19,16 +19,17 @@ export class VersionTerm implements SlangNode { literal: VersionLiteral; constructor(ast: ast.VersionTerm) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); if (ast.operator) { this.operator = new VersionOperator(ast.operator); } this.literal = new VersionLiteral(ast.literal); - metadata = updateMetadata(metadata, [this.operator, this.literal]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [ + this.operator, + this.literal + ]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/WhileStatement.ts b/src/slang-nodes/WhileStatement.ts index 8c9efa312..7cfa6193e 100644 --- a/src/slang-nodes/WhileStatement.ts +++ b/src/slang-nodes/WhileStatement.ts @@ -24,14 +24,15 @@ export class WhileStatement implements SlangNode { body: Statement; constructor(ast: ast.WhileStatement, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.condition = new Expression(ast.condition, options); this.body = new Statement(ast.body, options); - metadata = updateMetadata(metadata, [this.condition, this.body]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [ + this.condition, + this.body + ]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulArguments.ts b/src/slang-nodes/YulArguments.ts index c31d8a5fb..a63ecfe6a 100644 --- a/src/slang-nodes/YulArguments.ts +++ b/src/slang-nodes/YulArguments.ts @@ -18,13 +18,11 @@ export class YulArguments implements SlangNode { items: YulExpression[]; constructor(ast: ast.YulArguments, options: ParserOptions) { - let metadata = getNodeMetadata(ast, true); + const metadata = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new YulExpression(item, options)); - metadata = updateMetadata(metadata, [this.items]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulAssignmentOperator.ts b/src/slang-nodes/YulAssignmentOperator.ts index 77698bfb6..0aa58cd5a 100644 --- a/src/slang-nodes/YulAssignmentOperator.ts +++ b/src/slang-nodes/YulAssignmentOperator.ts @@ -16,19 +16,17 @@ export class YulAssignmentOperator implements SlangNode { variant: YulColonAndEqual | string; constructor(ast: ast.YulAssignmentOperator) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.variant = ast.variant instanceof TerminalNode ? ast.variant.unparse() : new YulColonAndEqual(ast.variant); - metadata = updateMetadata( + [this.loc, this.comments] = updateMetadata( metadata, typeof this.variant === 'string' ? [] : [this.variant] ); - - [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulBlock.ts b/src/slang-nodes/YulBlock.ts index 842f57493..f7ce7c5fa 100644 --- a/src/slang-nodes/YulBlock.ts +++ b/src/slang-nodes/YulBlock.ts @@ -17,13 +17,11 @@ export class YulBlock implements SlangNode { statements: YulStatements; constructor(ast: ast.YulBlock, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.statements = new YulStatements(ast.statements, options); - metadata = updateMetadata(metadata, [this.statements]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.statements]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulBreakStatement.ts b/src/slang-nodes/YulBreakStatement.ts index 61626a2ee..134225a18 100644 --- a/src/slang-nodes/YulBreakStatement.ts +++ b/src/slang-nodes/YulBreakStatement.ts @@ -13,9 +13,7 @@ export class YulBreakStatement implements SlangNode { loc; constructor(ast: ast.YulBreakStatement) { - const metadata = getNodeMetadata(ast); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = getNodeMetadata(ast); } print(): Doc { diff --git a/src/slang-nodes/YulColonAndEqual.ts b/src/slang-nodes/YulColonAndEqual.ts index 33e845ade..3178cd0a6 100644 --- a/src/slang-nodes/YulColonAndEqual.ts +++ b/src/slang-nodes/YulColonAndEqual.ts @@ -13,9 +13,7 @@ export class YulColonAndEqual implements SlangNode { loc; constructor(ast: ast.YulColonAndEqual) { - const metadata = getNodeMetadata(ast); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = getNodeMetadata(ast); } print(): Doc { diff --git a/src/slang-nodes/YulContinueStatement.ts b/src/slang-nodes/YulContinueStatement.ts index 3121eef3b..813ac8ba3 100644 --- a/src/slang-nodes/YulContinueStatement.ts +++ b/src/slang-nodes/YulContinueStatement.ts @@ -13,9 +13,7 @@ export class YulContinueStatement implements SlangNode { loc; constructor(ast: ast.YulContinueStatement) { - const metadata = getNodeMetadata(ast); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = getNodeMetadata(ast); } print(): Doc { diff --git a/src/slang-nodes/YulDefaultCase.ts b/src/slang-nodes/YulDefaultCase.ts index c40711058..4499d70e7 100644 --- a/src/slang-nodes/YulDefaultCase.ts +++ b/src/slang-nodes/YulDefaultCase.ts @@ -17,13 +17,11 @@ export class YulDefaultCase implements SlangNode { body: YulBlock; constructor(ast: ast.YulDefaultCase, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.body = new YulBlock(ast.body, options); - metadata = updateMetadata(metadata, [this.body]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.body]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulEqualAndColon.ts b/src/slang-nodes/YulEqualAndColon.ts index 7f0caa2cc..44cf90ceb 100644 --- a/src/slang-nodes/YulEqualAndColon.ts +++ b/src/slang-nodes/YulEqualAndColon.ts @@ -13,9 +13,7 @@ export class YulEqualAndColon implements SlangNode { loc; constructor(ast: ast.YulEqualAndColon) { - const metadata = getNodeMetadata(ast); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = getNodeMetadata(ast); } print(): Doc { diff --git a/src/slang-nodes/YulExpression.ts b/src/slang-nodes/YulExpression.ts index 6a613edb1..9755a936a 100644 --- a/src/slang-nodes/YulExpression.ts +++ b/src/slang-nodes/YulExpression.ts @@ -19,7 +19,7 @@ export class YulExpression implements SlangNode { variant: YulFunctionCallExpression | YulLiteral | YulPath; constructor(ast: ast.YulExpression, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); switch (ast.variant.cst.kind) { case NonterminalKind.YulFunctionCallExpression: @@ -38,9 +38,7 @@ export class YulExpression implements SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - metadata = updateMetadata(metadata, [this.variant]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulForStatement.ts b/src/slang-nodes/YulForStatement.ts index 20d6cb453..aceafc044 100644 --- a/src/slang-nodes/YulForStatement.ts +++ b/src/slang-nodes/YulForStatement.ts @@ -27,21 +27,19 @@ export class YulForStatement implements SlangNode { body: YulBlock; constructor(ast: ast.YulForStatement, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.initialization = new YulBlock(ast.initialization, options); this.condition = new YulExpression(ast.condition, options); this.iterator = new YulBlock(ast.iterator, options); this.body = new YulBlock(ast.body, options); - metadata = updateMetadata(metadata, [ + [this.loc, this.comments] = updateMetadata(metadata, [ this.initialization, this.condition, this.iterator, this.body ]); - - [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulFunctionCallExpression.ts b/src/slang-nodes/YulFunctionCallExpression.ts index 92de20153..b77ffd41b 100644 --- a/src/slang-nodes/YulFunctionCallExpression.ts +++ b/src/slang-nodes/YulFunctionCallExpression.ts @@ -23,14 +23,15 @@ export class YulFunctionCallExpression implements SlangNode { ast: ast.YulFunctionCallExpression, options: ParserOptions ) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.operand = new YulExpression(ast.operand, options); this.arguments = new YulArguments(ast.arguments, options); - metadata = updateMetadata(metadata, [this.operand, this.arguments]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [ + this.operand, + this.arguments + ]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulFunctionDefinition.ts b/src/slang-nodes/YulFunctionDefinition.ts index 70ae595f3..1b8a2572c 100644 --- a/src/slang-nodes/YulFunctionDefinition.ts +++ b/src/slang-nodes/YulFunctionDefinition.ts @@ -26,7 +26,7 @@ export class YulFunctionDefinition implements SlangNode { body: YulBlock; constructor(ast: ast.YulFunctionDefinition, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.name = new YulIdentifier(ast.name); this.parameters = new YulParametersDeclaration(ast.parameters); @@ -35,13 +35,11 @@ export class YulFunctionDefinition implements SlangNode { } this.body = new YulBlock(ast.body, options); - metadata = updateMetadata(metadata, [ + [this.loc, this.comments] = updateMetadata(metadata, [ this.parameters, this.returns, this.body ]); - - [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulIdentifier.ts b/src/slang-nodes/YulIdentifier.ts index 842346e39..2ffaa11f4 100644 --- a/src/slang-nodes/YulIdentifier.ts +++ b/src/slang-nodes/YulIdentifier.ts @@ -15,11 +15,9 @@ export class YulIdentifier implements SlangNode { value: string; constructor(ast: TerminalNode) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.value = ast.unparse(); - - [this.loc, this.comments] = metadata; } print(): Doc { diff --git a/src/slang-nodes/YulIfStatement.ts b/src/slang-nodes/YulIfStatement.ts index 36f33b7b4..f65e040e7 100644 --- a/src/slang-nodes/YulIfStatement.ts +++ b/src/slang-nodes/YulIfStatement.ts @@ -20,14 +20,15 @@ export class YulIfStatement implements SlangNode { body: YulBlock; constructor(ast: ast.YulIfStatement, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.condition = new YulExpression(ast.condition, options); this.body = new YulBlock(ast.body, options); - metadata = updateMetadata(metadata, [this.condition, this.body]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [ + this.condition, + this.body + ]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulLabel.ts b/src/slang-nodes/YulLabel.ts index 94036bfa6..cb91305a1 100644 --- a/src/slang-nodes/YulLabel.ts +++ b/src/slang-nodes/YulLabel.ts @@ -19,11 +19,9 @@ export class YulLabel implements SlangNode { label: YulIdentifier; constructor(ast: ast.YulLabel) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.label = new YulIdentifier(ast.label); - - [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulLeaveStatement.ts b/src/slang-nodes/YulLeaveStatement.ts index 482407665..abb4b37cd 100644 --- a/src/slang-nodes/YulLeaveStatement.ts +++ b/src/slang-nodes/YulLeaveStatement.ts @@ -13,9 +13,7 @@ export class YulLeaveStatement implements SlangNode { loc; constructor(ast: ast.YulLeaveStatement) { - const metadata = getNodeMetadata(ast); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = getNodeMetadata(ast); } print(): Doc { diff --git a/src/slang-nodes/YulLiteral.ts b/src/slang-nodes/YulLiteral.ts index c7b174fcb..b654d52c3 100644 --- a/src/slang-nodes/YulLiteral.ts +++ b/src/slang-nodes/YulLiteral.ts @@ -18,7 +18,7 @@ export class YulLiteral implements SlangNode { variant: HexStringLiteral | StringLiteral | string; constructor(ast: ast.YulLiteral, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); if (ast.variant instanceof TerminalNode) { this.variant = ast.variant.unparse(); @@ -41,12 +41,10 @@ export class YulLiteral implements SlangNode { } } - metadata = updateMetadata( + [this.loc, this.comments] = updateMetadata( metadata, typeof this.variant === 'string' ? [] : [this.variant] ); - - [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulParameters.ts b/src/slang-nodes/YulParameters.ts index c21baaa60..45c64012f 100644 --- a/src/slang-nodes/YulParameters.ts +++ b/src/slang-nodes/YulParameters.ts @@ -17,11 +17,9 @@ export class YulParameters implements SlangNode { items: YulIdentifier[]; constructor(ast: ast.YulParameters) { - const metadata = getNodeMetadata(ast, true); + [this.loc, this.comments] = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new YulIdentifier(item)); - - [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulParametersDeclaration.ts b/src/slang-nodes/YulParametersDeclaration.ts index d5870fa31..121cab81b 100644 --- a/src/slang-nodes/YulParametersDeclaration.ts +++ b/src/slang-nodes/YulParametersDeclaration.ts @@ -16,13 +16,11 @@ export class YulParametersDeclaration implements SlangNode { parameters: YulParameters; constructor(ast: ast.YulParametersDeclaration) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.parameters = new YulParameters(ast.parameters); - metadata = updateMetadata(metadata, [this.parameters]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.parameters]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulPath.ts b/src/slang-nodes/YulPath.ts index f2c9cb135..db0555cbc 100644 --- a/src/slang-nodes/YulPath.ts +++ b/src/slang-nodes/YulPath.ts @@ -19,11 +19,9 @@ export class YulPath implements SlangNode { items: YulIdentifier[]; constructor(ast: ast.YulPath) { - const metadata = getNodeMetadata(ast, true); + [this.loc, this.comments] = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new YulIdentifier(item)); - - [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulPaths.ts b/src/slang-nodes/YulPaths.ts index 421beef6d..1995dfc4d 100644 --- a/src/slang-nodes/YulPaths.ts +++ b/src/slang-nodes/YulPaths.ts @@ -19,13 +19,11 @@ export class YulPaths implements SlangNode { items: YulPath[]; constructor(ast: ast.YulPaths) { - let metadata = getNodeMetadata(ast, true); + const metadata = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new YulPath(item)); - metadata = updateMetadata(metadata, [this.items]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulReturnsDeclaration.ts b/src/slang-nodes/YulReturnsDeclaration.ts index d513a0bfd..f96750896 100644 --- a/src/slang-nodes/YulReturnsDeclaration.ts +++ b/src/slang-nodes/YulReturnsDeclaration.ts @@ -20,13 +20,11 @@ export class YulReturnsDeclaration implements SlangNode { variables: YulVariableNames; constructor(ast: ast.YulReturnsDeclaration) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.variables = new YulVariableNames(ast.variables); - metadata = updateMetadata(metadata, [this.variables]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.variables]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulStackAssignmentOperator.ts b/src/slang-nodes/YulStackAssignmentOperator.ts index 90bf602ed..2f529db52 100644 --- a/src/slang-nodes/YulStackAssignmentOperator.ts +++ b/src/slang-nodes/YulStackAssignmentOperator.ts @@ -16,19 +16,17 @@ export class YulStackAssignmentOperator implements SlangNode { variant: YulEqualAndColon | string; constructor(ast: ast.YulStackAssignmentOperator) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.variant = ast.variant instanceof TerminalNode ? ast.variant.unparse() : new YulEqualAndColon(ast.variant); - metadata = updateMetadata( + [this.loc, this.comments] = updateMetadata( metadata, typeof this.variant === 'string' ? [] : [this.variant] ); - - [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulStackAssignmentStatement.ts b/src/slang-nodes/YulStackAssignmentStatement.ts index 3388486c8..5dc6b1b04 100644 --- a/src/slang-nodes/YulStackAssignmentStatement.ts +++ b/src/slang-nodes/YulStackAssignmentStatement.ts @@ -23,14 +23,12 @@ export class YulStackAssignmentStatement implements SlangNode { variable: YulIdentifier; constructor(ast: ast.YulStackAssignmentStatement) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.assignment = new YulStackAssignmentOperator(ast.assignment); this.variable = new YulIdentifier(ast.variable); - metadata = updateMetadata(metadata, [this.assignment]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.assignment]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulStatement.ts b/src/slang-nodes/YulStatement.ts index f4426ec79..e1bee0084 100644 --- a/src/slang-nodes/YulStatement.ts +++ b/src/slang-nodes/YulStatement.ts @@ -42,7 +42,7 @@ export class YulStatement implements SlangNode { | YulExpression; constructor(ast: ast.YulStatement, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); switch (ast.variant.cst.kind) { case NonterminalKind.YulBlock: @@ -117,9 +117,7 @@ export class YulStatement implements SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - metadata = updateMetadata(metadata, [this.variant]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulStatements.ts b/src/slang-nodes/YulStatements.ts index 2caa2b77c..5df17fd4c 100644 --- a/src/slang-nodes/YulStatements.ts +++ b/src/slang-nodes/YulStatements.ts @@ -23,13 +23,11 @@ export class YulStatements implements SlangNode { items: YulStatement[]; constructor(ast: ast.YulStatements, options: ParserOptions) { - let metadata = getNodeMetadata(ast, true); + const metadata = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new YulStatement(item, options)); - metadata = updateMetadata(metadata, [this.items]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.items]); } print( diff --git a/src/slang-nodes/YulSwitchCase.ts b/src/slang-nodes/YulSwitchCase.ts index 0c5d7be8b..a388e01f5 100644 --- a/src/slang-nodes/YulSwitchCase.ts +++ b/src/slang-nodes/YulSwitchCase.ts @@ -18,7 +18,7 @@ export class YulSwitchCase implements SlangNode { variant: YulDefaultCase | YulValueCase; constructor(ast: ast.YulSwitchCase, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); switch (ast.variant.cst.kind) { case NonterminalKind.YulDefaultCase: @@ -37,9 +37,7 @@ export class YulSwitchCase implements SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - metadata = updateMetadata(metadata, [this.variant]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulSwitchCases.ts b/src/slang-nodes/YulSwitchCases.ts index 8d209daad..c1fcc2ec6 100644 --- a/src/slang-nodes/YulSwitchCases.ts +++ b/src/slang-nodes/YulSwitchCases.ts @@ -20,13 +20,11 @@ export class YulSwitchCases implements SlangNode { items: YulSwitchCase[]; constructor(ast: ast.YulSwitchCases, options: ParserOptions) { - let metadata = getNodeMetadata(ast, true); + const metadata = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new YulSwitchCase(item, options)); - metadata = updateMetadata(metadata, [this.items]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulSwitchStatement.ts b/src/slang-nodes/YulSwitchStatement.ts index cbcee13e6..7032ddaec 100644 --- a/src/slang-nodes/YulSwitchStatement.ts +++ b/src/slang-nodes/YulSwitchStatement.ts @@ -23,14 +23,15 @@ export class YulSwitchStatement implements SlangNode { cases: YulSwitchCases; constructor(ast: ast.YulSwitchStatement, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.expression = new YulExpression(ast.expression, options); this.cases = new YulSwitchCases(ast.cases, options); - metadata = updateMetadata(metadata, [this.expression, this.cases]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [ + this.expression, + this.cases + ]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulValueCase.ts b/src/slang-nodes/YulValueCase.ts index bc86d6977..7c248e5a1 100644 --- a/src/slang-nodes/YulValueCase.ts +++ b/src/slang-nodes/YulValueCase.ts @@ -20,14 +20,15 @@ export class YulValueCase implements SlangNode { body: YulBlock; constructor(ast: ast.YulValueCase, options: ParserOptions) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.value = new YulLiteral(ast.value, options); this.body = new YulBlock(ast.body, options); - metadata = updateMetadata(metadata, [this.value, this.body]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [ + this.value, + this.body + ]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulVariableAssignmentStatement.ts b/src/slang-nodes/YulVariableAssignmentStatement.ts index b458698c7..470e73c00 100644 --- a/src/slang-nodes/YulVariableAssignmentStatement.ts +++ b/src/slang-nodes/YulVariableAssignmentStatement.ts @@ -29,19 +29,17 @@ export class YulVariableAssignmentStatement implements SlangNode { ast: ast.YulVariableAssignmentStatement, options: ParserOptions ) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.variables = new YulPaths(ast.variables); this.assignment = new YulAssignmentOperator(ast.assignment); this.expression = new YulExpression(ast.expression, options); - metadata = updateMetadata(metadata, [ + [this.loc, this.comments] = updateMetadata(metadata, [ this.variables, this.assignment, this.expression ]); - - [this.loc, this.comments] = metadata; } print( diff --git a/src/slang-nodes/YulVariableDeclarationStatement.ts b/src/slang-nodes/YulVariableDeclarationStatement.ts index 80ec96213..447f7b553 100644 --- a/src/slang-nodes/YulVariableDeclarationStatement.ts +++ b/src/slang-nodes/YulVariableDeclarationStatement.ts @@ -24,16 +24,14 @@ export class YulVariableDeclarationStatement implements SlangNode { ast: ast.YulVariableDeclarationStatement, options: ParserOptions ) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.variables = new YulVariableNames(ast.variables); if (ast.value) { this.value = new YulVariableDeclarationValue(ast.value, options); } - metadata = updateMetadata(metadata, [this.value]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [this.value]); } print( diff --git a/src/slang-nodes/YulVariableDeclarationValue.ts b/src/slang-nodes/YulVariableDeclarationValue.ts index 657d25b7f..7e69894a6 100644 --- a/src/slang-nodes/YulVariableDeclarationValue.ts +++ b/src/slang-nodes/YulVariableDeclarationValue.ts @@ -23,14 +23,15 @@ export class YulVariableDeclarationValue implements SlangNode { ast: ast.YulVariableDeclarationValue, options: ParserOptions ) { - let metadata = getNodeMetadata(ast); + const metadata = getNodeMetadata(ast); this.assignment = new YulAssignmentOperator(ast.assignment); this.expression = new YulExpression(ast.expression, options); - metadata = updateMetadata(metadata, [this.assignment, this.expression]); - - [this.loc, this.comments] = metadata; + [this.loc, this.comments] = updateMetadata(metadata, [ + this.assignment, + this.expression + ]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulVariableNames.ts b/src/slang-nodes/YulVariableNames.ts index 2184979b2..7f5932104 100644 --- a/src/slang-nodes/YulVariableNames.ts +++ b/src/slang-nodes/YulVariableNames.ts @@ -20,11 +20,9 @@ export class YulVariableNames implements SlangNode { items: YulIdentifier[]; constructor(ast: ast.YulVariableNames) { - const metadata = getNodeMetadata(ast, true); + [this.loc, this.comments] = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new YulIdentifier(item)); - - [this.loc, this.comments] = metadata; } print(path: AstPath, print: PrintFunction): Doc { From eedc3c3a0e0cded84735e546b85ffc01b2f15f8f Mon Sep 17 00:00:00 2001 From: Klaus Date: Tue, 8 Jul 2025 13:52:34 +0100 Subject: [PATCH 3/8] if `updateMetadata` modifies directly `comments` and `loc`, there's no need to destructure twice --- src/slang-nodes/AdditiveExpression.ts | 4 ++-- src/slang-nodes/AndExpression.ts | 4 ++-- src/slang-nodes/ArgumentsDeclaration.ts | 4 ++-- src/slang-nodes/ArrayExpression.ts | 4 ++-- src/slang-nodes/ArrayTypeName.ts | 7 ++----- src/slang-nodes/ArrayValues.ts | 4 ++-- src/slang-nodes/AssemblyFlags.ts | 4 ++-- src/slang-nodes/AssemblyFlagsDeclaration.ts | 4 ++-- src/slang-nodes/AssemblyStatement.ts | 4 ++-- src/slang-nodes/AssignmentExpression.ts | 4 ++-- src/slang-nodes/BitwiseAndExpression.ts | 4 ++-- src/slang-nodes/BitwiseOrExpression.ts | 4 ++-- src/slang-nodes/BitwiseXorExpression.ts | 4 ++-- src/slang-nodes/Block.ts | 4 ++-- src/slang-nodes/CallOptions.ts | 4 ++-- src/slang-nodes/CallOptionsExpression.ts | 7 ++----- src/slang-nodes/CatchClause.ts | 7 ++----- src/slang-nodes/CatchClauseError.ts | 4 ++-- src/slang-nodes/CatchClauses.ts | 4 ++-- src/slang-nodes/ConditionalExpression.ts | 4 ++-- src/slang-nodes/ConstantDefinition.ts | 7 ++----- src/slang-nodes/ConstructorAttribute.ts | 7 ++++--- src/slang-nodes/ConstructorAttributes.ts | 4 ++-- src/slang-nodes/ConstructorDefinition.ts | 4 ++-- src/slang-nodes/ContractDefinition.ts | 7 ++----- src/slang-nodes/ContractMember.ts | 4 ++-- src/slang-nodes/ContractMembers.ts | 4 ++-- src/slang-nodes/ContractSpecifier.ts | 4 ++-- src/slang-nodes/ContractSpecifiers.ts | 4 ++-- src/slang-nodes/DecimalNumberExpression.ts | 4 ++-- src/slang-nodes/DoWhileStatement.ts | 7 ++----- src/slang-nodes/ElementaryType.ts | 7 ++++--- src/slang-nodes/ElseBranch.ts | 4 ++-- src/slang-nodes/EmitStatement.ts | 7 ++----- src/slang-nodes/EnumDefinition.ts | 4 ++-- src/slang-nodes/EqualityExpression.ts | 4 ++-- src/slang-nodes/ErrorDefinition.ts | 4 ++-- src/slang-nodes/ErrorParameter.ts | 4 ++-- src/slang-nodes/ErrorParameters.ts | 4 ++-- src/slang-nodes/ErrorParametersDeclaration.ts | 4 ++-- src/slang-nodes/EventDefinition.ts | 4 ++-- src/slang-nodes/EventParameter.ts | 4 ++-- src/slang-nodes/EventParameters.ts | 4 ++-- src/slang-nodes/EventParametersDeclaration.ts | 4 ++-- src/slang-nodes/ExperimentalFeature.ts | 7 ++++--- src/slang-nodes/ExperimentalPragma.ts | 4 ++-- src/slang-nodes/ExponentiationExpression.ts | 4 ++-- src/slang-nodes/Expression.ts | 7 ++++--- src/slang-nodes/ExpressionStatement.ts | 4 ++-- src/slang-nodes/FallbackFunctionAttribute.ts | 7 ++++--- src/slang-nodes/FallbackFunctionAttributes.ts | 4 ++-- src/slang-nodes/FallbackFunctionDefinition.ts | 4 ++-- src/slang-nodes/ForStatement.ts | 4 ++-- src/slang-nodes/ForStatementCondition.ts | 7 ++++--- src/slang-nodes/ForStatementInitialization.ts | 7 ++++--- src/slang-nodes/FunctionAttribute.ts | 7 ++++--- src/slang-nodes/FunctionAttributes.ts | 4 ++-- src/slang-nodes/FunctionBody.ts | 7 ++++--- src/slang-nodes/FunctionCallExpression.ts | 7 ++----- src/slang-nodes/FunctionDefinition.ts | 4 ++-- src/slang-nodes/FunctionType.ts | 4 ++-- src/slang-nodes/FunctionTypeAttributes.ts | 4 ++-- src/slang-nodes/HexNumberExpression.ts | 4 ++-- src/slang-nodes/HexStringLiterals.ts | 4 ++-- src/slang-nodes/IfStatement.ts | 4 ++-- src/slang-nodes/ImportClause.ts | 4 ++-- src/slang-nodes/ImportDeconstruction.ts | 7 ++----- src/slang-nodes/ImportDeconstructionSymbol.ts | 4 ++-- src/slang-nodes/ImportDeconstructionSymbols.ts | 4 ++-- src/slang-nodes/ImportDirective.ts | 4 ++-- src/slang-nodes/IndexAccessEnd.ts | 4 ++-- src/slang-nodes/IndexAccessExpression.ts | 4 ++-- src/slang-nodes/InequalityExpression.ts | 4 ++-- src/slang-nodes/InheritanceSpecifier.ts | 4 ++-- src/slang-nodes/InheritanceType.ts | 7 ++----- src/slang-nodes/InheritanceTypes.ts | 4 ++-- src/slang-nodes/InterfaceDefinition.ts | 7 ++----- src/slang-nodes/InterfaceMembers.ts | 4 ++-- src/slang-nodes/LibraryDefinition.ts | 4 ++-- src/slang-nodes/LibraryMembers.ts | 4 ++-- src/slang-nodes/MappingKey.ts | 4 ++-- src/slang-nodes/MappingKeyType.ts | 4 ++-- src/slang-nodes/MappingType.ts | 7 ++----- src/slang-nodes/MappingValue.ts | 4 ++-- src/slang-nodes/MemberAccessExpression.ts | 4 ++-- src/slang-nodes/ModifierAttribute.ts | 7 ++++--- src/slang-nodes/ModifierAttributes.ts | 4 ++-- src/slang-nodes/ModifierDefinition.ts | 4 ++-- src/slang-nodes/ModifierInvocation.ts | 7 ++----- src/slang-nodes/MultiplicativeExpression.ts | 4 ++-- src/slang-nodes/NamedArgument.ts | 4 ++-- src/slang-nodes/NamedArgumentGroup.ts | 4 ++-- src/slang-nodes/NamedArguments.ts | 4 ++-- src/slang-nodes/NamedArgumentsDeclaration.ts | 4 ++-- src/slang-nodes/NamedImport.ts | 7 ++----- src/slang-nodes/NewExpression.ts | 4 ++-- src/slang-nodes/OrExpression.ts | 4 ++-- src/slang-nodes/OverridePaths.ts | 4 ++-- src/slang-nodes/OverridePathsDeclaration.ts | 4 ++-- src/slang-nodes/OverrideSpecifier.ts | 4 ++-- src/slang-nodes/Parameter.ts | 4 ++-- src/slang-nodes/Parameters.ts | 4 ++-- src/slang-nodes/ParametersDeclaration.ts | 4 ++-- src/slang-nodes/PathImport.ts | 7 ++----- src/slang-nodes/PositionalArguments.ts | 4 ++-- src/slang-nodes/PositionalArgumentsDeclaration.ts | 4 ++-- src/slang-nodes/PostfixExpression.ts | 4 ++-- src/slang-nodes/Pragma.ts | 4 ++-- src/slang-nodes/PragmaDirective.ts | 4 ++-- src/slang-nodes/PrefixExpression.ts | 4 ++-- src/slang-nodes/ReceiveFunctionAttribute.ts | 7 ++++--- src/slang-nodes/ReceiveFunctionAttributes.ts | 4 ++-- src/slang-nodes/ReceiveFunctionDefinition.ts | 4 ++-- src/slang-nodes/ReturnStatement.ts | 4 ++-- src/slang-nodes/ReturnsDeclaration.ts | 4 ++-- src/slang-nodes/RevertStatement.ts | 7 ++----- src/slang-nodes/ShiftExpression.ts | 4 ++-- src/slang-nodes/SourceUnit.ts | 5 ++--- src/slang-nodes/SourceUnitMember.ts | 4 ++-- src/slang-nodes/SourceUnitMembers.ts | 4 ++-- src/slang-nodes/StateVariableAttribute.ts | 7 ++++--- src/slang-nodes/StateVariableAttributes.ts | 4 ++-- src/slang-nodes/StateVariableDefinition.ts | 4 ++-- src/slang-nodes/StateVariableDefinitionValue.ts | 4 ++-- src/slang-nodes/Statement.ts | 4 ++-- src/slang-nodes/Statements.ts | 4 ++-- src/slang-nodes/StorageLayoutSpecifier.ts | 4 ++-- src/slang-nodes/StringExpression.ts | 4 ++-- src/slang-nodes/StringLiterals.ts | 4 ++-- src/slang-nodes/StructDefinition.ts | 4 ++-- src/slang-nodes/StructMember.ts | 4 ++-- src/slang-nodes/StructMembers.ts | 4 ++-- src/slang-nodes/TryStatement.ts | 4 ++-- src/slang-nodes/TupleDeconstructionElement.ts | 4 ++-- src/slang-nodes/TupleDeconstructionElements.ts | 4 ++-- src/slang-nodes/TupleDeconstructionStatement.ts | 7 ++----- src/slang-nodes/TupleExpression.ts | 4 ++-- src/slang-nodes/TupleMember.ts | 4 ++-- src/slang-nodes/TupleValue.ts | 4 ++-- src/slang-nodes/TupleValues.ts | 4 ++-- src/slang-nodes/TypeExpression.ts | 4 ++-- src/slang-nodes/TypeName.ts | 4 ++-- src/slang-nodes/TypedTupleMember.ts | 4 ++-- src/slang-nodes/UncheckedBlock.ts | 4 ++-- src/slang-nodes/UnicodeStringLiterals.ts | 4 ++-- src/slang-nodes/UnnamedFunctionAttribute.ts | 7 ++++--- src/slang-nodes/UnnamedFunctionAttributes.ts | 4 ++-- src/slang-nodes/UnnamedFunctionDefinition.ts | 4 ++-- src/slang-nodes/UntypedTupleMember.ts | 6 ++---- src/slang-nodes/UserDefinedValueTypeDefinition.ts | 4 ++-- src/slang-nodes/UsingAlias.ts | 4 ++-- src/slang-nodes/UsingClause.ts | 4 ++-- src/slang-nodes/UsingDeconstruction.ts | 4 ++-- src/slang-nodes/UsingDeconstructionSymbol.ts | 7 ++----- src/slang-nodes/UsingDeconstructionSymbols.ts | 4 ++-- src/slang-nodes/UsingDirective.ts | 7 ++----- src/slang-nodes/UsingTarget.ts | 7 ++++--- src/slang-nodes/VariableDeclarationStatement.ts | 4 ++-- src/slang-nodes/VariableDeclarationType.ts | 7 ++++--- src/slang-nodes/VariableDeclarationValue.ts | 4 ++-- src/slang-nodes/VersionExpression.ts | 4 ++-- src/slang-nodes/VersionExpressionSet.ts | 4 ++-- src/slang-nodes/VersionExpressionSets.ts | 4 ++-- src/slang-nodes/VersionLiteral.ts | 7 ++++--- src/slang-nodes/VersionPragma.ts | 4 ++-- src/slang-nodes/VersionRange.ts | 7 ++----- src/slang-nodes/VersionTerm.ts | 7 ++----- src/slang-nodes/WhileStatement.ts | 7 ++----- src/slang-nodes/YulArguments.ts | 4 ++-- src/slang-nodes/YulAssignmentOperator.ts | 7 ++++--- src/slang-nodes/YulBlock.ts | 4 ++-- src/slang-nodes/YulDefaultCase.ts | 4 ++-- src/slang-nodes/YulExpression.ts | 4 ++-- src/slang-nodes/YulForStatement.ts | 4 ++-- src/slang-nodes/YulFunctionCallExpression.ts | 7 ++----- src/slang-nodes/YulFunctionDefinition.ts | 4 ++-- src/slang-nodes/YulIfStatement.ts | 7 ++----- src/slang-nodes/YulLiteral.ts | 7 ++++--- src/slang-nodes/YulParametersDeclaration.ts | 4 ++-- src/slang-nodes/YulPaths.ts | 4 ++-- src/slang-nodes/YulReturnsDeclaration.ts | 4 ++-- src/slang-nodes/YulStackAssignmentOperator.ts | 7 ++++--- src/slang-nodes/YulStackAssignmentStatement.ts | 4 ++-- src/slang-nodes/YulStatement.ts | 4 ++-- src/slang-nodes/YulStatements.ts | 4 ++-- src/slang-nodes/YulSwitchCase.ts | 4 ++-- src/slang-nodes/YulSwitchCases.ts | 4 ++-- src/slang-nodes/YulSwitchStatement.ts | 7 ++----- src/slang-nodes/YulValueCase.ts | 7 ++----- src/slang-nodes/YulVariableAssignmentStatement.ts | 4 ++-- src/slang-nodes/YulVariableDeclarationStatement.ts | 4 ++-- src/slang-nodes/YulVariableDeclarationValue.ts | 7 ++----- src/slang-utils/metadata.ts | 13 ++++++------- src/types.d.ts | 2 -- 194 files changed, 428 insertions(+), 496 deletions(-) diff --git a/src/slang-nodes/AdditiveExpression.ts b/src/slang-nodes/AdditiveExpression.ts index 92c828a8d..a81a4ee06 100644 --- a/src/slang-nodes/AdditiveExpression.ts +++ b/src/slang-nodes/AdditiveExpression.ts @@ -39,13 +39,13 @@ export class AdditiveExpression implements SlangNode { rightOperand: Expression; constructor(ast: ast.AdditiveExpression, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.leftOperand = new Expression(ast.leftOperand, options); this.operator = ast.operator.unparse(); this.rightOperand = new Expression(ast.rightOperand, options); - [this.loc, this.comments] = updateMetadata(metadata, [ + updateMetadata(this.loc, this.comments, [ this.leftOperand, this.rightOperand ]); diff --git a/src/slang-nodes/AndExpression.ts b/src/slang-nodes/AndExpression.ts index d6411dbf9..091afcd87 100644 --- a/src/slang-nodes/AndExpression.ts +++ b/src/slang-nodes/AndExpression.ts @@ -22,13 +22,13 @@ export class AndExpression implements SlangNode { rightOperand: Expression; constructor(ast: ast.AndExpression, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.leftOperand = new Expression(ast.leftOperand, options); this.operator = ast.operator.unparse(); this.rightOperand = new Expression(ast.rightOperand, options); - [this.loc, this.comments] = updateMetadata(metadata, [ + updateMetadata(this.loc, this.comments, [ this.leftOperand, this.rightOperand ]); diff --git a/src/slang-nodes/ArgumentsDeclaration.ts b/src/slang-nodes/ArgumentsDeclaration.ts index 346bf86de..ce4ddf02c 100644 --- a/src/slang-nodes/ArgumentsDeclaration.ts +++ b/src/slang-nodes/ArgumentsDeclaration.ts @@ -18,7 +18,7 @@ export class ArgumentsDeclaration implements SlangNode { variant: PositionalArgumentsDeclaration | NamedArgumentsDeclaration; constructor(ast: ast.ArgumentsDeclaration, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); switch (ast.variant.cst.kind) { case NonterminalKind.PositionalArgumentsDeclaration: @@ -37,7 +37,7 @@ export class ArgumentsDeclaration implements SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - [this.loc, this.comments] = updateMetadata(metadata, [this.variant]); + updateMetadata(this.loc, this.comments, [this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ArrayExpression.ts b/src/slang-nodes/ArrayExpression.ts index bdaf0d1a9..d89ed963a 100644 --- a/src/slang-nodes/ArrayExpression.ts +++ b/src/slang-nodes/ArrayExpression.ts @@ -20,11 +20,11 @@ export class ArrayExpression implements SlangNode { items: ArrayValues; constructor(ast: ast.ArrayExpression, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.items = new ArrayValues(ast.items, options); - [this.loc, this.comments] = updateMetadata(metadata, [this.items]); + updateMetadata(this.loc, this.comments, [this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ArrayTypeName.ts b/src/slang-nodes/ArrayTypeName.ts index 1245b0b16..a7989ded6 100644 --- a/src/slang-nodes/ArrayTypeName.ts +++ b/src/slang-nodes/ArrayTypeName.ts @@ -20,17 +20,14 @@ export class ArrayTypeName implements SlangNode { index?: Expression; constructor(ast: ast.ArrayTypeName, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.operand = new TypeName(ast.operand, options); if (ast.index) { this.index = new Expression(ast.index, options); } - [this.loc, this.comments] = updateMetadata(metadata, [ - this.operand, - this.index - ]); + updateMetadata(this.loc, this.comments, [this.operand, this.index]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ArrayValues.ts b/src/slang-nodes/ArrayValues.ts index d0a8c7e99..3e5d9ace8 100644 --- a/src/slang-nodes/ArrayValues.ts +++ b/src/slang-nodes/ArrayValues.ts @@ -18,11 +18,11 @@ export class ArrayValues implements SlangNode { items: Expression[]; constructor(ast: ast.ArrayValues, options: ParserOptions) { - const metadata = getNodeMetadata(ast, true); + [this.loc, this.comments] = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new Expression(item, options)); - [this.loc, this.comments] = updateMetadata(metadata, [this.items]); + updateMetadata(this.loc, this.comments, [this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/AssemblyFlags.ts b/src/slang-nodes/AssemblyFlags.ts index 987a06ef1..8bbc7d8be 100644 --- a/src/slang-nodes/AssemblyFlags.ts +++ b/src/slang-nodes/AssemblyFlags.ts @@ -18,11 +18,11 @@ export class AssemblyFlags implements SlangNode { items: StringLiteral[]; constructor(ast: ast.AssemblyFlags, options: ParserOptions) { - const metadata = getNodeMetadata(ast, true); + [this.loc, this.comments] = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new StringLiteral(item, options)); - [this.loc, this.comments] = updateMetadata(metadata, [this.items]); + updateMetadata(this.loc, this.comments, [this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/AssemblyFlagsDeclaration.ts b/src/slang-nodes/AssemblyFlagsDeclaration.ts index e818829fe..62b71c712 100644 --- a/src/slang-nodes/AssemblyFlagsDeclaration.ts +++ b/src/slang-nodes/AssemblyFlagsDeclaration.ts @@ -20,11 +20,11 @@ export class AssemblyFlagsDeclaration implements SlangNode { ast: ast.AssemblyFlagsDeclaration, options: ParserOptions ) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.flags = new AssemblyFlags(ast.flags, options); - [this.loc, this.comments] = updateMetadata(metadata, [this.flags]); + updateMetadata(this.loc, this.comments, [this.flags]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/AssemblyStatement.ts b/src/slang-nodes/AssemblyStatement.ts index ac22f4b35..f08002328 100644 --- a/src/slang-nodes/AssemblyStatement.ts +++ b/src/slang-nodes/AssemblyStatement.ts @@ -24,7 +24,7 @@ export class AssemblyStatement implements SlangNode { body: YulBlock; constructor(ast: ast.AssemblyStatement, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); if (ast.label) { this.label = new StringLiteral(ast.label, options); @@ -34,7 +34,7 @@ export class AssemblyStatement implements SlangNode { } this.body = new YulBlock(ast.body, options); - [this.loc, this.comments] = updateMetadata(metadata, [ + updateMetadata(this.loc, this.comments, [ this.label, this.flags, this.body diff --git a/src/slang-nodes/AssignmentExpression.ts b/src/slang-nodes/AssignmentExpression.ts index c1bd86131..615382461 100644 --- a/src/slang-nodes/AssignmentExpression.ts +++ b/src/slang-nodes/AssignmentExpression.ts @@ -25,13 +25,13 @@ export class AssignmentExpression implements SlangNode { rightOperand: Expression; constructor(ast: ast.AssignmentExpression, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.leftOperand = new Expression(ast.leftOperand, options); this.operator = ast.operator.unparse(); this.rightOperand = new Expression(ast.rightOperand, options); - [this.loc, this.comments] = updateMetadata(metadata, [ + updateMetadata(this.loc, this.comments, [ this.leftOperand, this.rightOperand ]); diff --git a/src/slang-nodes/BitwiseAndExpression.ts b/src/slang-nodes/BitwiseAndExpression.ts index b22b36d01..771d4fb11 100644 --- a/src/slang-nodes/BitwiseAndExpression.ts +++ b/src/slang-nodes/BitwiseAndExpression.ts @@ -35,13 +35,13 @@ export class BitwiseAndExpression implements SlangNode { rightOperand: Expression; constructor(ast: ast.BitwiseAndExpression, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.leftOperand = new Expression(ast.leftOperand, options); this.operator = ast.operator.unparse(); this.rightOperand = new Expression(ast.rightOperand, options); - [this.loc, this.comments] = updateMetadata(metadata, [ + updateMetadata(this.loc, this.comments, [ this.leftOperand, this.rightOperand ]); diff --git a/src/slang-nodes/BitwiseOrExpression.ts b/src/slang-nodes/BitwiseOrExpression.ts index 5bbe9706a..4a0ef4e36 100644 --- a/src/slang-nodes/BitwiseOrExpression.ts +++ b/src/slang-nodes/BitwiseOrExpression.ts @@ -45,13 +45,13 @@ export class BitwiseOrExpression implements SlangNode { rightOperand: Expression; constructor(ast: ast.BitwiseOrExpression, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.leftOperand = new Expression(ast.leftOperand, options); this.operator = ast.operator.unparse(); this.rightOperand = new Expression(ast.rightOperand, options); - [this.loc, this.comments] = updateMetadata(metadata, [ + updateMetadata(this.loc, this.comments, [ this.leftOperand, this.rightOperand ]); diff --git a/src/slang-nodes/BitwiseXorExpression.ts b/src/slang-nodes/BitwiseXorExpression.ts index acd9ccbe4..054bcd7d8 100644 --- a/src/slang-nodes/BitwiseXorExpression.ts +++ b/src/slang-nodes/BitwiseXorExpression.ts @@ -35,13 +35,13 @@ export class BitwiseXorExpression implements SlangNode { rightOperand: Expression; constructor(ast: ast.BitwiseXorExpression, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.leftOperand = new Expression(ast.leftOperand, options); this.operator = ast.operator.unparse(); this.rightOperand = new Expression(ast.rightOperand, options); - [this.loc, this.comments] = updateMetadata(metadata, [ + updateMetadata(this.loc, this.comments, [ this.leftOperand, this.rightOperand ]); diff --git a/src/slang-nodes/Block.ts b/src/slang-nodes/Block.ts index 901242d17..2be059276 100644 --- a/src/slang-nodes/Block.ts +++ b/src/slang-nodes/Block.ts @@ -17,11 +17,11 @@ export class Block implements SlangNode { statements: Statements; constructor(ast: ast.Block, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.statements = new Statements(ast.statements, options); - [this.loc, this.comments] = updateMetadata(metadata, [this.statements]); + updateMetadata(this.loc, this.comments, [this.statements]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/CallOptions.ts b/src/slang-nodes/CallOptions.ts index 3822b7780..5ce7a8918 100644 --- a/src/slang-nodes/CallOptions.ts +++ b/src/slang-nodes/CallOptions.ts @@ -21,11 +21,11 @@ export class CallOptions implements SlangNode { items: NamedArgument[]; constructor(ast: ast.CallOptions, options: ParserOptions) { - const metadata = getNodeMetadata(ast, true); + [this.loc, this.comments] = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new NamedArgument(item, options)); - [this.loc, this.comments] = updateMetadata(metadata, [this.items]); + updateMetadata(this.loc, this.comments, [this.items]); } print( diff --git a/src/slang-nodes/CallOptionsExpression.ts b/src/slang-nodes/CallOptionsExpression.ts index 33750ad46..7743cba0f 100644 --- a/src/slang-nodes/CallOptionsExpression.ts +++ b/src/slang-nodes/CallOptionsExpression.ts @@ -20,15 +20,12 @@ export class CallOptionsExpression implements SlangNode { options: CallOptions; constructor(ast: ast.CallOptionsExpression, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.operand = new Expression(ast.operand, options); this.options = new CallOptions(ast.options, options); - [this.loc, this.comments] = updateMetadata(metadata, [ - this.operand, - this.options - ]); + updateMetadata(this.loc, this.comments, [this.operand, this.options]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/CatchClause.ts b/src/slang-nodes/CatchClause.ts index 7a2862e26..cb4077d79 100644 --- a/src/slang-nodes/CatchClause.ts +++ b/src/slang-nodes/CatchClause.ts @@ -20,17 +20,14 @@ export class CatchClause implements SlangNode { body: Block; constructor(ast: ast.CatchClause, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); if (ast.error) { this.error = new CatchClauseError(ast.error, options); } this.body = new Block(ast.body, options); - [this.loc, this.comments] = updateMetadata(metadata, [ - this.error, - this.body - ]); + updateMetadata(this.loc, this.comments, [this.error, this.body]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/CatchClauseError.ts b/src/slang-nodes/CatchClauseError.ts index abced7b2d..b5cb107c1 100644 --- a/src/slang-nodes/CatchClauseError.ts +++ b/src/slang-nodes/CatchClauseError.ts @@ -23,14 +23,14 @@ export class CatchClauseError implements SlangNode { parameters: ParametersDeclaration; constructor(ast: ast.CatchClauseError, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); if (ast.name) { this.name = new Identifier(ast.name); } this.parameters = new ParametersDeclaration(ast.parameters, options); - [this.loc, this.comments] = updateMetadata(metadata, [this.parameters]); + updateMetadata(this.loc, this.comments, [this.parameters]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/CatchClauses.ts b/src/slang-nodes/CatchClauses.ts index 47769c288..7eb6ca08c 100644 --- a/src/slang-nodes/CatchClauses.ts +++ b/src/slang-nodes/CatchClauses.ts @@ -20,11 +20,11 @@ export class CatchClauses implements SlangNode { items: CatchClause[]; constructor(ast: ast.CatchClauses, options: ParserOptions) { - const metadata = getNodeMetadata(ast, true); + [this.loc, this.comments] = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new CatchClause(item, options)); - [this.loc, this.comments] = updateMetadata(metadata, [this.items]); + updateMetadata(this.loc, this.comments, [this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ConditionalExpression.ts b/src/slang-nodes/ConditionalExpression.ts index 2508d52e9..c52dafad4 100644 --- a/src/slang-nodes/ConditionalExpression.ts +++ b/src/slang-nodes/ConditionalExpression.ts @@ -122,13 +122,13 @@ export class ConditionalExpression implements SlangNode { falseExpression: Expression; constructor(ast: ast.ConditionalExpression, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.operand = new Expression(ast.operand, options); this.trueExpression = new Expression(ast.trueExpression, options); this.falseExpression = new Expression(ast.falseExpression, options); - [this.loc, this.comments] = updateMetadata(metadata, [ + updateMetadata(this.loc, this.comments, [ this.operand, this.trueExpression, this.falseExpression diff --git a/src/slang-nodes/ConstantDefinition.ts b/src/slang-nodes/ConstantDefinition.ts index 40623e10e..d3aaf1a60 100644 --- a/src/slang-nodes/ConstantDefinition.ts +++ b/src/slang-nodes/ConstantDefinition.ts @@ -23,16 +23,13 @@ export class ConstantDefinition implements SlangNode { value: Expression; constructor(ast: ast.ConstantDefinition, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.typeName = new TypeName(ast.typeName, options); this.name = new Identifier(ast.name); this.value = new Expression(ast.value, options); - [this.loc, this.comments] = updateMetadata(metadata, [ - this.typeName, - this.value - ]); + updateMetadata(this.loc, this.comments, [this.typeName, this.value]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ConstructorAttribute.ts b/src/slang-nodes/ConstructorAttribute.ts index 98f775b25..f96f2c99c 100644 --- a/src/slang-nodes/ConstructorAttribute.ts +++ b/src/slang-nodes/ConstructorAttribute.ts @@ -17,15 +17,16 @@ export class ConstructorAttribute implements SlangNode { variant: ModifierInvocation | string; constructor(ast: ast.ConstructorAttribute, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.variant = ast.variant instanceof TerminalNode ? ast.variant.unparse() : new ModifierInvocation(ast.variant, options); - [this.loc, this.comments] = updateMetadata( - metadata, + updateMetadata( + this.loc, + this.comments, typeof this.variant === 'string' ? [] : [this.variant] ); } diff --git a/src/slang-nodes/ConstructorAttributes.ts b/src/slang-nodes/ConstructorAttributes.ts index d45956d06..62776fe79 100644 --- a/src/slang-nodes/ConstructorAttributes.ts +++ b/src/slang-nodes/ConstructorAttributes.ts @@ -21,13 +21,13 @@ export class ConstructorAttributes implements SlangNode { items: ConstructorAttribute[]; constructor(ast: ast.ConstructorAttributes, options: ParserOptions) { - const metadata = getNodeMetadata(ast, true); + [this.loc, this.comments] = getNodeMetadata(ast, true); this.items = ast.items.map( (item) => new ConstructorAttribute(item, options) ); - [this.loc, this.comments] = updateMetadata(metadata, [this.items]); + updateMetadata(this.loc, this.comments, [this.items]); this.items = this.items.sort(sortFunctionAttributes); } diff --git a/src/slang-nodes/ConstructorDefinition.ts b/src/slang-nodes/ConstructorDefinition.ts index 1bf468853..5b14f8770 100644 --- a/src/slang-nodes/ConstructorDefinition.ts +++ b/src/slang-nodes/ConstructorDefinition.ts @@ -24,13 +24,13 @@ export class ConstructorDefinition implements SlangNode { body: Block; constructor(ast: ast.ConstructorDefinition, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.parameters = new ParametersDeclaration(ast.parameters, options); this.attributes = new ConstructorAttributes(ast.attributes, options); this.body = new Block(ast.body, options); - [this.loc, this.comments] = updateMetadata(metadata, [ + updateMetadata(this.loc, this.comments, [ this.parameters, this.attributes, this.body diff --git a/src/slang-nodes/ContractDefinition.ts b/src/slang-nodes/ContractDefinition.ts index 02edd9306..6acb3af0d 100644 --- a/src/slang-nodes/ContractDefinition.ts +++ b/src/slang-nodes/ContractDefinition.ts @@ -29,17 +29,14 @@ export class ContractDefinition implements SlangNode { members: ContractMembers; constructor(ast: ast.ContractDefinition, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.abstractKeyword = ast.abstractKeyword?.unparse(); this.name = new Identifier(ast.name); this.specifiers = new ContractSpecifiers(ast.specifiers, options); this.members = new ContractMembers(ast.members, options); - [this.loc, this.comments] = updateMetadata(metadata, [ - this.specifiers, - this.members - ]); + updateMetadata(this.loc, this.comments, [this.specifiers, this.members]); this.cleanModifierInvocationArguments(options); } diff --git a/src/slang-nodes/ContractMember.ts b/src/slang-nodes/ContractMember.ts index 15bc6a36f..dd7e69919 100644 --- a/src/slang-nodes/ContractMember.ts +++ b/src/slang-nodes/ContractMember.ts @@ -42,7 +42,7 @@ export class ContractMember implements SlangNode { | UserDefinedValueTypeDefinition; constructor(ast: ast.ContractMember, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); switch (ast.variant.cst.kind) { case NonterminalKind.UsingDirective: @@ -123,7 +123,7 @@ export class ContractMember implements SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - [this.loc, this.comments] = updateMetadata(metadata, [this.variant]); + updateMetadata(this.loc, this.comments, [this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ContractMembers.ts b/src/slang-nodes/ContractMembers.ts index 6230f46b2..4536471d7 100644 --- a/src/slang-nodes/ContractMembers.ts +++ b/src/slang-nodes/ContractMembers.ts @@ -23,11 +23,11 @@ export class ContractMembers implements SlangNode { items: ContractMember[]; constructor(ast: ast.ContractMembers, options: ParserOptions) { - const metadata = getNodeMetadata(ast, true); + [this.loc, this.comments] = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new ContractMember(item, options)); - [this.loc, this.comments] = updateMetadata(metadata, [this.items]); + updateMetadata(this.loc, this.comments, [this.items]); } print( diff --git a/src/slang-nodes/ContractSpecifier.ts b/src/slang-nodes/ContractSpecifier.ts index 7d4ff1e51..394364bc9 100644 --- a/src/slang-nodes/ContractSpecifier.ts +++ b/src/slang-nodes/ContractSpecifier.ts @@ -18,7 +18,7 @@ export class ContractSpecifier implements SlangNode { variant: InheritanceSpecifier | StorageLayoutSpecifier; constructor(ast: ast.ContractSpecifier, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); switch (ast.variant.cst.kind) { case NonterminalKind.InheritanceSpecifier: @@ -36,7 +36,7 @@ export class ContractSpecifier implements SlangNode { default: throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - [this.loc, this.comments] = updateMetadata(metadata, [this.variant]); + updateMetadata(this.loc, this.comments, [this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ContractSpecifiers.ts b/src/slang-nodes/ContractSpecifiers.ts index e35b42817..696e8dbe6 100644 --- a/src/slang-nodes/ContractSpecifiers.ts +++ b/src/slang-nodes/ContractSpecifiers.ts @@ -22,11 +22,11 @@ export class ContractSpecifiers implements SlangNode { items: ContractSpecifier[]; constructor(ast: ast.ContractSpecifiers, options: ParserOptions) { - const metadata = getNodeMetadata(ast, true); + [this.loc, this.comments] = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new ContractSpecifier(item, options)); - [this.loc, this.comments] = updateMetadata(metadata, [this.items]); + updateMetadata(this.loc, this.comments, [this.items]); this.items = this.items.sort(sortContractSpecifiers); } diff --git a/src/slang-nodes/DecimalNumberExpression.ts b/src/slang-nodes/DecimalNumberExpression.ts index cfedddd08..17aec4342 100644 --- a/src/slang-nodes/DecimalNumberExpression.ts +++ b/src/slang-nodes/DecimalNumberExpression.ts @@ -19,14 +19,14 @@ export class DecimalNumberExpression implements SlangNode { unit?: NumberUnit; constructor(ast: ast.DecimalNumberExpression) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.literal = ast.literal.unparse(); if (ast.unit) { this.unit = new NumberUnit(ast.unit); } - [this.loc, this.comments] = updateMetadata(metadata, [this.unit]); + updateMetadata(this.loc, this.comments, [this.unit]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/DoWhileStatement.ts b/src/slang-nodes/DoWhileStatement.ts index b48d3abb5..7a071cfe3 100644 --- a/src/slang-nodes/DoWhileStatement.ts +++ b/src/slang-nodes/DoWhileStatement.ts @@ -24,15 +24,12 @@ export class DoWhileStatement implements SlangNode { condition: Expression; constructor(ast: ast.DoWhileStatement, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.body = new Statement(ast.body, options); this.condition = new Expression(ast.condition, options); - [this.loc, this.comments] = updateMetadata(metadata, [ - this.body, - this.condition - ]); + updateMetadata(this.loc, this.comments, [this.body, this.condition]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ElementaryType.ts b/src/slang-nodes/ElementaryType.ts index 4f05b6a14..8d42d998e 100644 --- a/src/slang-nodes/ElementaryType.ts +++ b/src/slang-nodes/ElementaryType.ts @@ -16,15 +16,16 @@ export class ElementaryType implements SlangNode { variant: AddressType | string; constructor(ast: ast.ElementaryType) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.variant = ast.variant instanceof TerminalNode ? ast.variant.unparse() : new AddressType(ast.variant); - [this.loc, this.comments] = updateMetadata( - metadata, + updateMetadata( + this.loc, + this.comments, typeof this.variant === 'string' ? [] : [this.variant] ); } diff --git a/src/slang-nodes/ElseBranch.ts b/src/slang-nodes/ElseBranch.ts index 09ea47f95..f79bb0865 100644 --- a/src/slang-nodes/ElseBranch.ts +++ b/src/slang-nodes/ElseBranch.ts @@ -26,11 +26,11 @@ export class ElseBranch implements SlangNode { body: Statement; constructor(ast: ast.ElseBranch, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.body = new Statement(ast.body, options); - [this.loc, this.comments] = updateMetadata(metadata, [this.body]); + updateMetadata(this.loc, this.comments, [this.body]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/EmitStatement.ts b/src/slang-nodes/EmitStatement.ts index a1819387f..50310b3c0 100644 --- a/src/slang-nodes/EmitStatement.ts +++ b/src/slang-nodes/EmitStatement.ts @@ -20,15 +20,12 @@ export class EmitStatement implements SlangNode { arguments: ArgumentsDeclaration; constructor(ast: ast.EmitStatement, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.event = new IdentifierPath(ast.event); this.arguments = new ArgumentsDeclaration(ast.arguments, options); - [this.loc, this.comments] = updateMetadata(metadata, [ - this.event, - this.arguments - ]); + updateMetadata(this.loc, this.comments, [this.event, this.arguments]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/EnumDefinition.ts b/src/slang-nodes/EnumDefinition.ts index 0a9ae19e5..a21951a1e 100644 --- a/src/slang-nodes/EnumDefinition.ts +++ b/src/slang-nodes/EnumDefinition.ts @@ -19,12 +19,12 @@ export class EnumDefinition implements SlangNode { members: EnumMembers; constructor(ast: ast.EnumDefinition) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.name = new Identifier(ast.name); this.members = new EnumMembers(ast.members); - [this.loc, this.comments] = updateMetadata(metadata, [this.members]); + updateMetadata(this.loc, this.comments, [this.members]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/EqualityExpression.ts b/src/slang-nodes/EqualityExpression.ts index faf2eb155..8957303ec 100644 --- a/src/slang-nodes/EqualityExpression.ts +++ b/src/slang-nodes/EqualityExpression.ts @@ -33,13 +33,13 @@ export class EqualityExpression implements SlangNode { rightOperand: Expression; constructor(ast: ast.EqualityExpression, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.leftOperand = new Expression(ast.leftOperand, options); this.operator = ast.operator.unparse(); this.rightOperand = new Expression(ast.rightOperand, options); - [this.loc, this.comments] = updateMetadata(metadata, [ + updateMetadata(this.loc, this.comments, [ this.leftOperand, this.rightOperand ]); diff --git a/src/slang-nodes/ErrorDefinition.ts b/src/slang-nodes/ErrorDefinition.ts index c8cd7d52d..8a5162372 100644 --- a/src/slang-nodes/ErrorDefinition.ts +++ b/src/slang-nodes/ErrorDefinition.ts @@ -20,12 +20,12 @@ export class ErrorDefinition implements SlangNode { members: ErrorParametersDeclaration; constructor(ast: ast.ErrorDefinition, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.name = new Identifier(ast.name); this.members = new ErrorParametersDeclaration(ast.members, options); - [this.loc, this.comments] = updateMetadata(metadata, [this.members]); + updateMetadata(this.loc, this.comments, [this.members]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ErrorParameter.ts b/src/slang-nodes/ErrorParameter.ts index 7642cf1c2..ee4d74ed1 100644 --- a/src/slang-nodes/ErrorParameter.ts +++ b/src/slang-nodes/ErrorParameter.ts @@ -21,14 +21,14 @@ export class ErrorParameter implements SlangNode { name?: Identifier; constructor(ast: ast.ErrorParameter, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.typeName = new TypeName(ast.typeName, options); if (ast.name) { this.name = new Identifier(ast.name); } - [this.loc, this.comments] = updateMetadata(metadata, [this.typeName]); + updateMetadata(this.loc, this.comments, [this.typeName]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ErrorParameters.ts b/src/slang-nodes/ErrorParameters.ts index 544ce99a9..742d19e0e 100644 --- a/src/slang-nodes/ErrorParameters.ts +++ b/src/slang-nodes/ErrorParameters.ts @@ -18,11 +18,11 @@ export class ErrorParameters implements SlangNode { items: ErrorParameter[]; constructor(ast: ast.ErrorParameters, options: ParserOptions) { - const metadata = getNodeMetadata(ast, true); + [this.loc, this.comments] = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new ErrorParameter(item, options)); - [this.loc, this.comments] = updateMetadata(metadata, [this.items]); + updateMetadata(this.loc, this.comments, [this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ErrorParametersDeclaration.ts b/src/slang-nodes/ErrorParametersDeclaration.ts index 6bec2c6ef..55576315b 100644 --- a/src/slang-nodes/ErrorParametersDeclaration.ts +++ b/src/slang-nodes/ErrorParametersDeclaration.ts @@ -20,11 +20,11 @@ export class ErrorParametersDeclaration implements SlangNode { ast: ast.ErrorParametersDeclaration, options: ParserOptions ) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.parameters = new ErrorParameters(ast.parameters, options); - [this.loc, this.comments] = updateMetadata(metadata, [this.parameters]); + updateMetadata(this.loc, this.comments, [this.parameters]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/EventDefinition.ts b/src/slang-nodes/EventDefinition.ts index 84d5b9cbe..0969cf597 100644 --- a/src/slang-nodes/EventDefinition.ts +++ b/src/slang-nodes/EventDefinition.ts @@ -22,13 +22,13 @@ export class EventDefinition implements SlangNode { anonymousKeyword?: string; constructor(ast: ast.EventDefinition, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.name = new Identifier(ast.name); this.parameters = new EventParametersDeclaration(ast.parameters, options); this.anonymousKeyword = ast.anonymousKeyword?.unparse(); - [this.loc, this.comments] = updateMetadata(metadata, [this.parameters]); + updateMetadata(this.loc, this.comments, [this.parameters]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/EventParameter.ts b/src/slang-nodes/EventParameter.ts index ae97d5022..b997b067c 100644 --- a/src/slang-nodes/EventParameter.ts +++ b/src/slang-nodes/EventParameter.ts @@ -23,7 +23,7 @@ export class EventParameter implements SlangNode { name?: Identifier; constructor(ast: ast.EventParameter, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.typeName = new TypeName(ast.typeName, options); this.indexedKeyword = ast.indexedKeyword?.unparse(); @@ -31,7 +31,7 @@ export class EventParameter implements SlangNode { this.name = new Identifier(ast.name); } - [this.loc, this.comments] = updateMetadata(metadata, [this.typeName]); + updateMetadata(this.loc, this.comments, [this.typeName]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/EventParameters.ts b/src/slang-nodes/EventParameters.ts index 1159e0363..c1b2f49a1 100644 --- a/src/slang-nodes/EventParameters.ts +++ b/src/slang-nodes/EventParameters.ts @@ -18,11 +18,11 @@ export class EventParameters implements SlangNode { items: EventParameter[]; constructor(ast: ast.EventParameters, options: ParserOptions) { - const metadata = getNodeMetadata(ast, true); + [this.loc, this.comments] = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new EventParameter(item, options)); - [this.loc, this.comments] = updateMetadata(metadata, [this.items]); + updateMetadata(this.loc, this.comments, [this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/EventParametersDeclaration.ts b/src/slang-nodes/EventParametersDeclaration.ts index 427c827b6..1c3f7d203 100644 --- a/src/slang-nodes/EventParametersDeclaration.ts +++ b/src/slang-nodes/EventParametersDeclaration.ts @@ -20,11 +20,11 @@ export class EventParametersDeclaration implements SlangNode { ast: ast.EventParametersDeclaration, options: ParserOptions ) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.parameters = new EventParameters(ast.parameters, options); - [this.loc, this.comments] = updateMetadata(metadata, [this.parameters]); + updateMetadata(this.loc, this.comments, [this.parameters]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ExperimentalFeature.ts b/src/slang-nodes/ExperimentalFeature.ts index ea9135b71..d17a1c314 100644 --- a/src/slang-nodes/ExperimentalFeature.ts +++ b/src/slang-nodes/ExperimentalFeature.ts @@ -22,15 +22,16 @@ export class ExperimentalFeature implements SlangNode { variant: StringLiteral | Identifier; constructor(ast: ast.ExperimentalFeature, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.variant = ast.variant instanceof TerminalNode ? new Identifier(ast.variant) : new StringLiteral(ast.variant, options); - [this.loc, this.comments] = updateMetadata( - metadata, + updateMetadata( + this.loc, + this.comments, this.variant.kind === TerminalKind.Identifier ? [] : [this.variant] ); } diff --git a/src/slang-nodes/ExperimentalPragma.ts b/src/slang-nodes/ExperimentalPragma.ts index 383ade03d..4ea874dcf 100644 --- a/src/slang-nodes/ExperimentalPragma.ts +++ b/src/slang-nodes/ExperimentalPragma.ts @@ -17,11 +17,11 @@ export class ExperimentalPragma implements SlangNode { feature: ExperimentalFeature; constructor(ast: ast.ExperimentalPragma, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.feature = new ExperimentalFeature(ast.feature, options); - [this.loc, this.comments] = updateMetadata(metadata, [this.feature]); + updateMetadata(this.loc, this.comments, [this.feature]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ExponentiationExpression.ts b/src/slang-nodes/ExponentiationExpression.ts index 3206a46ca..ade0cb3e6 100644 --- a/src/slang-nodes/ExponentiationExpression.ts +++ b/src/slang-nodes/ExponentiationExpression.ts @@ -53,13 +53,13 @@ export class ExponentiationExpression implements SlangNode { ast: ast.ExponentiationExpression, options: ParserOptions ) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.leftOperand = new Expression(ast.leftOperand, options); this.operator = ast.operator.unparse(); this.rightOperand = new Expression(ast.rightOperand, options); - [this.loc, this.comments] = updateMetadata(metadata, [ + updateMetadata(this.loc, this.comments, [ this.leftOperand, this.rightOperand ]); diff --git a/src/slang-nodes/Expression.ts b/src/slang-nodes/Expression.ts index dc58b25c1..fa7a6ea7d 100644 --- a/src/slang-nodes/Expression.ts +++ b/src/slang-nodes/Expression.ts @@ -76,7 +76,7 @@ export class Expression implements SlangNode { | Identifier; constructor(ast: ast.Expression, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); if (ast.variant instanceof TerminalNode) { this.variant = new Identifier(ast.variant); @@ -244,8 +244,9 @@ export class Expression implements SlangNode { } } - [this.loc, this.comments] = updateMetadata( - metadata, + updateMetadata( + this.loc, + this.comments, this.variant.kind === TerminalKind.Identifier ? [] : [this.variant] ); } diff --git a/src/slang-nodes/ExpressionStatement.ts b/src/slang-nodes/ExpressionStatement.ts index 3cf638072..3c4b04af4 100644 --- a/src/slang-nodes/ExpressionStatement.ts +++ b/src/slang-nodes/ExpressionStatement.ts @@ -17,11 +17,11 @@ export class ExpressionStatement implements SlangNode { expression: Expression; constructor(ast: ast.ExpressionStatement, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.expression = new Expression(ast.expression, options); - [this.loc, this.comments] = updateMetadata(metadata, [this.expression]); + updateMetadata(this.loc, this.comments, [this.expression]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/FallbackFunctionAttribute.ts b/src/slang-nodes/FallbackFunctionAttribute.ts index 55297b96d..f3aa47780 100644 --- a/src/slang-nodes/FallbackFunctionAttribute.ts +++ b/src/slang-nodes/FallbackFunctionAttribute.ts @@ -21,7 +21,7 @@ export class FallbackFunctionAttribute implements SlangNode { ast: ast.FallbackFunctionAttribute, options: ParserOptions ) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); if (ast.variant instanceof TerminalNode) { this.variant = ast.variant.unparse(); @@ -43,8 +43,9 @@ export class FallbackFunctionAttribute implements SlangNode { } } - [this.loc, this.comments] = updateMetadata( - metadata, + updateMetadata( + this.loc, + this.comments, typeof this.variant === 'string' ? [] : [this.variant] ); } diff --git a/src/slang-nodes/FallbackFunctionAttributes.ts b/src/slang-nodes/FallbackFunctionAttributes.ts index a69434258..65917ac23 100644 --- a/src/slang-nodes/FallbackFunctionAttributes.ts +++ b/src/slang-nodes/FallbackFunctionAttributes.ts @@ -24,13 +24,13 @@ export class FallbackFunctionAttributes implements SlangNode { ast: ast.FallbackFunctionAttributes, options: ParserOptions ) { - const metadata = getNodeMetadata(ast, true); + [this.loc, this.comments] = getNodeMetadata(ast, true); this.items = ast.items.map( (item) => new FallbackFunctionAttribute(item, options) ); - [this.loc, this.comments] = updateMetadata(metadata, [this.items]); + updateMetadata(this.loc, this.comments, [this.items]); this.items = this.items.sort(sortFunctionAttributes); } diff --git a/src/slang-nodes/FallbackFunctionDefinition.ts b/src/slang-nodes/FallbackFunctionDefinition.ts index 0d1952f7b..2e1ef38c1 100644 --- a/src/slang-nodes/FallbackFunctionDefinition.ts +++ b/src/slang-nodes/FallbackFunctionDefinition.ts @@ -30,7 +30,7 @@ export class FallbackFunctionDefinition implements SlangNode { ast: ast.FallbackFunctionDefinition, options: ParserOptions ) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.parameters = new ParametersDeclaration(ast.parameters, options); this.attributes = new FallbackFunctionAttributes(ast.attributes, options); @@ -39,7 +39,7 @@ export class FallbackFunctionDefinition implements SlangNode { } this.body = new FunctionBody(ast.body, options); - [this.loc, this.comments] = updateMetadata(metadata, [ + updateMetadata(this.loc, this.comments, [ this.parameters, this.attributes, this.returns, diff --git a/src/slang-nodes/ForStatement.ts b/src/slang-nodes/ForStatement.ts index e2b8e0830..8b5a48fc7 100644 --- a/src/slang-nodes/ForStatement.ts +++ b/src/slang-nodes/ForStatement.ts @@ -30,7 +30,7 @@ export class ForStatement implements SlangNode { body: Statement; constructor(ast: ast.ForStatement, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.initialization = new ForStatementInitialization( ast.initialization, @@ -42,7 +42,7 @@ export class ForStatement implements SlangNode { } this.body = new Statement(ast.body, options); - [this.loc, this.comments] = updateMetadata(metadata, [ + updateMetadata(this.loc, this.comments, [ this.initialization, this.condition, this.iterator, diff --git a/src/slang-nodes/ForStatementCondition.ts b/src/slang-nodes/ForStatementCondition.ts index 6ad65aa03..055b440ae 100644 --- a/src/slang-nodes/ForStatementCondition.ts +++ b/src/slang-nodes/ForStatementCondition.ts @@ -17,15 +17,16 @@ export class ForStatementCondition implements SlangNode { variant: ExpressionStatement | string; constructor(ast: ast.ForStatementCondition, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.variant = ast.variant instanceof TerminalNode ? ast.variant.unparse() : new ExpressionStatement(ast.variant, options); - [this.loc, this.comments] = updateMetadata( - metadata, + updateMetadata( + this.loc, + this.comments, typeof this.variant === 'string' ? [] : [this.variant] ); } diff --git a/src/slang-nodes/ForStatementInitialization.ts b/src/slang-nodes/ForStatementInitialization.ts index 7b8609abc..5c76adb01 100644 --- a/src/slang-nodes/ForStatementInitialization.ts +++ b/src/slang-nodes/ForStatementInitialization.ts @@ -26,7 +26,7 @@ export class ForStatementInitialization implements SlangNode { ast: ast.ForStatementInitialization, options: ParserOptions ) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); if (ast.variant instanceof TerminalNode) { this.variant = ast.variant.unparse(); @@ -55,8 +55,9 @@ export class ForStatementInitialization implements SlangNode { } } - [this.loc, this.comments] = updateMetadata( - metadata, + updateMetadata( + this.loc, + this.comments, typeof this.variant === 'string' ? [] : [this.variant] ); } diff --git a/src/slang-nodes/FunctionAttribute.ts b/src/slang-nodes/FunctionAttribute.ts index 48cea1fb4..b73e39c7e 100644 --- a/src/slang-nodes/FunctionAttribute.ts +++ b/src/slang-nodes/FunctionAttribute.ts @@ -18,7 +18,7 @@ export class FunctionAttribute implements SlangNode { variant: ModifierInvocation | OverrideSpecifier | string; constructor(ast: ast.FunctionAttribute, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); if (ast.variant instanceof TerminalNode) { this.variant = ast.variant.unparse(); @@ -40,8 +40,9 @@ export class FunctionAttribute implements SlangNode { } } - [this.loc, this.comments] = updateMetadata( - metadata, + updateMetadata( + this.loc, + this.comments, typeof this.variant === 'string' ? [] : [this.variant] ); } diff --git a/src/slang-nodes/FunctionAttributes.ts b/src/slang-nodes/FunctionAttributes.ts index 324c1d929..32586dc27 100644 --- a/src/slang-nodes/FunctionAttributes.ts +++ b/src/slang-nodes/FunctionAttributes.ts @@ -21,11 +21,11 @@ export class FunctionAttributes implements SlangNode { items: FunctionAttribute[]; constructor(ast: ast.FunctionAttributes, options: ParserOptions) { - const metadata = getNodeMetadata(ast, true); + [this.loc, this.comments] = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new FunctionAttribute(item, options)); - [this.loc, this.comments] = updateMetadata(metadata, [this.items]); + updateMetadata(this.loc, this.comments, [this.items]); this.items = this.items.sort(sortFunctionAttributes); } diff --git a/src/slang-nodes/FunctionBody.ts b/src/slang-nodes/FunctionBody.ts index 0d31cf407..f8c42d0f4 100644 --- a/src/slang-nodes/FunctionBody.ts +++ b/src/slang-nodes/FunctionBody.ts @@ -17,15 +17,16 @@ export class FunctionBody implements SlangNode { variant: Block | string; constructor(ast: ast.FunctionBody, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.variant = ast.variant instanceof TerminalNode ? ast.variant.unparse() : new Block(ast.variant, options); - [this.loc, this.comments] = updateMetadata( - metadata, + updateMetadata( + this.loc, + this.comments, typeof this.variant === 'string' ? [] : [this.variant] ); } diff --git a/src/slang-nodes/FunctionCallExpression.ts b/src/slang-nodes/FunctionCallExpression.ts index 7d28447c4..77f281343 100644 --- a/src/slang-nodes/FunctionCallExpression.ts +++ b/src/slang-nodes/FunctionCallExpression.ts @@ -27,15 +27,12 @@ export class FunctionCallExpression implements SlangNode { ast: ast.FunctionCallExpression, options: ParserOptions ) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.operand = new Expression(ast.operand, options); this.arguments = new ArgumentsDeclaration(ast.arguments, options); - [this.loc, this.comments] = updateMetadata(metadata, [ - this.operand, - this.arguments - ]); + updateMetadata(this.loc, this.comments, [this.operand, this.arguments]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/FunctionDefinition.ts b/src/slang-nodes/FunctionDefinition.ts index 1d3474674..7c4e468a3 100644 --- a/src/slang-nodes/FunctionDefinition.ts +++ b/src/slang-nodes/FunctionDefinition.ts @@ -31,7 +31,7 @@ export class FunctionDefinition implements SlangNode { body: FunctionBody; constructor(ast: ast.FunctionDefinition, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.name = new FunctionName(ast.name); this.parameters = new ParametersDeclaration(ast.parameters, options); @@ -41,7 +41,7 @@ export class FunctionDefinition implements SlangNode { } this.body = new FunctionBody(ast.body, options); - [this.loc, this.comments] = updateMetadata(metadata, [ + updateMetadata(this.loc, this.comments, [ this.name, this.parameters, this.attributes, diff --git a/src/slang-nodes/FunctionType.ts b/src/slang-nodes/FunctionType.ts index a34cbbb31..27d09294c 100644 --- a/src/slang-nodes/FunctionType.ts +++ b/src/slang-nodes/FunctionType.ts @@ -24,7 +24,7 @@ export class FunctionType implements SlangNode { returns?: ReturnsDeclaration; constructor(ast: ast.FunctionType, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.parameters = new ParametersDeclaration(ast.parameters, options); this.attributes = new FunctionTypeAttributes(ast.attributes); @@ -32,7 +32,7 @@ export class FunctionType implements SlangNode { this.returns = new ReturnsDeclaration(ast.returns, options); } - [this.loc, this.comments] = updateMetadata(metadata, [ + updateMetadata(this.loc, this.comments, [ this.parameters, this.attributes, this.returns diff --git a/src/slang-nodes/FunctionTypeAttributes.ts b/src/slang-nodes/FunctionTypeAttributes.ts index d5678fe64..bb244e2ef 100644 --- a/src/slang-nodes/FunctionTypeAttributes.ts +++ b/src/slang-nodes/FunctionTypeAttributes.ts @@ -20,11 +20,11 @@ export class FunctionTypeAttributes implements SlangNode { items: FunctionTypeAttribute[]; constructor(ast: ast.FunctionTypeAttributes) { - const metadata = getNodeMetadata(ast, true); + [this.loc, this.comments] = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new FunctionTypeAttribute(item)); - [this.loc, this.comments] = updateMetadata(metadata, [this.items]); + updateMetadata(this.loc, this.comments, [this.items]); this.items = this.items.sort(sortFunctionAttributes); } diff --git a/src/slang-nodes/HexNumberExpression.ts b/src/slang-nodes/HexNumberExpression.ts index 27ba8dd7a..01eab001c 100644 --- a/src/slang-nodes/HexNumberExpression.ts +++ b/src/slang-nodes/HexNumberExpression.ts @@ -19,14 +19,14 @@ export class HexNumberExpression implements SlangNode { unit?: NumberUnit; constructor(ast: ast.HexNumberExpression) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.literal = ast.literal.unparse(); if (ast.unit) { this.unit = new NumberUnit(ast.unit); } - [this.loc, this.comments] = updateMetadata(metadata, [this.unit]); + updateMetadata(this.loc, this.comments, [this.unit]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/HexStringLiterals.ts b/src/slang-nodes/HexStringLiterals.ts index adeee5d58..ca099e261 100644 --- a/src/slang-nodes/HexStringLiterals.ts +++ b/src/slang-nodes/HexStringLiterals.ts @@ -20,11 +20,11 @@ export class HexStringLiterals implements SlangNode { items: HexStringLiteral[]; constructor(ast: ast.HexStringLiterals, options: ParserOptions) { - const metadata = getNodeMetadata(ast, true); + [this.loc, this.comments] = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new HexStringLiteral(item, options)); - [this.loc, this.comments] = updateMetadata(metadata, [this.items]); + updateMetadata(this.loc, this.comments, [this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/IfStatement.ts b/src/slang-nodes/IfStatement.ts index 791d28ce2..f26333c9b 100644 --- a/src/slang-nodes/IfStatement.ts +++ b/src/slang-nodes/IfStatement.ts @@ -28,7 +28,7 @@ export class IfStatement implements SlangNode { elseBranch?: ElseBranch; constructor(ast: ast.IfStatement, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.condition = new Expression(ast.condition, options); this.body = new Statement(ast.body, options); @@ -36,7 +36,7 @@ export class IfStatement implements SlangNode { this.elseBranch = new ElseBranch(ast.elseBranch, options); } - [this.loc, this.comments] = updateMetadata(metadata, [ + updateMetadata(this.loc, this.comments, [ this.condition, this.body, this.elseBranch diff --git a/src/slang-nodes/ImportClause.ts b/src/slang-nodes/ImportClause.ts index e60fe0ab1..95675f7c8 100644 --- a/src/slang-nodes/ImportClause.ts +++ b/src/slang-nodes/ImportClause.ts @@ -19,7 +19,7 @@ export class ImportClause implements SlangNode { variant: PathImport | NamedImport | ImportDeconstruction; constructor(ast: ast.ImportClause, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); switch (ast.variant.cst.kind) { case NonterminalKind.PathImport: @@ -38,7 +38,7 @@ export class ImportClause implements SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - [this.loc, this.comments] = updateMetadata(metadata, [this.variant]); + updateMetadata(this.loc, this.comments, [this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ImportDeconstruction.ts b/src/slang-nodes/ImportDeconstruction.ts index adb24701d..3de3fd791 100644 --- a/src/slang-nodes/ImportDeconstruction.ts +++ b/src/slang-nodes/ImportDeconstruction.ts @@ -20,15 +20,12 @@ export class ImportDeconstruction implements SlangNode { path: StringLiteral; constructor(ast: ast.ImportDeconstruction, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.symbols = new ImportDeconstructionSymbols(ast.symbols); this.path = new StringLiteral(ast.path, options); - [this.loc, this.comments] = updateMetadata(metadata, [ - this.symbols, - this.path - ]); + updateMetadata(this.loc, this.comments, [this.symbols, this.path]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ImportDeconstructionSymbol.ts b/src/slang-nodes/ImportDeconstructionSymbol.ts index df492ce79..2086aae61 100644 --- a/src/slang-nodes/ImportDeconstructionSymbol.ts +++ b/src/slang-nodes/ImportDeconstructionSymbol.ts @@ -19,14 +19,14 @@ export class ImportDeconstructionSymbol implements SlangNode { alias?: ImportAlias; constructor(ast: ast.ImportDeconstructionSymbol) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.name = new Identifier(ast.name); if (ast.alias) { this.alias = new ImportAlias(ast.alias); } - [this.loc, this.comments] = updateMetadata(metadata, [this.alias]); + updateMetadata(this.loc, this.comments, [this.alias]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ImportDeconstructionSymbols.ts b/src/slang-nodes/ImportDeconstructionSymbols.ts index b86e67350..b7f66bf3e 100644 --- a/src/slang-nodes/ImportDeconstructionSymbols.ts +++ b/src/slang-nodes/ImportDeconstructionSymbols.ts @@ -22,11 +22,11 @@ export class ImportDeconstructionSymbols implements SlangNode { items: ImportDeconstructionSymbol[]; constructor(ast: ast.ImportDeconstructionSymbols) { - const metadata = getNodeMetadata(ast, true); + [this.loc, this.comments] = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new ImportDeconstructionSymbol(item)); - [this.loc, this.comments] = updateMetadata(metadata, [this.items]); + updateMetadata(this.loc, this.comments, [this.items]); } print( diff --git a/src/slang-nodes/ImportDirective.ts b/src/slang-nodes/ImportDirective.ts index 87b0bb035..f01473779 100644 --- a/src/slang-nodes/ImportDirective.ts +++ b/src/slang-nodes/ImportDirective.ts @@ -17,11 +17,11 @@ export class ImportDirective implements SlangNode { clause: ImportClause; constructor(ast: ast.ImportDirective, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.clause = new ImportClause(ast.clause, options); - [this.loc, this.comments] = updateMetadata(metadata, [this.clause]); + updateMetadata(this.loc, this.comments, [this.clause]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/IndexAccessEnd.ts b/src/slang-nodes/IndexAccessEnd.ts index 06e1d43ae..18deee3fb 100644 --- a/src/slang-nodes/IndexAccessEnd.ts +++ b/src/slang-nodes/IndexAccessEnd.ts @@ -17,13 +17,13 @@ export class IndexAccessEnd implements SlangNode { end?: Expression; constructor(ast: ast.IndexAccessEnd, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); if (ast.end) { this.end = new Expression(ast.end, options); } - [this.loc, this.comments] = updateMetadata(metadata, [this.end]); + updateMetadata(this.loc, this.comments, [this.end]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/IndexAccessExpression.ts b/src/slang-nodes/IndexAccessExpression.ts index ea76d354c..39cb542be 100644 --- a/src/slang-nodes/IndexAccessExpression.ts +++ b/src/slang-nodes/IndexAccessExpression.ts @@ -27,7 +27,7 @@ export class IndexAccessExpression implements SlangNode { end?: IndexAccessEnd; constructor(ast: ast.IndexAccessExpression, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.operand = new Expression(ast.operand, options); if (ast.start) { @@ -37,7 +37,7 @@ export class IndexAccessExpression implements SlangNode { this.end = new IndexAccessEnd(ast.end, options); } - [this.loc, this.comments] = updateMetadata(metadata, [ + updateMetadata(this.loc, this.comments, [ this.operand, this.start, this.end diff --git a/src/slang-nodes/InequalityExpression.ts b/src/slang-nodes/InequalityExpression.ts index 2de94240a..305ad9ed7 100644 --- a/src/slang-nodes/InequalityExpression.ts +++ b/src/slang-nodes/InequalityExpression.ts @@ -31,13 +31,13 @@ export class InequalityExpression implements SlangNode { rightOperand: Expression; constructor(ast: ast.InequalityExpression, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.leftOperand = new Expression(ast.leftOperand, options); this.operator = ast.operator.unparse(); this.rightOperand = new Expression(ast.rightOperand, options); - [this.loc, this.comments] = updateMetadata(metadata, [ + updateMetadata(this.loc, this.comments, [ this.leftOperand, this.rightOperand ]); diff --git a/src/slang-nodes/InheritanceSpecifier.ts b/src/slang-nodes/InheritanceSpecifier.ts index 75a51f18e..671799a3b 100644 --- a/src/slang-nodes/InheritanceSpecifier.ts +++ b/src/slang-nodes/InheritanceSpecifier.ts @@ -17,11 +17,11 @@ export class InheritanceSpecifier implements SlangNode { types: InheritanceTypes; constructor(ast: ast.InheritanceSpecifier, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.types = new InheritanceTypes(ast.types, options); - [this.loc, this.comments] = updateMetadata(metadata, [this.types]); + updateMetadata(this.loc, this.comments, [this.types]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/InheritanceType.ts b/src/slang-nodes/InheritanceType.ts index 39cdcc601..6d889d6bd 100644 --- a/src/slang-nodes/InheritanceType.ts +++ b/src/slang-nodes/InheritanceType.ts @@ -20,17 +20,14 @@ export class InheritanceType implements SlangNode { arguments?: ArgumentsDeclaration; constructor(ast: ast.InheritanceType, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.typeName = new IdentifierPath(ast.typeName); if (ast.arguments) { this.arguments = new ArgumentsDeclaration(ast.arguments, options); } - [this.loc, this.comments] = updateMetadata(metadata, [ - this.typeName, - this.arguments - ]); + updateMetadata(this.loc, this.comments, [this.typeName, this.arguments]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/InheritanceTypes.ts b/src/slang-nodes/InheritanceTypes.ts index c9375202c..a5d6d302d 100644 --- a/src/slang-nodes/InheritanceTypes.ts +++ b/src/slang-nodes/InheritanceTypes.ts @@ -21,11 +21,11 @@ export class InheritanceTypes implements SlangNode { items: InheritanceType[]; constructor(ast: ast.InheritanceTypes, options: ParserOptions) { - const metadata = getNodeMetadata(ast, true); + [this.loc, this.comments] = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new InheritanceType(item, options)); - [this.loc, this.comments] = updateMetadata(metadata, [this.items]); + updateMetadata(this.loc, this.comments, [this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/InterfaceDefinition.ts b/src/slang-nodes/InterfaceDefinition.ts index 759fece6a..4744c7248 100644 --- a/src/slang-nodes/InterfaceDefinition.ts +++ b/src/slang-nodes/InterfaceDefinition.ts @@ -26,7 +26,7 @@ export class InterfaceDefinition implements SlangNode { members: InterfaceMembers; constructor(ast: ast.InterfaceDefinition, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.name = new Identifier(ast.name); if (ast.inheritance) { @@ -34,10 +34,7 @@ export class InterfaceDefinition implements SlangNode { } this.members = new InterfaceMembers(ast.members, options); - [this.loc, this.comments] = updateMetadata(metadata, [ - this.inheritance, - this.members - ]); + updateMetadata(this.loc, this.comments, [this.inheritance, this.members]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/InterfaceMembers.ts b/src/slang-nodes/InterfaceMembers.ts index 3f928dca7..f971ad531 100644 --- a/src/slang-nodes/InterfaceMembers.ts +++ b/src/slang-nodes/InterfaceMembers.ts @@ -22,11 +22,11 @@ export class InterfaceMembers implements SlangNode { items: ContractMember[]; constructor(ast: ast.InterfaceMembers, options: ParserOptions) { - const metadata = getNodeMetadata(ast, true); + [this.loc, this.comments] = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new ContractMember(item, options)); - [this.loc, this.comments] = updateMetadata(metadata, [this.items]); + updateMetadata(this.loc, this.comments, [this.items]); } print( diff --git a/src/slang-nodes/LibraryDefinition.ts b/src/slang-nodes/LibraryDefinition.ts index 441b985eb..9dab457f4 100644 --- a/src/slang-nodes/LibraryDefinition.ts +++ b/src/slang-nodes/LibraryDefinition.ts @@ -23,12 +23,12 @@ export class LibraryDefinition implements SlangNode { members: LibraryMembers; constructor(ast: ast.LibraryDefinition, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.name = new Identifier(ast.name); this.members = new LibraryMembers(ast.members, options); - [this.loc, this.comments] = updateMetadata(metadata, [this.members]); + updateMetadata(this.loc, this.comments, [this.members]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/LibraryMembers.ts b/src/slang-nodes/LibraryMembers.ts index 2b72c72b3..3483f7bae 100644 --- a/src/slang-nodes/LibraryMembers.ts +++ b/src/slang-nodes/LibraryMembers.ts @@ -22,11 +22,11 @@ export class LibraryMembers implements SlangNode { items: ContractMember[]; constructor(ast: ast.LibraryMembers, options: ParserOptions) { - const metadata = getNodeMetadata(ast, true); + [this.loc, this.comments] = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new ContractMember(item, options)); - [this.loc, this.comments] = updateMetadata(metadata, [this.items]); + updateMetadata(this.loc, this.comments, [this.items]); } print( diff --git a/src/slang-nodes/MappingKey.ts b/src/slang-nodes/MappingKey.ts index 27bb7a722..ca5e51199 100644 --- a/src/slang-nodes/MappingKey.ts +++ b/src/slang-nodes/MappingKey.ts @@ -20,14 +20,14 @@ export class MappingKey implements SlangNode { name?: Identifier; constructor(ast: ast.MappingKey) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.keyType = new MappingKeyType(ast.keyType); if (ast.name) { this.name = new Identifier(ast.name); } - [this.loc, this.comments] = updateMetadata(metadata, [this.keyType]); + updateMetadata(this.loc, this.comments, [this.keyType]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/MappingKeyType.ts b/src/slang-nodes/MappingKeyType.ts index 1c0edd134..1da0cf0d8 100644 --- a/src/slang-nodes/MappingKeyType.ts +++ b/src/slang-nodes/MappingKeyType.ts @@ -17,7 +17,7 @@ export class MappingKeyType implements SlangNode { variant: ElementaryType | IdentifierPath; constructor(ast: ast.MappingKeyType) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); switch (ast.variant.cst.kind) { case NonterminalKind.ElementaryType: @@ -30,7 +30,7 @@ export class MappingKeyType implements SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - [this.loc, this.comments] = updateMetadata(metadata, [this.variant]); + updateMetadata(this.loc, this.comments, [this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/MappingType.ts b/src/slang-nodes/MappingType.ts index 95e846987..9e47d7140 100644 --- a/src/slang-nodes/MappingType.ts +++ b/src/slang-nodes/MappingType.ts @@ -20,15 +20,12 @@ export class MappingType implements SlangNode { valueType: MappingValue; constructor(ast: ast.MappingType, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.keyType = new MappingKey(ast.keyType); this.valueType = new MappingValue(ast.valueType, options); - [this.loc, this.comments] = updateMetadata(metadata, [ - this.keyType, - this.valueType - ]); + updateMetadata(this.loc, this.comments, [this.keyType, this.valueType]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/MappingValue.ts b/src/slang-nodes/MappingValue.ts index 28ce267f8..603632aad 100644 --- a/src/slang-nodes/MappingValue.ts +++ b/src/slang-nodes/MappingValue.ts @@ -21,14 +21,14 @@ export class MappingValue implements SlangNode { name?: Identifier; constructor(ast: ast.MappingValue, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.typeName = new TypeName(ast.typeName, options); if (ast.name) { this.name = new Identifier(ast.name); } - [this.loc, this.comments] = updateMetadata(metadata, [this.typeName]); + updateMetadata(this.loc, this.comments, [this.typeName]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/MemberAccessExpression.ts b/src/slang-nodes/MemberAccessExpression.ts index 24b6efd7d..9ecca885f 100644 --- a/src/slang-nodes/MemberAccessExpression.ts +++ b/src/slang-nodes/MemberAccessExpression.ts @@ -126,12 +126,12 @@ export class MemberAccessExpression implements SlangNode { ast: ast.MemberAccessExpression, options: ParserOptions ) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.operand = new Expression(ast.operand, options); this.member = new Identifier(ast.member); - [this.loc, this.comments] = updateMetadata(metadata, [this.operand]); + updateMetadata(this.loc, this.comments, [this.operand]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ModifierAttribute.ts b/src/slang-nodes/ModifierAttribute.ts index c57419f04..3c6451794 100644 --- a/src/slang-nodes/ModifierAttribute.ts +++ b/src/slang-nodes/ModifierAttribute.ts @@ -16,15 +16,16 @@ export class ModifierAttribute implements SlangNode { variant: OverrideSpecifier | string; constructor(ast: ast.ModifierAttribute) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.variant = ast.variant instanceof TerminalNode ? ast.variant.unparse() : new OverrideSpecifier(ast.variant); - [this.loc, this.comments] = updateMetadata( - metadata, + updateMetadata( + this.loc, + this.comments, typeof this.variant === 'string' ? [] : [this.variant] ); } diff --git a/src/slang-nodes/ModifierAttributes.ts b/src/slang-nodes/ModifierAttributes.ts index bd4c156b8..780f04c2f 100644 --- a/src/slang-nodes/ModifierAttributes.ts +++ b/src/slang-nodes/ModifierAttributes.ts @@ -20,11 +20,11 @@ export class ModifierAttributes implements SlangNode { items: ModifierAttribute[]; constructor(ast: ast.ModifierAttributes) { - const metadata = getNodeMetadata(ast, true); + [this.loc, this.comments] = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new ModifierAttribute(item)); - [this.loc, this.comments] = updateMetadata(metadata, [this.items]); + updateMetadata(this.loc, this.comments, [this.items]); this.items = this.items.sort(sortFunctionAttributes); } diff --git a/src/slang-nodes/ModifierDefinition.ts b/src/slang-nodes/ModifierDefinition.ts index a3ab9cf09..ef731fdc0 100644 --- a/src/slang-nodes/ModifierDefinition.ts +++ b/src/slang-nodes/ModifierDefinition.ts @@ -28,7 +28,7 @@ export class ModifierDefinition implements SlangNode { body: FunctionBody; constructor(ast: ast.ModifierDefinition, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.name = new Identifier(ast.name); if (ast.parameters) { @@ -37,7 +37,7 @@ export class ModifierDefinition implements SlangNode { this.attributes = new ModifierAttributes(ast.attributes); this.body = new FunctionBody(ast.body, options); - [this.loc, this.comments] = updateMetadata(metadata, [ + updateMetadata(this.loc, this.comments, [ this.parameters, this.attributes, this.body diff --git a/src/slang-nodes/ModifierInvocation.ts b/src/slang-nodes/ModifierInvocation.ts index 9f70ef4ab..777644e3e 100644 --- a/src/slang-nodes/ModifierInvocation.ts +++ b/src/slang-nodes/ModifierInvocation.ts @@ -20,17 +20,14 @@ export class ModifierInvocation implements SlangNode { arguments?: ArgumentsDeclaration; constructor(ast: ast.ModifierInvocation, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.name = new IdentifierPath(ast.name); if (ast.arguments) { this.arguments = new ArgumentsDeclaration(ast.arguments, options); } - [this.loc, this.comments] = updateMetadata(metadata, [ - this.name, - this.arguments - ]); + updateMetadata(this.loc, this.comments, [this.name, this.arguments]); } cleanModifierInvocationArguments(): void { diff --git a/src/slang-nodes/MultiplicativeExpression.ts b/src/slang-nodes/MultiplicativeExpression.ts index b084f32da..7d3198aed 100644 --- a/src/slang-nodes/MultiplicativeExpression.ts +++ b/src/slang-nodes/MultiplicativeExpression.ts @@ -45,13 +45,13 @@ export class MultiplicativeExpression implements SlangNode { ast: ast.MultiplicativeExpression, options: ParserOptions ) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.leftOperand = new Expression(ast.leftOperand, options); this.operator = ast.operator.unparse(); this.rightOperand = new Expression(ast.rightOperand, options); - [this.loc, this.comments] = updateMetadata(metadata, [ + updateMetadata(this.loc, this.comments, [ this.leftOperand, this.rightOperand ]); diff --git a/src/slang-nodes/NamedArgument.ts b/src/slang-nodes/NamedArgument.ts index 82bb1d62a..4d9bfdcc6 100644 --- a/src/slang-nodes/NamedArgument.ts +++ b/src/slang-nodes/NamedArgument.ts @@ -20,12 +20,12 @@ export class NamedArgument implements SlangNode { value: Expression; constructor(ast: ast.NamedArgument, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.name = new Identifier(ast.name); this.value = new Expression(ast.value, options); - [this.loc, this.comments] = updateMetadata(metadata, [this.value]); + updateMetadata(this.loc, this.comments, [this.value]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/NamedArgumentGroup.ts b/src/slang-nodes/NamedArgumentGroup.ts index a512682bf..ee275c70f 100644 --- a/src/slang-nodes/NamedArgumentGroup.ts +++ b/src/slang-nodes/NamedArgumentGroup.ts @@ -17,11 +17,11 @@ export class NamedArgumentGroup implements SlangNode { arguments: NamedArguments; constructor(ast: ast.NamedArgumentGroup, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.arguments = new NamedArguments(ast.arguments, options); - [this.loc, this.comments] = updateMetadata(metadata, [this.arguments]); + updateMetadata(this.loc, this.comments, [this.arguments]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/NamedArguments.ts b/src/slang-nodes/NamedArguments.ts index 77892ca48..dff64a1d7 100644 --- a/src/slang-nodes/NamedArguments.ts +++ b/src/slang-nodes/NamedArguments.ts @@ -21,11 +21,11 @@ export class NamedArguments implements SlangNode { items: NamedArgument[]; constructor(ast: ast.NamedArguments, options: ParserOptions) { - const metadata = getNodeMetadata(ast, true); + [this.loc, this.comments] = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new NamedArgument(item, options)); - [this.loc, this.comments] = updateMetadata(metadata, [this.items]); + updateMetadata(this.loc, this.comments, [this.items]); } print( diff --git a/src/slang-nodes/NamedArgumentsDeclaration.ts b/src/slang-nodes/NamedArgumentsDeclaration.ts index 447591c3b..f21011758 100644 --- a/src/slang-nodes/NamedArgumentsDeclaration.ts +++ b/src/slang-nodes/NamedArgumentsDeclaration.ts @@ -20,13 +20,13 @@ export class NamedArgumentsDeclaration implements SlangNode { ast: ast.NamedArgumentsDeclaration, options: ParserOptions ) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); if (ast.arguments) { this.arguments = new NamedArgumentGroup(ast.arguments, options); } - [this.loc, this.comments] = updateMetadata(metadata, [this.arguments]); + updateMetadata(this.loc, this.comments, [this.arguments]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/NamedImport.ts b/src/slang-nodes/NamedImport.ts index f2cf56418..90edd0364 100644 --- a/src/slang-nodes/NamedImport.ts +++ b/src/slang-nodes/NamedImport.ts @@ -20,15 +20,12 @@ export class NamedImport implements SlangNode { path: StringLiteral; constructor(ast: ast.NamedImport, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.alias = new ImportAlias(ast.alias); this.path = new StringLiteral(ast.path, options); - [this.loc, this.comments] = updateMetadata(metadata, [ - this.alias, - this.path - ]); + updateMetadata(this.loc, this.comments, [this.alias, this.path]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/NewExpression.ts b/src/slang-nodes/NewExpression.ts index 167d8fa6d..b0c19f3cf 100644 --- a/src/slang-nodes/NewExpression.ts +++ b/src/slang-nodes/NewExpression.ts @@ -17,11 +17,11 @@ export class NewExpression implements SlangNode { typeName: TypeName; constructor(ast: ast.NewExpression, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.typeName = new TypeName(ast.typeName, options); - [this.loc, this.comments] = updateMetadata(metadata, [this.typeName]); + updateMetadata(this.loc, this.comments, [this.typeName]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/OrExpression.ts b/src/slang-nodes/OrExpression.ts index 85f517ea8..9aaf00c66 100644 --- a/src/slang-nodes/OrExpression.ts +++ b/src/slang-nodes/OrExpression.ts @@ -25,13 +25,13 @@ export class OrExpression implements SlangNode { rightOperand: Expression; constructor(ast: ast.OrExpression, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.leftOperand = new Expression(ast.leftOperand, options); this.operator = ast.operator.unparse(); this.rightOperand = new Expression(ast.rightOperand, options); - [this.loc, this.comments] = updateMetadata(metadata, [ + updateMetadata(this.loc, this.comments, [ this.leftOperand, this.rightOperand ]); diff --git a/src/slang-nodes/OverridePaths.ts b/src/slang-nodes/OverridePaths.ts index 5ab8908bc..82f78621b 100644 --- a/src/slang-nodes/OverridePaths.ts +++ b/src/slang-nodes/OverridePaths.ts @@ -17,11 +17,11 @@ export class OverridePaths implements SlangNode { items: IdentifierPath[]; constructor(ast: ast.OverridePaths) { - const metadata = getNodeMetadata(ast, true); + [this.loc, this.comments] = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new IdentifierPath(item)); - [this.loc, this.comments] = updateMetadata(metadata, [this.items]); + updateMetadata(this.loc, this.comments, [this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/OverridePathsDeclaration.ts b/src/slang-nodes/OverridePathsDeclaration.ts index f4540f92f..6678a84f0 100644 --- a/src/slang-nodes/OverridePathsDeclaration.ts +++ b/src/slang-nodes/OverridePathsDeclaration.ts @@ -16,11 +16,11 @@ export class OverridePathsDeclaration implements SlangNode { paths: OverridePaths; constructor(ast: ast.OverridePathsDeclaration) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.paths = new OverridePaths(ast.paths); - [this.loc, this.comments] = updateMetadata(metadata, [this.paths]); + updateMetadata(this.loc, this.comments, [this.paths]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/OverrideSpecifier.ts b/src/slang-nodes/OverrideSpecifier.ts index b2ffd299b..31730297f 100644 --- a/src/slang-nodes/OverrideSpecifier.ts +++ b/src/slang-nodes/OverrideSpecifier.ts @@ -16,13 +16,13 @@ export class OverrideSpecifier implements SlangNode { overridden?: OverridePathsDeclaration; constructor(ast: ast.OverrideSpecifier) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); if (ast.overridden) { this.overridden = new OverridePathsDeclaration(ast.overridden); } - [this.loc, this.comments] = updateMetadata(metadata, [this.overridden]); + updateMetadata(this.loc, this.comments, [this.overridden]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/Parameter.ts b/src/slang-nodes/Parameter.ts index 6733d5cae..1da4524a8 100644 --- a/src/slang-nodes/Parameter.ts +++ b/src/slang-nodes/Parameter.ts @@ -27,7 +27,7 @@ export class Parameter implements SlangNode { name?: Identifier; constructor(ast: ast.Parameter, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.typeName = new TypeName(ast.typeName, options); if (ast.storageLocation) { @@ -37,7 +37,7 @@ export class Parameter implements SlangNode { this.name = new Identifier(ast.name); } - [this.loc, this.comments] = updateMetadata(metadata, [ + updateMetadata(this.loc, this.comments, [ this.typeName, this.storageLocation ]); diff --git a/src/slang-nodes/Parameters.ts b/src/slang-nodes/Parameters.ts index ec38b5454..fde933463 100644 --- a/src/slang-nodes/Parameters.ts +++ b/src/slang-nodes/Parameters.ts @@ -20,11 +20,11 @@ export class Parameters implements SlangNode { items: Parameter[]; constructor(ast: ast.Parameters, options: ParserOptions) { - const metadata = getNodeMetadata(ast, true); + [this.loc, this.comments] = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new Parameter(item, options)); - [this.loc, this.comments] = updateMetadata(metadata, [this.items]); + updateMetadata(this.loc, this.comments, [this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ParametersDeclaration.ts b/src/slang-nodes/ParametersDeclaration.ts index 1dc602483..dd6ec383d 100644 --- a/src/slang-nodes/ParametersDeclaration.ts +++ b/src/slang-nodes/ParametersDeclaration.ts @@ -17,11 +17,11 @@ export class ParametersDeclaration implements SlangNode { parameters: Parameters; constructor(ast: ast.ParametersDeclaration, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.parameters = new Parameters(ast.parameters, options); - [this.loc, this.comments] = updateMetadata(metadata, [this.parameters]); + updateMetadata(this.loc, this.comments, [this.parameters]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/PathImport.ts b/src/slang-nodes/PathImport.ts index cc217c347..423f9a50e 100644 --- a/src/slang-nodes/PathImport.ts +++ b/src/slang-nodes/PathImport.ts @@ -20,17 +20,14 @@ export class PathImport implements SlangNode { alias?: ImportAlias; constructor(ast: ast.PathImport, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.path = new StringLiteral(ast.path, options); if (ast.alias) { this.alias = new ImportAlias(ast.alias); } - [this.loc, this.comments] = updateMetadata(metadata, [ - this.path, - this.alias - ]); + updateMetadata(this.loc, this.comments, [this.path, this.alias]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/PositionalArguments.ts b/src/slang-nodes/PositionalArguments.ts index 8953cc944..b63e9ebcd 100644 --- a/src/slang-nodes/PositionalArguments.ts +++ b/src/slang-nodes/PositionalArguments.ts @@ -20,11 +20,11 @@ export class PositionalArguments implements SlangNode { items: Expression[]; constructor(ast: ast.PositionalArguments, options: ParserOptions) { - const metadata = getNodeMetadata(ast, true); + [this.loc, this.comments] = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new Expression(item, options)); - [this.loc, this.comments] = updateMetadata(metadata, [this.items]); + updateMetadata(this.loc, this.comments, [this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/PositionalArgumentsDeclaration.ts b/src/slang-nodes/PositionalArgumentsDeclaration.ts index d425b8a70..475439026 100644 --- a/src/slang-nodes/PositionalArgumentsDeclaration.ts +++ b/src/slang-nodes/PositionalArgumentsDeclaration.ts @@ -23,11 +23,11 @@ export class PositionalArgumentsDeclaration implements SlangNode { ast: ast.PositionalArgumentsDeclaration, options: ParserOptions ) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.arguments = new PositionalArguments(ast.arguments, options); - [this.loc, this.comments] = updateMetadata(metadata, [this.arguments]); + updateMetadata(this.loc, this.comments, [this.arguments]); // We need to check the comments at this point because they will be removed // from this node into the root node. diff --git a/src/slang-nodes/PostfixExpression.ts b/src/slang-nodes/PostfixExpression.ts index a1b44f150..9b99a7a8f 100644 --- a/src/slang-nodes/PostfixExpression.ts +++ b/src/slang-nodes/PostfixExpression.ts @@ -19,12 +19,12 @@ export class PostfixExpression implements SlangNode { operator: string; constructor(ast: ast.PostfixExpression, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.operand = new Expression(ast.operand, options); this.operator = ast.operator.unparse(); - [this.loc, this.comments] = updateMetadata(metadata, [this.operand]); + updateMetadata(this.loc, this.comments, [this.operand]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/Pragma.ts b/src/slang-nodes/Pragma.ts index 3f46928d1..f93101f1f 100644 --- a/src/slang-nodes/Pragma.ts +++ b/src/slang-nodes/Pragma.ts @@ -19,7 +19,7 @@ export class Pragma implements SlangNode { variant: AbicoderPragma | ExperimentalPragma | VersionPragma; constructor(ast: ast.Pragma, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); switch (ast.variant.cst.kind) { case NonterminalKind.AbicoderPragma: @@ -38,7 +38,7 @@ export class Pragma implements SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - [this.loc, this.comments] = updateMetadata(metadata, [this.variant]); + updateMetadata(this.loc, this.comments, [this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/PragmaDirective.ts b/src/slang-nodes/PragmaDirective.ts index b4addaf51..59e33c270 100644 --- a/src/slang-nodes/PragmaDirective.ts +++ b/src/slang-nodes/PragmaDirective.ts @@ -17,11 +17,11 @@ export class PragmaDirective implements SlangNode { pragma: Pragma; constructor(ast: ast.PragmaDirective, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.pragma = new Pragma(ast.pragma, options); - [this.loc, this.comments] = updateMetadata(metadata, [this.pragma]); + updateMetadata(this.loc, this.comments, [this.pragma]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/PrefixExpression.ts b/src/slang-nodes/PrefixExpression.ts index bacc54385..830f49a0c 100644 --- a/src/slang-nodes/PrefixExpression.ts +++ b/src/slang-nodes/PrefixExpression.ts @@ -19,12 +19,12 @@ export class PrefixExpression implements SlangNode { operand: Expression; constructor(ast: ast.PrefixExpression, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.operator = ast.operator.unparse(); this.operand = new Expression(ast.operand, options); - [this.loc, this.comments] = updateMetadata(metadata, [this.operand]); + updateMetadata(this.loc, this.comments, [this.operand]); if (this.operator === 'delete') { this.operator = `${this.operator} `; diff --git a/src/slang-nodes/ReceiveFunctionAttribute.ts b/src/slang-nodes/ReceiveFunctionAttribute.ts index efe9cd3f9..b52165f5c 100644 --- a/src/slang-nodes/ReceiveFunctionAttribute.ts +++ b/src/slang-nodes/ReceiveFunctionAttribute.ts @@ -21,7 +21,7 @@ export class ReceiveFunctionAttribute implements SlangNode { ast: ast.ReceiveFunctionAttribute, options: ParserOptions ) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); if (ast.variant instanceof TerminalNode) { this.variant = ast.variant.unparse(); @@ -43,8 +43,9 @@ export class ReceiveFunctionAttribute implements SlangNode { } } - [this.loc, this.comments] = updateMetadata( - metadata, + updateMetadata( + this.loc, + this.comments, typeof this.variant === 'string' ? [] : [this.variant] ); } diff --git a/src/slang-nodes/ReceiveFunctionAttributes.ts b/src/slang-nodes/ReceiveFunctionAttributes.ts index 8ecae0036..4b919ddbf 100644 --- a/src/slang-nodes/ReceiveFunctionAttributes.ts +++ b/src/slang-nodes/ReceiveFunctionAttributes.ts @@ -24,13 +24,13 @@ export class ReceiveFunctionAttributes implements SlangNode { ast: ast.ReceiveFunctionAttributes, options: ParserOptions ) { - const metadata = getNodeMetadata(ast, true); + [this.loc, this.comments] = getNodeMetadata(ast, true); this.items = ast.items.map( (item) => new ReceiveFunctionAttribute(item, options) ); - [this.loc, this.comments] = updateMetadata(metadata, [this.items]); + updateMetadata(this.loc, this.comments, [this.items]); this.items = this.items.sort(sortFunctionAttributes); } diff --git a/src/slang-nodes/ReceiveFunctionDefinition.ts b/src/slang-nodes/ReceiveFunctionDefinition.ts index 4ccb83ca4..93ffb0307 100644 --- a/src/slang-nodes/ReceiveFunctionDefinition.ts +++ b/src/slang-nodes/ReceiveFunctionDefinition.ts @@ -27,13 +27,13 @@ export class ReceiveFunctionDefinition implements SlangNode { ast: ast.ReceiveFunctionDefinition, options: ParserOptions ) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.parameters = new ParametersDeclaration(ast.parameters, options); this.attributes = new ReceiveFunctionAttributes(ast.attributes, options); this.body = new FunctionBody(ast.body, options); - [this.loc, this.comments] = updateMetadata(metadata, [ + updateMetadata(this.loc, this.comments, [ this.parameters, this.attributes, this.body diff --git a/src/slang-nodes/ReturnStatement.ts b/src/slang-nodes/ReturnStatement.ts index 379686f0e..2cdecef8b 100644 --- a/src/slang-nodes/ReturnStatement.ts +++ b/src/slang-nodes/ReturnStatement.ts @@ -37,13 +37,13 @@ export class ReturnStatement implements SlangNode { expression?: Expression; constructor(ast: ast.ReturnStatement, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); if (ast.expression) { this.expression = new Expression(ast.expression, options); } - [this.loc, this.comments] = updateMetadata(metadata, [this.expression]); + updateMetadata(this.loc, this.comments, [this.expression]); } print( diff --git a/src/slang-nodes/ReturnsDeclaration.ts b/src/slang-nodes/ReturnsDeclaration.ts index 910a6f0b9..8d31d68ed 100644 --- a/src/slang-nodes/ReturnsDeclaration.ts +++ b/src/slang-nodes/ReturnsDeclaration.ts @@ -20,11 +20,11 @@ export class ReturnsDeclaration implements SlangNode { variables: ParametersDeclaration; constructor(ast: ast.ReturnsDeclaration, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.variables = new ParametersDeclaration(ast.variables, options); - [this.loc, this.comments] = updateMetadata(metadata, [this.variables]); + updateMetadata(this.loc, this.comments, [this.variables]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/RevertStatement.ts b/src/slang-nodes/RevertStatement.ts index 2e6989cfd..7244b93ce 100644 --- a/src/slang-nodes/RevertStatement.ts +++ b/src/slang-nodes/RevertStatement.ts @@ -21,17 +21,14 @@ export class RevertStatement implements SlangNode { arguments: ArgumentsDeclaration; constructor(ast: ast.RevertStatement, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); if (ast.error) { this.error = new IdentifierPath(ast.error); } this.arguments = new ArgumentsDeclaration(ast.arguments, options); - [this.loc, this.comments] = updateMetadata(metadata, [ - this.error, - this.arguments - ]); + updateMetadata(this.loc, this.comments, [this.error, this.arguments]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ShiftExpression.ts b/src/slang-nodes/ShiftExpression.ts index b2e70dade..17ec170bc 100644 --- a/src/slang-nodes/ShiftExpression.ts +++ b/src/slang-nodes/ShiftExpression.ts @@ -47,13 +47,13 @@ export class ShiftExpression implements SlangNode { rightOperand: Expression; constructor(ast: ast.ShiftExpression, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.leftOperand = new Expression(ast.leftOperand, options); this.operator = ast.operator.unparse(); this.rightOperand = new Expression(ast.rightOperand, options); - [this.loc, this.comments] = updateMetadata(metadata, [ + updateMetadata(this.loc, this.comments, [ this.leftOperand, this.rightOperand ]); diff --git a/src/slang-nodes/SourceUnit.ts b/src/slang-nodes/SourceUnit.ts index 1e127511a..6d00d7394 100644 --- a/src/slang-nodes/SourceUnit.ts +++ b/src/slang-nodes/SourceUnit.ts @@ -20,13 +20,12 @@ export class SourceUnit implements SlangNode { members: SourceUnitMembers; constructor(ast: ast.SourceUnit, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.members = new SourceUnitMembers(ast.members, options); - [this.loc, this.comments] = updateMetadata(metadata, [this.members]); + updateMetadata(this.loc, this.comments, [this.members]); - [this.loc, this.comments] = metadata; // Because of comments being extracted like a russian doll, the order needs // to be fixed at the end. this.comments = this.comments.sort((a, b) => a.loc.start - b.loc.start); diff --git a/src/slang-nodes/SourceUnitMember.ts b/src/slang-nodes/SourceUnitMember.ts index ddcc9e6e5..83fbeee19 100644 --- a/src/slang-nodes/SourceUnitMember.ts +++ b/src/slang-nodes/SourceUnitMember.ts @@ -42,7 +42,7 @@ export class SourceUnitMember implements SlangNode { | EventDefinition; constructor(ast: ast.SourceUnitMember, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); switch (ast.variant.cst.kind) { case NonterminalKind.PragmaDirective: @@ -123,7 +123,7 @@ export class SourceUnitMember implements SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - [this.loc, this.comments] = updateMetadata(metadata, [this.variant]); + updateMetadata(this.loc, this.comments, [this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/SourceUnitMembers.ts b/src/slang-nodes/SourceUnitMembers.ts index 06c11428f..14e4d7db2 100644 --- a/src/slang-nodes/SourceUnitMembers.ts +++ b/src/slang-nodes/SourceUnitMembers.ts @@ -18,11 +18,11 @@ export class SourceUnitMembers implements SlangNode { items: SourceUnitMember[]; constructor(ast: ast.SourceUnitMembers, options: ParserOptions) { - const metadata = getNodeMetadata(ast, true); + [this.loc, this.comments] = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new SourceUnitMember(item, options)); - [this.loc, this.comments] = updateMetadata(metadata, [this.items]); + updateMetadata(this.loc, this.comments, [this.items]); } print( diff --git a/src/slang-nodes/StateVariableAttribute.ts b/src/slang-nodes/StateVariableAttribute.ts index 001e5ecae..3d2a74dce 100644 --- a/src/slang-nodes/StateVariableAttribute.ts +++ b/src/slang-nodes/StateVariableAttribute.ts @@ -16,15 +16,16 @@ export class StateVariableAttribute implements SlangNode { variant: OverrideSpecifier | string; constructor(ast: ast.StateVariableAttribute) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.variant = ast.variant instanceof TerminalNode ? ast.variant.unparse() : new OverrideSpecifier(ast.variant); - [this.loc, this.comments] = updateMetadata( - metadata, + updateMetadata( + this.loc, + this.comments, typeof this.variant === 'string' ? [] : [this.variant] ); } diff --git a/src/slang-nodes/StateVariableAttributes.ts b/src/slang-nodes/StateVariableAttributes.ts index b85cf8438..c7742fd37 100644 --- a/src/slang-nodes/StateVariableAttributes.ts +++ b/src/slang-nodes/StateVariableAttributes.ts @@ -20,11 +20,11 @@ export class StateVariableAttributes implements SlangNode { items: StateVariableAttribute[]; constructor(ast: ast.StateVariableAttributes) { - const metadata = getNodeMetadata(ast, true); + [this.loc, this.comments] = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new StateVariableAttribute(item)); - [this.loc, this.comments] = updateMetadata(metadata, [this.items]); + updateMetadata(this.loc, this.comments, [this.items]); this.items = this.items.sort(sortFunctionAttributes); } diff --git a/src/slang-nodes/StateVariableDefinition.ts b/src/slang-nodes/StateVariableDefinition.ts index 954c94c66..d9d13c119 100644 --- a/src/slang-nodes/StateVariableDefinition.ts +++ b/src/slang-nodes/StateVariableDefinition.ts @@ -32,7 +32,7 @@ export class StateVariableDefinition implements SlangNode { ast: ast.StateVariableDefinition, options: ParserOptions ) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.typeName = new TypeName(ast.typeName, options); this.attributes = new StateVariableAttributes(ast.attributes); @@ -41,7 +41,7 @@ export class StateVariableDefinition implements SlangNode { this.value = new StateVariableDefinitionValue(ast.value, options); } - [this.loc, this.comments] = updateMetadata(metadata, [ + updateMetadata(this.loc, this.comments, [ this.typeName, this.attributes, this.value diff --git a/src/slang-nodes/StateVariableDefinitionValue.ts b/src/slang-nodes/StateVariableDefinitionValue.ts index 2cce02f42..af910350c 100644 --- a/src/slang-nodes/StateVariableDefinitionValue.ts +++ b/src/slang-nodes/StateVariableDefinitionValue.ts @@ -23,11 +23,11 @@ export class StateVariableDefinitionValue implements SlangNode { ast: ast.StateVariableDefinitionValue, options: ParserOptions ) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.value = new Expression(ast.value, options); - [this.loc, this.comments] = updateMetadata(metadata, [this.value]); + updateMetadata(this.loc, this.comments, [this.value]); } print( diff --git a/src/slang-nodes/Statement.ts b/src/slang-nodes/Statement.ts index 5d725514d..7ae582e9a 100644 --- a/src/slang-nodes/Statement.ts +++ b/src/slang-nodes/Statement.ts @@ -50,7 +50,7 @@ export class Statement implements SlangNode { | UncheckedBlock; constructor(ast: ast.Statement, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); switch (ast.variant.cst.kind) { case NonterminalKind.ExpressionStatement: @@ -146,7 +146,7 @@ export class Statement implements SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - [this.loc, this.comments] = updateMetadata(metadata, [this.variant]); + updateMetadata(this.loc, this.comments, [this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/Statements.ts b/src/slang-nodes/Statements.ts index 57866ef3e..e8d6c2398 100644 --- a/src/slang-nodes/Statements.ts +++ b/src/slang-nodes/Statements.ts @@ -23,11 +23,11 @@ export class Statements implements SlangNode { items: Statement[]; constructor(ast: ast.Statements, options: ParserOptions) { - const metadata = getNodeMetadata(ast, true); + [this.loc, this.comments] = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new Statement(item, options)); - [this.loc, this.comments] = updateMetadata(metadata, [this.items]); + updateMetadata(this.loc, this.comments, [this.items]); } print( diff --git a/src/slang-nodes/StorageLayoutSpecifier.ts b/src/slang-nodes/StorageLayoutSpecifier.ts index 1e17be0f7..7a61a6e5a 100644 --- a/src/slang-nodes/StorageLayoutSpecifier.ts +++ b/src/slang-nodes/StorageLayoutSpecifier.ts @@ -24,11 +24,11 @@ export class StorageLayoutSpecifier implements SlangNode { ast: ast.StorageLayoutSpecifier, options: ParserOptions ) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.expression = new Expression(ast.expression, options); - [this.loc, this.comments] = updateMetadata(metadata, [this.expression]); + updateMetadata(this.loc, this.comments, [this.expression]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/StringExpression.ts b/src/slang-nodes/StringExpression.ts index 8f498453a..cab92f6ae 100644 --- a/src/slang-nodes/StringExpression.ts +++ b/src/slang-nodes/StringExpression.ts @@ -26,7 +26,7 @@ export class StringExpression implements SlangNode { | UnicodeStringLiterals; constructor(ast: ast.StringExpression, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); switch (ast.variant.cst.kind) { case NonterminalKind.StringLiteral: @@ -63,7 +63,7 @@ export class StringExpression implements SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - [this.loc, this.comments] = updateMetadata(metadata, [this.variant]); + updateMetadata(this.loc, this.comments, [this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/StringLiterals.ts b/src/slang-nodes/StringLiterals.ts index ca0c69a91..fb279ac64 100644 --- a/src/slang-nodes/StringLiterals.ts +++ b/src/slang-nodes/StringLiterals.ts @@ -20,11 +20,11 @@ export class StringLiterals implements SlangNode { items: StringLiteral[]; constructor(ast: ast.StringLiterals, options: ParserOptions) { - const metadata = getNodeMetadata(ast, true); + [this.loc, this.comments] = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new StringLiteral(item, options)); - [this.loc, this.comments] = updateMetadata(metadata, [this.items]); + updateMetadata(this.loc, this.comments, [this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/StructDefinition.ts b/src/slang-nodes/StructDefinition.ts index 150fa218a..ba1e9e37a 100644 --- a/src/slang-nodes/StructDefinition.ts +++ b/src/slang-nodes/StructDefinition.ts @@ -20,12 +20,12 @@ export class StructDefinition implements SlangNode { members: StructMembers; constructor(ast: ast.StructDefinition, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.name = new Identifier(ast.name); this.members = new StructMembers(ast.members, options); - [this.loc, this.comments] = updateMetadata(metadata, [this.members]); + updateMetadata(this.loc, this.comments, [this.members]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/StructMember.ts b/src/slang-nodes/StructMember.ts index d3cf2f0b3..9055b390a 100644 --- a/src/slang-nodes/StructMember.ts +++ b/src/slang-nodes/StructMember.ts @@ -20,12 +20,12 @@ export class StructMember implements SlangNode { name: Identifier; constructor(ast: ast.StructMember, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.typeName = new TypeName(ast.typeName, options); this.name = new Identifier(ast.name); - [this.loc, this.comments] = updateMetadata(metadata, [this.typeName]); + updateMetadata(this.loc, this.comments, [this.typeName]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/StructMembers.ts b/src/slang-nodes/StructMembers.ts index 38e0d0fd1..eb373ffe1 100644 --- a/src/slang-nodes/StructMembers.ts +++ b/src/slang-nodes/StructMembers.ts @@ -21,11 +21,11 @@ export class StructMembers implements SlangNode { items: StructMember[]; constructor(ast: ast.StructMembers, options: ParserOptions) { - const metadata = getNodeMetadata(ast, true); + [this.loc, this.comments] = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new StructMember(item, options)); - [this.loc, this.comments] = updateMetadata(metadata, [this.items]); + updateMetadata(this.loc, this.comments, [this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/TryStatement.ts b/src/slang-nodes/TryStatement.ts index 27ef1c9f2..6ca5fd9ed 100644 --- a/src/slang-nodes/TryStatement.ts +++ b/src/slang-nodes/TryStatement.ts @@ -31,7 +31,7 @@ export class TryStatement implements SlangNode { catchClauses: CatchClauses; constructor(ast: ast.TryStatement, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.expression = new Expression(ast.expression, options); if (ast.returns) { @@ -40,7 +40,7 @@ export class TryStatement implements SlangNode { this.body = new Block(ast.body, options); this.catchClauses = new CatchClauses(ast.catchClauses, options); - [this.loc, this.comments] = updateMetadata(metadata, [ + updateMetadata(this.loc, this.comments, [ this.expression, this.returns, this.body, diff --git a/src/slang-nodes/TupleDeconstructionElement.ts b/src/slang-nodes/TupleDeconstructionElement.ts index 5a7831608..7b440e08f 100644 --- a/src/slang-nodes/TupleDeconstructionElement.ts +++ b/src/slang-nodes/TupleDeconstructionElement.ts @@ -20,13 +20,13 @@ export class TupleDeconstructionElement implements SlangNode { ast: ast.TupleDeconstructionElement, options: ParserOptions ) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); if (ast.member) { this.member = new TupleMember(ast.member, options); } - [this.loc, this.comments] = updateMetadata(metadata, [this.member]); + updateMetadata(this.loc, this.comments, [this.member]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/TupleDeconstructionElements.ts b/src/slang-nodes/TupleDeconstructionElements.ts index ba79c450f..17676c4c4 100644 --- a/src/slang-nodes/TupleDeconstructionElements.ts +++ b/src/slang-nodes/TupleDeconstructionElements.ts @@ -21,13 +21,13 @@ export class TupleDeconstructionElements implements SlangNode { ast: ast.TupleDeconstructionElements, options: ParserOptions ) { - const metadata = getNodeMetadata(ast, true); + [this.loc, this.comments] = getNodeMetadata(ast, true); this.items = ast.items.map( (item) => new TupleDeconstructionElement(item, options) ); - [this.loc, this.comments] = updateMetadata(metadata, [this.items]); + updateMetadata(this.loc, this.comments, [this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/TupleDeconstructionStatement.ts b/src/slang-nodes/TupleDeconstructionStatement.ts index 05936d50c..bb6caef71 100644 --- a/src/slang-nodes/TupleDeconstructionStatement.ts +++ b/src/slang-nodes/TupleDeconstructionStatement.ts @@ -28,16 +28,13 @@ export class TupleDeconstructionStatement implements SlangNode { ast: ast.TupleDeconstructionStatement, options: ParserOptions ) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.varKeyword = ast.varKeyword?.unparse(); this.elements = new TupleDeconstructionElements(ast.elements, options); this.expression = new Expression(ast.expression, options); - [this.loc, this.comments] = updateMetadata(metadata, [ - this.elements, - this.expression - ]); + updateMetadata(this.loc, this.comments, [this.elements, this.expression]); } print( diff --git a/src/slang-nodes/TupleExpression.ts b/src/slang-nodes/TupleExpression.ts index c56fc181e..552761d73 100644 --- a/src/slang-nodes/TupleExpression.ts +++ b/src/slang-nodes/TupleExpression.ts @@ -17,11 +17,11 @@ export class TupleExpression implements SlangNode { items: TupleValues; constructor(ast: ast.TupleExpression, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.items = new TupleValues(ast.items, options); - [this.loc, this.comments] = updateMetadata(metadata, [this.items]); + updateMetadata(this.loc, this.comments, [this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/TupleMember.ts b/src/slang-nodes/TupleMember.ts index 70aa481cb..607a8c5b3 100644 --- a/src/slang-nodes/TupleMember.ts +++ b/src/slang-nodes/TupleMember.ts @@ -18,7 +18,7 @@ export class TupleMember implements SlangNode { variant: TypedTupleMember | UntypedTupleMember; constructor(ast: ast.TupleMember, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); switch (ast.variant.cst.kind) { case NonterminalKind.TypedTupleMember: @@ -36,7 +36,7 @@ export class TupleMember implements SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - [this.loc, this.comments] = updateMetadata(metadata, [this.variant]); + updateMetadata(this.loc, this.comments, [this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/TupleValue.ts b/src/slang-nodes/TupleValue.ts index 5a9daf638..a6c40fd6c 100644 --- a/src/slang-nodes/TupleValue.ts +++ b/src/slang-nodes/TupleValue.ts @@ -17,13 +17,13 @@ export class TupleValue implements SlangNode { expression?: Expression; constructor(ast: ast.TupleValue, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); if (ast.expression) { this.expression = new Expression(ast.expression, options); } - [this.loc, this.comments] = updateMetadata(metadata, [this.expression]); + updateMetadata(this.loc, this.comments, [this.expression]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/TupleValues.ts b/src/slang-nodes/TupleValues.ts index e9dcbc884..280126d25 100644 --- a/src/slang-nodes/TupleValues.ts +++ b/src/slang-nodes/TupleValues.ts @@ -20,11 +20,11 @@ export class TupleValues implements SlangNode { items: TupleValue[]; constructor(ast: ast.TupleValues, options: ParserOptions) { - const metadata = getNodeMetadata(ast, true); + [this.loc, this.comments] = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new TupleValue(item, options)); - [this.loc, this.comments] = updateMetadata(metadata, [this.items]); + updateMetadata(this.loc, this.comments, [this.items]); } getSingleExpression(): Expression | undefined { diff --git a/src/slang-nodes/TypeExpression.ts b/src/slang-nodes/TypeExpression.ts index 452e6dad0..0c5cadefe 100644 --- a/src/slang-nodes/TypeExpression.ts +++ b/src/slang-nodes/TypeExpression.ts @@ -17,11 +17,11 @@ export class TypeExpression implements SlangNode { typeName: TypeName; constructor(ast: ast.TypeExpression, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.typeName = new TypeName(ast.typeName, options); - [this.loc, this.comments] = updateMetadata(metadata, [this.typeName]); + updateMetadata(this.loc, this.comments, [this.typeName]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/TypeName.ts b/src/slang-nodes/TypeName.ts index 2fd3e3c5d..df2f663fe 100644 --- a/src/slang-nodes/TypeName.ts +++ b/src/slang-nodes/TypeName.ts @@ -26,7 +26,7 @@ export class TypeName implements SlangNode { | IdentifierPath; constructor(ast: ast.TypeName, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); switch (ast.variant.cst.kind) { case NonterminalKind.ArrayTypeName: @@ -54,7 +54,7 @@ export class TypeName implements SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - [this.loc, this.comments] = updateMetadata(metadata, [this.variant]); + updateMetadata(this.loc, this.comments, [this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/TypedTupleMember.ts b/src/slang-nodes/TypedTupleMember.ts index 4a5653b35..d455bd145 100644 --- a/src/slang-nodes/TypedTupleMember.ts +++ b/src/slang-nodes/TypedTupleMember.ts @@ -24,7 +24,7 @@ export class TypedTupleMember implements SlangNode { name: Identifier; constructor(ast: ast.TypedTupleMember, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.typeName = new TypeName(ast.typeName, options); if (ast.storageLocation) { @@ -32,7 +32,7 @@ export class TypedTupleMember implements SlangNode { } this.name = new Identifier(ast.name); - [this.loc, this.comments] = updateMetadata(metadata, [ + updateMetadata(this.loc, this.comments, [ this.typeName, this.storageLocation ]); diff --git a/src/slang-nodes/UncheckedBlock.ts b/src/slang-nodes/UncheckedBlock.ts index b1086fde9..8ad57228c 100644 --- a/src/slang-nodes/UncheckedBlock.ts +++ b/src/slang-nodes/UncheckedBlock.ts @@ -17,11 +17,11 @@ export class UncheckedBlock implements SlangNode { block: Block; constructor(ast: ast.UncheckedBlock, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.block = new Block(ast.block, options); - [this.loc, this.comments] = updateMetadata(metadata, [this.block]); + updateMetadata(this.loc, this.comments, [this.block]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/UnicodeStringLiterals.ts b/src/slang-nodes/UnicodeStringLiterals.ts index 24eb07e31..5934a69a6 100644 --- a/src/slang-nodes/UnicodeStringLiterals.ts +++ b/src/slang-nodes/UnicodeStringLiterals.ts @@ -20,13 +20,13 @@ export class UnicodeStringLiterals implements SlangNode { items: UnicodeStringLiteral[]; constructor(ast: ast.UnicodeStringLiterals, options: ParserOptions) { - const metadata = getNodeMetadata(ast, true); + [this.loc, this.comments] = getNodeMetadata(ast, true); this.items = ast.items.map( (item) => new UnicodeStringLiteral(item, options) ); - [this.loc, this.comments] = updateMetadata(metadata, [this.items]); + updateMetadata(this.loc, this.comments, [this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/UnnamedFunctionAttribute.ts b/src/slang-nodes/UnnamedFunctionAttribute.ts index fa0c7d417..bf83010d8 100644 --- a/src/slang-nodes/UnnamedFunctionAttribute.ts +++ b/src/slang-nodes/UnnamedFunctionAttribute.ts @@ -20,15 +20,16 @@ export class UnnamedFunctionAttribute implements SlangNode { ast: ast.UnnamedFunctionAttribute, options: ParserOptions ) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.variant = ast.variant instanceof TerminalNode ? ast.variant.unparse() : new ModifierInvocation(ast.variant, options); - [this.loc, this.comments] = updateMetadata( - metadata, + updateMetadata( + this.loc, + this.comments, typeof this.variant === 'string' ? [] : [this.variant] ); } diff --git a/src/slang-nodes/UnnamedFunctionAttributes.ts b/src/slang-nodes/UnnamedFunctionAttributes.ts index b136ca658..7eeaaeefe 100644 --- a/src/slang-nodes/UnnamedFunctionAttributes.ts +++ b/src/slang-nodes/UnnamedFunctionAttributes.ts @@ -24,13 +24,13 @@ export class UnnamedFunctionAttributes implements SlangNode { ast: ast.UnnamedFunctionAttributes, options: ParserOptions ) { - const metadata = getNodeMetadata(ast, true); + [this.loc, this.comments] = getNodeMetadata(ast, true); this.items = ast.items.map( (item) => new UnnamedFunctionAttribute(item, options) ); - [this.loc, this.comments] = updateMetadata(metadata, [this.items]); + updateMetadata(this.loc, this.comments, [this.items]); this.items = this.items.sort(sortFunctionAttributes); } diff --git a/src/slang-nodes/UnnamedFunctionDefinition.ts b/src/slang-nodes/UnnamedFunctionDefinition.ts index 5fc1661d1..8773ccc1f 100644 --- a/src/slang-nodes/UnnamedFunctionDefinition.ts +++ b/src/slang-nodes/UnnamedFunctionDefinition.ts @@ -27,13 +27,13 @@ export class UnnamedFunctionDefinition implements SlangNode { ast: ast.UnnamedFunctionDefinition, options: ParserOptions ) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.parameters = new ParametersDeclaration(ast.parameters, options); this.attributes = new UnnamedFunctionAttributes(ast.attributes, options); this.body = new FunctionBody(ast.body, options); - [this.loc, this.comments] = updateMetadata(metadata, [ + updateMetadata(this.loc, this.comments, [ this.parameters, this.attributes, this.body diff --git a/src/slang-nodes/UntypedTupleMember.ts b/src/slang-nodes/UntypedTupleMember.ts index 980ae3a25..0db328d33 100644 --- a/src/slang-nodes/UntypedTupleMember.ts +++ b/src/slang-nodes/UntypedTupleMember.ts @@ -20,16 +20,14 @@ export class UntypedTupleMember implements SlangNode { name: Identifier; constructor(ast: ast.UntypedTupleMember) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); if (ast.storageLocation) { this.storageLocation = new StorageLocation(ast.storageLocation); } this.name = new Identifier(ast.name); - [this.loc, this.comments] = updateMetadata(metadata, [ - this.storageLocation - ]); + updateMetadata(this.loc, this.comments, [this.storageLocation]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/UserDefinedValueTypeDefinition.ts b/src/slang-nodes/UserDefinedValueTypeDefinition.ts index 5369b61f2..09da09e4d 100644 --- a/src/slang-nodes/UserDefinedValueTypeDefinition.ts +++ b/src/slang-nodes/UserDefinedValueTypeDefinition.ts @@ -19,12 +19,12 @@ export class UserDefinedValueTypeDefinition implements SlangNode { valueType: ElementaryType; constructor(ast: ast.UserDefinedValueTypeDefinition) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.name = new Identifier(ast.name); this.valueType = new ElementaryType(ast.valueType); - [this.loc, this.comments] = updateMetadata(metadata, [this.valueType]); + updateMetadata(this.loc, this.comments, [this.valueType]); } print( diff --git a/src/slang-nodes/UsingAlias.ts b/src/slang-nodes/UsingAlias.ts index 3f99b1ac1..bdc786235 100644 --- a/src/slang-nodes/UsingAlias.ts +++ b/src/slang-nodes/UsingAlias.ts @@ -16,11 +16,11 @@ export class UsingAlias implements SlangNode { operator: UsingOperator; constructor(ast: ast.UsingAlias) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.operator = new UsingOperator(ast.operator); - [this.loc, this.comments] = updateMetadata(metadata, [this.operator]); + updateMetadata(this.loc, this.comments, [this.operator]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/UsingClause.ts b/src/slang-nodes/UsingClause.ts index 832f96a63..642347101 100644 --- a/src/slang-nodes/UsingClause.ts +++ b/src/slang-nodes/UsingClause.ts @@ -17,7 +17,7 @@ export class UsingClause implements SlangNode { variant: IdentifierPath | UsingDeconstruction; constructor(ast: ast.UsingClause) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); switch (ast.variant.cst.kind) { case NonterminalKind.IdentifierPath: @@ -32,7 +32,7 @@ export class UsingClause implements SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - [this.loc, this.comments] = updateMetadata(metadata, [this.variant]); + updateMetadata(this.loc, this.comments, [this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/UsingDeconstruction.ts b/src/slang-nodes/UsingDeconstruction.ts index 081c08416..5230f8360 100644 --- a/src/slang-nodes/UsingDeconstruction.ts +++ b/src/slang-nodes/UsingDeconstruction.ts @@ -16,11 +16,11 @@ export class UsingDeconstruction implements SlangNode { symbols: UsingDeconstructionSymbols; constructor(ast: ast.UsingDeconstruction) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.symbols = new UsingDeconstructionSymbols(ast.symbols); - [this.loc, this.comments] = updateMetadata(metadata, [this.symbols]); + updateMetadata(this.loc, this.comments, [this.symbols]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/UsingDeconstructionSymbol.ts b/src/slang-nodes/UsingDeconstructionSymbol.ts index 9e647b66d..ba52d25a5 100644 --- a/src/slang-nodes/UsingDeconstructionSymbol.ts +++ b/src/slang-nodes/UsingDeconstructionSymbol.ts @@ -19,17 +19,14 @@ export class UsingDeconstructionSymbol implements SlangNode { alias?: UsingAlias; constructor(ast: ast.UsingDeconstructionSymbol) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.name = new IdentifierPath(ast.name); if (ast.alias) { this.alias = new UsingAlias(ast.alias); } - [this.loc, this.comments] = updateMetadata(metadata, [ - this.name, - this.alias - ]); + updateMetadata(this.loc, this.comments, [this.name, this.alias]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/UsingDeconstructionSymbols.ts b/src/slang-nodes/UsingDeconstructionSymbols.ts index 8b8afde5e..623d737c8 100644 --- a/src/slang-nodes/UsingDeconstructionSymbols.ts +++ b/src/slang-nodes/UsingDeconstructionSymbols.ts @@ -21,11 +21,11 @@ export class UsingDeconstructionSymbols implements SlangNode { items: UsingDeconstructionSymbol[]; constructor(ast: ast.UsingDeconstructionSymbols) { - const metadata = getNodeMetadata(ast, true); + [this.loc, this.comments] = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new UsingDeconstructionSymbol(item)); - [this.loc, this.comments] = updateMetadata(metadata, [this.items]); + updateMetadata(this.loc, this.comments, [this.items]); } print( diff --git a/src/slang-nodes/UsingDirective.ts b/src/slang-nodes/UsingDirective.ts index 9cf329c48..b8c349af5 100644 --- a/src/slang-nodes/UsingDirective.ts +++ b/src/slang-nodes/UsingDirective.ts @@ -23,16 +23,13 @@ export class UsingDirective implements SlangNode { globalKeyword?: string; constructor(ast: ast.UsingDirective, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.clause = new UsingClause(ast.clause); this.target = new UsingTarget(ast.target, options); this.globalKeyword = ast.globalKeyword?.unparse(); - [this.loc, this.comments] = updateMetadata(metadata, [ - this.clause, - this.target - ]); + updateMetadata(this.loc, this.comments, [this.clause, this.target]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/UsingTarget.ts b/src/slang-nodes/UsingTarget.ts index 65525ede0..f2500f4ca 100644 --- a/src/slang-nodes/UsingTarget.ts +++ b/src/slang-nodes/UsingTarget.ts @@ -17,15 +17,16 @@ export class UsingTarget implements SlangNode { variant: TypeName | string; constructor(ast: ast.UsingTarget, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.variant = ast.variant instanceof TerminalNode ? ast.variant.unparse() : new TypeName(ast.variant, options); - [this.loc, this.comments] = updateMetadata( - metadata, + updateMetadata( + this.loc, + this.comments, typeof this.variant === 'string' ? [] : [this.variant] ); } diff --git a/src/slang-nodes/VariableDeclarationStatement.ts b/src/slang-nodes/VariableDeclarationStatement.ts index e3a695bd5..48690a4ad 100644 --- a/src/slang-nodes/VariableDeclarationStatement.ts +++ b/src/slang-nodes/VariableDeclarationStatement.ts @@ -32,7 +32,7 @@ export class VariableDeclarationStatement implements SlangNode { ast: ast.VariableDeclarationStatement, options: ParserOptions ) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.variableType = new VariableDeclarationType(ast.variableType, options); if (ast.storageLocation) { @@ -43,7 +43,7 @@ export class VariableDeclarationStatement implements SlangNode { this.value = new VariableDeclarationValue(ast.value, options); } - [this.loc, this.comments] = updateMetadata(metadata, [ + updateMetadata(this.loc, this.comments, [ this.variableType, this.storageLocation, this.value diff --git a/src/slang-nodes/VariableDeclarationType.ts b/src/slang-nodes/VariableDeclarationType.ts index f15df9f44..ed75f4392 100644 --- a/src/slang-nodes/VariableDeclarationType.ts +++ b/src/slang-nodes/VariableDeclarationType.ts @@ -20,15 +20,16 @@ export class VariableDeclarationType implements SlangNode { ast: ast.VariableDeclarationType, options: ParserOptions ) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.variant = ast.variant instanceof TerminalNode ? ast.variant.unparse() : new TypeName(ast.variant, options); - [this.loc, this.comments] = updateMetadata( - metadata, + updateMetadata( + this.loc, + this.comments, typeof this.variant === 'string' ? [] : [this.variant] ); } diff --git a/src/slang-nodes/VariableDeclarationValue.ts b/src/slang-nodes/VariableDeclarationValue.ts index 851c2107e..c7dfc1ec1 100644 --- a/src/slang-nodes/VariableDeclarationValue.ts +++ b/src/slang-nodes/VariableDeclarationValue.ts @@ -20,11 +20,11 @@ export class VariableDeclarationValue implements SlangNode { ast: ast.VariableDeclarationValue, options: ParserOptions ) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.expression = new Expression(ast.expression, options); - [this.loc, this.comments] = updateMetadata(metadata, [this.expression]); + updateMetadata(this.loc, this.comments, [this.expression]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/VersionExpression.ts b/src/slang-nodes/VersionExpression.ts index a100bca4d..2b631d4d7 100644 --- a/src/slang-nodes/VersionExpression.ts +++ b/src/slang-nodes/VersionExpression.ts @@ -17,7 +17,7 @@ export class VersionExpression implements SlangNode { variant: VersionRange | VersionTerm; constructor(ast: ast.VersionExpression) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); switch (ast.variant.cst.kind) { case NonterminalKind.VersionRange: @@ -30,7 +30,7 @@ export class VersionExpression implements SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - [this.loc, this.comments] = updateMetadata(metadata, [this.variant]); + updateMetadata(this.loc, this.comments, [this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/VersionExpressionSet.ts b/src/slang-nodes/VersionExpressionSet.ts index dd21e9adc..351058bda 100644 --- a/src/slang-nodes/VersionExpressionSet.ts +++ b/src/slang-nodes/VersionExpressionSet.ts @@ -19,11 +19,11 @@ export class VersionExpressionSet implements SlangNode { items: VersionExpression[]; constructor(ast: ast.VersionExpressionSet) { - const metadata = getNodeMetadata(ast, true); + [this.loc, this.comments] = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new VersionExpression(item)); - [this.loc, this.comments] = updateMetadata(metadata, [this.items]); + updateMetadata(this.loc, this.comments, [this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/VersionExpressionSets.ts b/src/slang-nodes/VersionExpressionSets.ts index 6c5deebe8..be5e2802a 100644 --- a/src/slang-nodes/VersionExpressionSets.ts +++ b/src/slang-nodes/VersionExpressionSets.ts @@ -19,11 +19,11 @@ export class VersionExpressionSets implements SlangNode { items: VersionExpressionSet[]; constructor(ast: ast.VersionExpressionSets) { - const metadata = getNodeMetadata(ast, true); + [this.loc, this.comments] = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new VersionExpressionSet(item)); - [this.loc, this.comments] = updateMetadata(metadata, [this.items]); + updateMetadata(this.loc, this.comments, [this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/VersionLiteral.ts b/src/slang-nodes/VersionLiteral.ts index a8babc6f1..4e61fe059 100644 --- a/src/slang-nodes/VersionLiteral.ts +++ b/src/slang-nodes/VersionLiteral.ts @@ -16,15 +16,16 @@ export class VersionLiteral implements SlangNode { variant: SimpleVersionLiteral | string; constructor(ast: ast.VersionLiteral) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.variant = ast.variant instanceof TerminalNode ? ast.variant.unparse() : new SimpleVersionLiteral(ast.variant); - [this.loc, this.comments] = updateMetadata( - metadata, + updateMetadata( + this.loc, + this.comments, typeof this.variant === 'string' ? [] : [this.variant] ); } diff --git a/src/slang-nodes/VersionPragma.ts b/src/slang-nodes/VersionPragma.ts index bffeacfd9..36eec5936 100644 --- a/src/slang-nodes/VersionPragma.ts +++ b/src/slang-nodes/VersionPragma.ts @@ -16,11 +16,11 @@ export class VersionPragma implements SlangNode { sets: VersionExpressionSets; constructor(ast: ast.VersionPragma) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.sets = new VersionExpressionSets(ast.sets); - [this.loc, this.comments] = updateMetadata(metadata, [this.sets]); + updateMetadata(this.loc, this.comments, [this.sets]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/VersionRange.ts b/src/slang-nodes/VersionRange.ts index 76f9cc70a..cc65723bc 100644 --- a/src/slang-nodes/VersionRange.ts +++ b/src/slang-nodes/VersionRange.ts @@ -18,15 +18,12 @@ export class VersionRange implements SlangNode { end: VersionLiteral; constructor(ast: ast.VersionRange) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.start = new VersionLiteral(ast.start); this.end = new VersionLiteral(ast.end); - [this.loc, this.comments] = updateMetadata(metadata, [ - this.start, - this.end - ]); + updateMetadata(this.loc, this.comments, [this.start, this.end]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/VersionTerm.ts b/src/slang-nodes/VersionTerm.ts index c615742f4..5485f06f6 100644 --- a/src/slang-nodes/VersionTerm.ts +++ b/src/slang-nodes/VersionTerm.ts @@ -19,17 +19,14 @@ export class VersionTerm implements SlangNode { literal: VersionLiteral; constructor(ast: ast.VersionTerm) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); if (ast.operator) { this.operator = new VersionOperator(ast.operator); } this.literal = new VersionLiteral(ast.literal); - [this.loc, this.comments] = updateMetadata(metadata, [ - this.operator, - this.literal - ]); + updateMetadata(this.loc, this.comments, [this.operator, this.literal]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/WhileStatement.ts b/src/slang-nodes/WhileStatement.ts index 7cfa6193e..9efbdd996 100644 --- a/src/slang-nodes/WhileStatement.ts +++ b/src/slang-nodes/WhileStatement.ts @@ -24,15 +24,12 @@ export class WhileStatement implements SlangNode { body: Statement; constructor(ast: ast.WhileStatement, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.condition = new Expression(ast.condition, options); this.body = new Statement(ast.body, options); - [this.loc, this.comments] = updateMetadata(metadata, [ - this.condition, - this.body - ]); + updateMetadata(this.loc, this.comments, [this.condition, this.body]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulArguments.ts b/src/slang-nodes/YulArguments.ts index a63ecfe6a..e2df17aed 100644 --- a/src/slang-nodes/YulArguments.ts +++ b/src/slang-nodes/YulArguments.ts @@ -18,11 +18,11 @@ export class YulArguments implements SlangNode { items: YulExpression[]; constructor(ast: ast.YulArguments, options: ParserOptions) { - const metadata = getNodeMetadata(ast, true); + [this.loc, this.comments] = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new YulExpression(item, options)); - [this.loc, this.comments] = updateMetadata(metadata, [this.items]); + updateMetadata(this.loc, this.comments, [this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulAssignmentOperator.ts b/src/slang-nodes/YulAssignmentOperator.ts index 0aa58cd5a..99ae0ab95 100644 --- a/src/slang-nodes/YulAssignmentOperator.ts +++ b/src/slang-nodes/YulAssignmentOperator.ts @@ -16,15 +16,16 @@ export class YulAssignmentOperator implements SlangNode { variant: YulColonAndEqual | string; constructor(ast: ast.YulAssignmentOperator) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.variant = ast.variant instanceof TerminalNode ? ast.variant.unparse() : new YulColonAndEqual(ast.variant); - [this.loc, this.comments] = updateMetadata( - metadata, + updateMetadata( + this.loc, + this.comments, typeof this.variant === 'string' ? [] : [this.variant] ); } diff --git a/src/slang-nodes/YulBlock.ts b/src/slang-nodes/YulBlock.ts index f7ce7c5fa..a3becde3e 100644 --- a/src/slang-nodes/YulBlock.ts +++ b/src/slang-nodes/YulBlock.ts @@ -17,11 +17,11 @@ export class YulBlock implements SlangNode { statements: YulStatements; constructor(ast: ast.YulBlock, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.statements = new YulStatements(ast.statements, options); - [this.loc, this.comments] = updateMetadata(metadata, [this.statements]); + updateMetadata(this.loc, this.comments, [this.statements]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulDefaultCase.ts b/src/slang-nodes/YulDefaultCase.ts index 4499d70e7..0a23fe902 100644 --- a/src/slang-nodes/YulDefaultCase.ts +++ b/src/slang-nodes/YulDefaultCase.ts @@ -17,11 +17,11 @@ export class YulDefaultCase implements SlangNode { body: YulBlock; constructor(ast: ast.YulDefaultCase, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.body = new YulBlock(ast.body, options); - [this.loc, this.comments] = updateMetadata(metadata, [this.body]); + updateMetadata(this.loc, this.comments, [this.body]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulExpression.ts b/src/slang-nodes/YulExpression.ts index 9755a936a..97ce6d910 100644 --- a/src/slang-nodes/YulExpression.ts +++ b/src/slang-nodes/YulExpression.ts @@ -19,7 +19,7 @@ export class YulExpression implements SlangNode { variant: YulFunctionCallExpression | YulLiteral | YulPath; constructor(ast: ast.YulExpression, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); switch (ast.variant.cst.kind) { case NonterminalKind.YulFunctionCallExpression: @@ -38,7 +38,7 @@ export class YulExpression implements SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - [this.loc, this.comments] = updateMetadata(metadata, [this.variant]); + updateMetadata(this.loc, this.comments, [this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulForStatement.ts b/src/slang-nodes/YulForStatement.ts index aceafc044..4f2706956 100644 --- a/src/slang-nodes/YulForStatement.ts +++ b/src/slang-nodes/YulForStatement.ts @@ -27,14 +27,14 @@ export class YulForStatement implements SlangNode { body: YulBlock; constructor(ast: ast.YulForStatement, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.initialization = new YulBlock(ast.initialization, options); this.condition = new YulExpression(ast.condition, options); this.iterator = new YulBlock(ast.iterator, options); this.body = new YulBlock(ast.body, options); - [this.loc, this.comments] = updateMetadata(metadata, [ + updateMetadata(this.loc, this.comments, [ this.initialization, this.condition, this.iterator, diff --git a/src/slang-nodes/YulFunctionCallExpression.ts b/src/slang-nodes/YulFunctionCallExpression.ts index b77ffd41b..97c34b7c9 100644 --- a/src/slang-nodes/YulFunctionCallExpression.ts +++ b/src/slang-nodes/YulFunctionCallExpression.ts @@ -23,15 +23,12 @@ export class YulFunctionCallExpression implements SlangNode { ast: ast.YulFunctionCallExpression, options: ParserOptions ) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.operand = new YulExpression(ast.operand, options); this.arguments = new YulArguments(ast.arguments, options); - [this.loc, this.comments] = updateMetadata(metadata, [ - this.operand, - this.arguments - ]); + updateMetadata(this.loc, this.comments, [this.operand, this.arguments]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulFunctionDefinition.ts b/src/slang-nodes/YulFunctionDefinition.ts index 1b8a2572c..bcafded04 100644 --- a/src/slang-nodes/YulFunctionDefinition.ts +++ b/src/slang-nodes/YulFunctionDefinition.ts @@ -26,7 +26,7 @@ export class YulFunctionDefinition implements SlangNode { body: YulBlock; constructor(ast: ast.YulFunctionDefinition, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.name = new YulIdentifier(ast.name); this.parameters = new YulParametersDeclaration(ast.parameters); @@ -35,7 +35,7 @@ export class YulFunctionDefinition implements SlangNode { } this.body = new YulBlock(ast.body, options); - [this.loc, this.comments] = updateMetadata(metadata, [ + updateMetadata(this.loc, this.comments, [ this.parameters, this.returns, this.body diff --git a/src/slang-nodes/YulIfStatement.ts b/src/slang-nodes/YulIfStatement.ts index f65e040e7..0a5ac1a32 100644 --- a/src/slang-nodes/YulIfStatement.ts +++ b/src/slang-nodes/YulIfStatement.ts @@ -20,15 +20,12 @@ export class YulIfStatement implements SlangNode { body: YulBlock; constructor(ast: ast.YulIfStatement, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.condition = new YulExpression(ast.condition, options); this.body = new YulBlock(ast.body, options); - [this.loc, this.comments] = updateMetadata(metadata, [ - this.condition, - this.body - ]); + updateMetadata(this.loc, this.comments, [this.condition, this.body]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulLiteral.ts b/src/slang-nodes/YulLiteral.ts index b654d52c3..173d086ce 100644 --- a/src/slang-nodes/YulLiteral.ts +++ b/src/slang-nodes/YulLiteral.ts @@ -18,7 +18,7 @@ export class YulLiteral implements SlangNode { variant: HexStringLiteral | StringLiteral | string; constructor(ast: ast.YulLiteral, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); if (ast.variant instanceof TerminalNode) { this.variant = ast.variant.unparse(); @@ -41,8 +41,9 @@ export class YulLiteral implements SlangNode { } } - [this.loc, this.comments] = updateMetadata( - metadata, + updateMetadata( + this.loc, + this.comments, typeof this.variant === 'string' ? [] : [this.variant] ); } diff --git a/src/slang-nodes/YulParametersDeclaration.ts b/src/slang-nodes/YulParametersDeclaration.ts index 121cab81b..cd36c5489 100644 --- a/src/slang-nodes/YulParametersDeclaration.ts +++ b/src/slang-nodes/YulParametersDeclaration.ts @@ -16,11 +16,11 @@ export class YulParametersDeclaration implements SlangNode { parameters: YulParameters; constructor(ast: ast.YulParametersDeclaration) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.parameters = new YulParameters(ast.parameters); - [this.loc, this.comments] = updateMetadata(metadata, [this.parameters]); + updateMetadata(this.loc, this.comments, [this.parameters]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulPaths.ts b/src/slang-nodes/YulPaths.ts index 1995dfc4d..c91890cc3 100644 --- a/src/slang-nodes/YulPaths.ts +++ b/src/slang-nodes/YulPaths.ts @@ -19,11 +19,11 @@ export class YulPaths implements SlangNode { items: YulPath[]; constructor(ast: ast.YulPaths) { - const metadata = getNodeMetadata(ast, true); + [this.loc, this.comments] = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new YulPath(item)); - [this.loc, this.comments] = updateMetadata(metadata, [this.items]); + updateMetadata(this.loc, this.comments, [this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulReturnsDeclaration.ts b/src/slang-nodes/YulReturnsDeclaration.ts index f96750896..17d5f6639 100644 --- a/src/slang-nodes/YulReturnsDeclaration.ts +++ b/src/slang-nodes/YulReturnsDeclaration.ts @@ -20,11 +20,11 @@ export class YulReturnsDeclaration implements SlangNode { variables: YulVariableNames; constructor(ast: ast.YulReturnsDeclaration) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.variables = new YulVariableNames(ast.variables); - [this.loc, this.comments] = updateMetadata(metadata, [this.variables]); + updateMetadata(this.loc, this.comments, [this.variables]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulStackAssignmentOperator.ts b/src/slang-nodes/YulStackAssignmentOperator.ts index 2f529db52..f4525cd0d 100644 --- a/src/slang-nodes/YulStackAssignmentOperator.ts +++ b/src/slang-nodes/YulStackAssignmentOperator.ts @@ -16,15 +16,16 @@ export class YulStackAssignmentOperator implements SlangNode { variant: YulEqualAndColon | string; constructor(ast: ast.YulStackAssignmentOperator) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.variant = ast.variant instanceof TerminalNode ? ast.variant.unparse() : new YulEqualAndColon(ast.variant); - [this.loc, this.comments] = updateMetadata( - metadata, + updateMetadata( + this.loc, + this.comments, typeof this.variant === 'string' ? [] : [this.variant] ); } diff --git a/src/slang-nodes/YulStackAssignmentStatement.ts b/src/slang-nodes/YulStackAssignmentStatement.ts index 5dc6b1b04..f355fd738 100644 --- a/src/slang-nodes/YulStackAssignmentStatement.ts +++ b/src/slang-nodes/YulStackAssignmentStatement.ts @@ -23,12 +23,12 @@ export class YulStackAssignmentStatement implements SlangNode { variable: YulIdentifier; constructor(ast: ast.YulStackAssignmentStatement) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.assignment = new YulStackAssignmentOperator(ast.assignment); this.variable = new YulIdentifier(ast.variable); - [this.loc, this.comments] = updateMetadata(metadata, [this.assignment]); + updateMetadata(this.loc, this.comments, [this.assignment]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulStatement.ts b/src/slang-nodes/YulStatement.ts index e1bee0084..89985ea24 100644 --- a/src/slang-nodes/YulStatement.ts +++ b/src/slang-nodes/YulStatement.ts @@ -42,7 +42,7 @@ export class YulStatement implements SlangNode { | YulExpression; constructor(ast: ast.YulStatement, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); switch (ast.variant.cst.kind) { case NonterminalKind.YulBlock: @@ -117,7 +117,7 @@ export class YulStatement implements SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - [this.loc, this.comments] = updateMetadata(metadata, [this.variant]); + updateMetadata(this.loc, this.comments, [this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulStatements.ts b/src/slang-nodes/YulStatements.ts index 5df17fd4c..c82078d8c 100644 --- a/src/slang-nodes/YulStatements.ts +++ b/src/slang-nodes/YulStatements.ts @@ -23,11 +23,11 @@ export class YulStatements implements SlangNode { items: YulStatement[]; constructor(ast: ast.YulStatements, options: ParserOptions) { - const metadata = getNodeMetadata(ast, true); + [this.loc, this.comments] = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new YulStatement(item, options)); - [this.loc, this.comments] = updateMetadata(metadata, [this.items]); + updateMetadata(this.loc, this.comments, [this.items]); } print( diff --git a/src/slang-nodes/YulSwitchCase.ts b/src/slang-nodes/YulSwitchCase.ts index a388e01f5..237e0e3d0 100644 --- a/src/slang-nodes/YulSwitchCase.ts +++ b/src/slang-nodes/YulSwitchCase.ts @@ -18,7 +18,7 @@ export class YulSwitchCase implements SlangNode { variant: YulDefaultCase | YulValueCase; constructor(ast: ast.YulSwitchCase, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); switch (ast.variant.cst.kind) { case NonterminalKind.YulDefaultCase: @@ -37,7 +37,7 @@ export class YulSwitchCase implements SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - [this.loc, this.comments] = updateMetadata(metadata, [this.variant]); + updateMetadata(this.loc, this.comments, [this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulSwitchCases.ts b/src/slang-nodes/YulSwitchCases.ts index c1fcc2ec6..34fc25242 100644 --- a/src/slang-nodes/YulSwitchCases.ts +++ b/src/slang-nodes/YulSwitchCases.ts @@ -20,11 +20,11 @@ export class YulSwitchCases implements SlangNode { items: YulSwitchCase[]; constructor(ast: ast.YulSwitchCases, options: ParserOptions) { - const metadata = getNodeMetadata(ast, true); + [this.loc, this.comments] = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new YulSwitchCase(item, options)); - [this.loc, this.comments] = updateMetadata(metadata, [this.items]); + updateMetadata(this.loc, this.comments, [this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulSwitchStatement.ts b/src/slang-nodes/YulSwitchStatement.ts index 7032ddaec..52794cbd8 100644 --- a/src/slang-nodes/YulSwitchStatement.ts +++ b/src/slang-nodes/YulSwitchStatement.ts @@ -23,15 +23,12 @@ export class YulSwitchStatement implements SlangNode { cases: YulSwitchCases; constructor(ast: ast.YulSwitchStatement, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.expression = new YulExpression(ast.expression, options); this.cases = new YulSwitchCases(ast.cases, options); - [this.loc, this.comments] = updateMetadata(metadata, [ - this.expression, - this.cases - ]); + updateMetadata(this.loc, this.comments, [this.expression, this.cases]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulValueCase.ts b/src/slang-nodes/YulValueCase.ts index 7c248e5a1..178265e32 100644 --- a/src/slang-nodes/YulValueCase.ts +++ b/src/slang-nodes/YulValueCase.ts @@ -20,15 +20,12 @@ export class YulValueCase implements SlangNode { body: YulBlock; constructor(ast: ast.YulValueCase, options: ParserOptions) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.value = new YulLiteral(ast.value, options); this.body = new YulBlock(ast.body, options); - [this.loc, this.comments] = updateMetadata(metadata, [ - this.value, - this.body - ]); + updateMetadata(this.loc, this.comments, [this.value, this.body]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulVariableAssignmentStatement.ts b/src/slang-nodes/YulVariableAssignmentStatement.ts index 470e73c00..f86e538be 100644 --- a/src/slang-nodes/YulVariableAssignmentStatement.ts +++ b/src/slang-nodes/YulVariableAssignmentStatement.ts @@ -29,13 +29,13 @@ export class YulVariableAssignmentStatement implements SlangNode { ast: ast.YulVariableAssignmentStatement, options: ParserOptions ) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.variables = new YulPaths(ast.variables); this.assignment = new YulAssignmentOperator(ast.assignment); this.expression = new YulExpression(ast.expression, options); - [this.loc, this.comments] = updateMetadata(metadata, [ + updateMetadata(this.loc, this.comments, [ this.variables, this.assignment, this.expression diff --git a/src/slang-nodes/YulVariableDeclarationStatement.ts b/src/slang-nodes/YulVariableDeclarationStatement.ts index 447f7b553..f2cc3d680 100644 --- a/src/slang-nodes/YulVariableDeclarationStatement.ts +++ b/src/slang-nodes/YulVariableDeclarationStatement.ts @@ -24,14 +24,14 @@ export class YulVariableDeclarationStatement implements SlangNode { ast: ast.YulVariableDeclarationStatement, options: ParserOptions ) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.variables = new YulVariableNames(ast.variables); if (ast.value) { this.value = new YulVariableDeclarationValue(ast.value, options); } - [this.loc, this.comments] = updateMetadata(metadata, [this.value]); + updateMetadata(this.loc, this.comments, [this.value]); } print( diff --git a/src/slang-nodes/YulVariableDeclarationValue.ts b/src/slang-nodes/YulVariableDeclarationValue.ts index 7e69894a6..da6c758f5 100644 --- a/src/slang-nodes/YulVariableDeclarationValue.ts +++ b/src/slang-nodes/YulVariableDeclarationValue.ts @@ -23,15 +23,12 @@ export class YulVariableDeclarationValue implements SlangNode { ast: ast.YulVariableDeclarationValue, options: ParserOptions ) { - const metadata = getNodeMetadata(ast); + [this.loc, this.comments] = getNodeMetadata(ast); this.assignment = new YulAssignmentOperator(ast.assignment); this.expression = new YulExpression(ast.expression, options); - [this.loc, this.comments] = updateMetadata(metadata, [ - this.assignment, - this.expression - ]); + updateMetadata(this.loc, this.comments, [this.assignment, this.expression]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-utils/metadata.ts b/src/slang-utils/metadata.ts index 4c4a2df45..3ff051191 100644 --- a/src/slang-utils/metadata.ts +++ b/src/slang-utils/metadata.ts @@ -8,7 +8,7 @@ import { SingleLineNatSpecComment } from '../slang-nodes/SingleLineNatSpecCommen import type { Node } from '@nomicfoundation/slang/cst'; import type { Comment, StrictAstNode } from '../slang-nodes/types.d.ts'; -import type { Metadata, SlangAstNode } from '../types.d.ts'; +import type { AstLocation, SlangAstNode } from '../types.d.ts'; const isCommentOrWhiteSpace = createKindCheckFunction([ TerminalKind.MultiLineComment, @@ -40,7 +40,7 @@ function getLeadingOffset(children: Node[]): number { export function getNodeMetadata( ast: SlangAstNode | TerminalNode, enclosePeripheralComments = false -): Metadata { +): [AstLocation, Comment[]] { if (ast instanceof TerminalNode) { const offset = offsets.get(ast.id) || 0; return [ @@ -129,11 +129,12 @@ function collectComments( } export function updateMetadata( - [loc, comments]: Metadata, + loc: AstLocation, + comments: Comment[], childNodes: (StrictAstNode | StrictAstNode[] | undefined)[] -): Metadata { +): void { // Collect comments - comments = childNodes.reduce(collectComments, comments); + childNodes.reduce(collectComments, comments); // calculate correct loc object if (loc.leadingOffset === 0) { @@ -163,6 +164,4 @@ export function updateMetadata( } } } - - return [loc, comments]; } diff --git a/src/types.d.ts b/src/types.d.ts index d974678b1..f87b6b64c 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -32,8 +32,6 @@ interface BaseComment { followingNode?: StrictAstNode; } -type Metadata = [AstLocation, Comment[]]; - interface SlangNode { kind: | NonterminalKind From 2b30f8eeaa1a470cd0d9ce3ba50534e41712e98a Mon Sep 17 00:00:00 2001 From: Klaus Date: Tue, 8 Jul 2025 16:22:39 +0100 Subject: [PATCH 4/8] since all calls to `getMetadata` had been standardised, it's much cleaner to have it as a constructor of a parent class and `updateMetadata` being a class function --- src/slang-nodes/AbicoderPragma.ts | 12 +- src/slang-nodes/AdditiveExpression.ts | 17 +- src/slang-nodes/AddressType.ts | 11 +- src/slang-nodes/AndExpression.ts | 17 +- src/slang-nodes/ArgumentsDeclaration.ts | 14 +- src/slang-nodes/ArrayExpression.ts | 14 +- src/slang-nodes/ArrayTypeName.ts | 14 +- src/slang-nodes/ArrayValues.ts | 14 +- src/slang-nodes/AssemblyFlags.ts | 14 +- src/slang-nodes/AssemblyFlagsDeclaration.ts | 14 +- src/slang-nodes/AssemblyStatement.ts | 18 +- src/slang-nodes/AssignmentExpression.ts | 17 +- src/slang-nodes/BitwiseAndExpression.ts | 17 +- src/slang-nodes/BitwiseOrExpression.ts | 17 +- src/slang-nodes/BitwiseXorExpression.ts | 17 +- src/slang-nodes/Block.ts | 14 +- src/slang-nodes/BreakStatement.ts | 11 +- src/slang-nodes/CallOptions.ts | 14 +- src/slang-nodes/CallOptionsExpression.ts | 14 +- src/slang-nodes/CatchClause.ts | 14 +- src/slang-nodes/CatchClauseError.ts | 14 +- src/slang-nodes/CatchClauses.ts | 14 +- src/slang-nodes/CommentNode.ts | 29 +++ src/slang-nodes/ConditionalExpression.ts | 14 +- src/slang-nodes/ConstantDefinition.ts | 14 +- src/slang-nodes/ConstructorAttribute.ts | 18 +- src/slang-nodes/ConstructorAttributes.ts | 14 +- src/slang-nodes/ConstructorDefinition.ts | 18 +- src/slang-nodes/ContinueStatement.ts | 11 +- src/slang-nodes/ContractDefinition.ts | 14 +- src/slang-nodes/ContractMember.ts | 14 +- src/slang-nodes/ContractMembers.ts | 14 +- src/slang-nodes/ContractSpecifier.ts | 14 +- src/slang-nodes/ContractSpecifiers.ts | 14 +- src/slang-nodes/DecimalNumberExpression.ts | 14 +- src/slang-nodes/DoWhileStatement.ts | 14 +- src/slang-nodes/ElementaryType.ts | 18 +- src/slang-nodes/ElseBranch.ts | 14 +- src/slang-nodes/EmitStatement.ts | 14 +- src/slang-nodes/EnumDefinition.ts | 14 +- src/slang-nodes/EnumMembers.ts | 12 +- src/slang-nodes/EqualityExpression.ts | 17 +- src/slang-nodes/ErrorDefinition.ts | 14 +- src/slang-nodes/ErrorParameter.ts | 14 +- src/slang-nodes/ErrorParameters.ts | 14 +- src/slang-nodes/ErrorParametersDeclaration.ts | 14 +- src/slang-nodes/EventDefinition.ts | 14 +- src/slang-nodes/EventParameter.ts | 14 +- src/slang-nodes/EventParameters.ts | 14 +- src/slang-nodes/EventParametersDeclaration.ts | 14 +- src/slang-nodes/ExperimentalFeature.ts | 16 +- src/slang-nodes/ExperimentalPragma.ts | 14 +- src/slang-nodes/ExponentiationExpression.ts | 17 +- src/slang-nodes/Expression.ts | 16 +- src/slang-nodes/ExpressionStatement.ts | 14 +- src/slang-nodes/FallbackFunctionAttribute.ts | 18 +- src/slang-nodes/FallbackFunctionAttributes.ts | 14 +- src/slang-nodes/FallbackFunctionDefinition.ts | 14 +- src/slang-nodes/ForStatement.ts | 14 +- src/slang-nodes/ForStatementCondition.ts | 18 +- src/slang-nodes/ForStatementInitialization.ts | 18 +- src/slang-nodes/FunctionAttribute.ts | 18 +- src/slang-nodes/FunctionAttributes.ts | 14 +- src/slang-nodes/FunctionBody.ts | 18 +- src/slang-nodes/FunctionCallExpression.ts | 14 +- src/slang-nodes/FunctionDefinition.ts | 14 +- src/slang-nodes/FunctionName.ts | 12 +- src/slang-nodes/FunctionType.ts | 18 +- src/slang-nodes/FunctionTypeAttribute.ts | 11 +- src/slang-nodes/FunctionTypeAttributes.ts | 14 +- src/slang-nodes/HexNumberExpression.ts | 14 +- src/slang-nodes/HexStringLiteral.ts | 11 +- src/slang-nodes/HexStringLiterals.ts | 14 +- src/slang-nodes/Identifier.ts | 12 +- src/slang-nodes/IdentifierPath.ts | 12 +- src/slang-nodes/IfStatement.ts | 18 +- src/slang-nodes/ImportAlias.ts | 12 +- src/slang-nodes/ImportClause.ts | 14 +- src/slang-nodes/ImportDeconstruction.ts | 14 +- src/slang-nodes/ImportDeconstructionSymbol.ts | 14 +- .../ImportDeconstructionSymbols.ts | 14 +- src/slang-nodes/ImportDirective.ts | 14 +- src/slang-nodes/IndexAccessEnd.ts | 14 +- src/slang-nodes/IndexAccessExpression.ts | 18 +- src/slang-nodes/InequalityExpression.ts | 17 +- src/slang-nodes/InheritanceSpecifier.ts | 14 +- src/slang-nodes/InheritanceType.ts | 14 +- src/slang-nodes/InheritanceTypes.ts | 14 +- src/slang-nodes/InterfaceDefinition.ts | 14 +- src/slang-nodes/InterfaceMembers.ts | 14 +- src/slang-nodes/LibraryDefinition.ts | 14 +- src/slang-nodes/LibraryMembers.ts | 14 +- src/slang-nodes/MappingKey.ts | 14 +- src/slang-nodes/MappingKeyType.ts | 14 +- src/slang-nodes/MappingType.ts | 14 +- src/slang-nodes/MappingValue.ts | 14 +- src/slang-nodes/MemberAccessExpression.ts | 14 +- src/slang-nodes/ModifierAttribute.ts | 18 +- src/slang-nodes/ModifierAttributes.ts | 14 +- src/slang-nodes/ModifierDefinition.ts | 18 +- src/slang-nodes/ModifierInvocation.ts | 14 +- src/slang-nodes/MultiLineComment.ts | 26 +-- src/slang-nodes/MultiLineNatSpecComment.ts | 26 +-- src/slang-nodes/MultiplicativeExpression.ts | 17 +- src/slang-nodes/NamedArgument.ts | 14 +- src/slang-nodes/NamedArgumentGroup.ts | 14 +- src/slang-nodes/NamedArguments.ts | 14 +- src/slang-nodes/NamedArgumentsDeclaration.ts | 14 +- src/slang-nodes/NamedImport.ts | 14 +- src/slang-nodes/NewExpression.ts | 14 +- src/slang-nodes/NumberUnit.ts | 11 +- src/slang-nodes/OrExpression.ts | 17 +- src/slang-nodes/OverridePaths.ts | 14 +- src/slang-nodes/OverridePathsDeclaration.ts | 14 +- src/slang-nodes/OverrideSpecifier.ts | 14 +- src/slang-nodes/Parameter.ts | 17 +- src/slang-nodes/Parameters.ts | 14 +- src/slang-nodes/ParametersDeclaration.ts | 14 +- src/slang-nodes/PathImport.ts | 14 +- src/slang-nodes/PositionalArguments.ts | 14 +- .../PositionalArgumentsDeclaration.ts | 14 +- src/slang-nodes/PostfixExpression.ts | 14 +- src/slang-nodes/Pragma.ts | 14 +- src/slang-nodes/PragmaDirective.ts | 14 +- src/slang-nodes/PrefixExpression.ts | 14 +- src/slang-nodes/ReceiveFunctionAttribute.ts | 18 +- src/slang-nodes/ReceiveFunctionAttributes.ts | 14 +- src/slang-nodes/ReceiveFunctionDefinition.ts | 18 +- src/slang-nodes/ReturnStatement.ts | 14 +- src/slang-nodes/ReturnsDeclaration.ts | 14 +- src/slang-nodes/RevertStatement.ts | 14 +- src/slang-nodes/ShiftExpression.ts | 17 +- src/slang-nodes/SimpleVersionLiteral.ts | 11 +- src/slang-nodes/SingleLineComment.ts | 26 +-- src/slang-nodes/SingleLineNatSpecComment.ts | 26 +-- src/slang-nodes/SlangNode.ts | 164 +++++++++++++++++ src/slang-nodes/SourceUnit.ts | 16 +- src/slang-nodes/SourceUnitMember.ts | 14 +- src/slang-nodes/SourceUnitMembers.ts | 14 +- src/slang-nodes/StateVariableAttribute.ts | 18 +- src/slang-nodes/StateVariableAttributes.ts | 14 +- src/slang-nodes/StateVariableDefinition.ts | 18 +- .../StateVariableDefinitionValue.ts | 14 +- src/slang-nodes/Statement.ts | 14 +- src/slang-nodes/Statements.ts | 14 +- src/slang-nodes/StorageLayoutSpecifier.ts | 14 +- src/slang-nodes/StorageLocation.ts | 11 +- src/slang-nodes/StringExpression.ts | 14 +- src/slang-nodes/StringLiteral.ts | 11 +- src/slang-nodes/StringLiterals.ts | 14 +- src/slang-nodes/StructDefinition.ts | 14 +- src/slang-nodes/StructMember.ts | 14 +- src/slang-nodes/StructMembers.ts | 14 +- src/slang-nodes/ThrowStatement.ts | 11 +- src/slang-nodes/TryStatement.ts | 14 +- src/slang-nodes/TupleDeconstructionElement.ts | 14 +- .../TupleDeconstructionElements.ts | 14 +- .../TupleDeconstructionStatement.ts | 14 +- src/slang-nodes/TupleExpression.ts | 14 +- src/slang-nodes/TupleMember.ts | 14 +- src/slang-nodes/TupleValue.ts | 14 +- src/slang-nodes/TupleValues.ts | 14 +- src/slang-nodes/TypeExpression.ts | 14 +- src/slang-nodes/TypeName.ts | 14 +- src/slang-nodes/TypedTupleMember.ts | 17 +- src/slang-nodes/UncheckedBlock.ts | 14 +- src/slang-nodes/UnicodeStringLiteral.ts | 11 +- src/slang-nodes/UnicodeStringLiterals.ts | 14 +- src/slang-nodes/UnnamedFunctionAttribute.ts | 18 +- src/slang-nodes/UnnamedFunctionAttributes.ts | 14 +- src/slang-nodes/UnnamedFunctionDefinition.ts | 18 +- src/slang-nodes/UntypedTupleMember.ts | 14 +- .../UserDefinedValueTypeDefinition.ts | 14 +- src/slang-nodes/UsingAlias.ts | 14 +- src/slang-nodes/UsingClause.ts | 14 +- src/slang-nodes/UsingDeconstruction.ts | 14 +- src/slang-nodes/UsingDeconstructionSymbol.ts | 14 +- src/slang-nodes/UsingDeconstructionSymbols.ts | 14 +- src/slang-nodes/UsingDirective.ts | 14 +- src/slang-nodes/UsingOperator.ts | 11 +- src/slang-nodes/UsingTarget.ts | 18 +- .../VariableDeclarationStatement.ts | 18 +- src/slang-nodes/VariableDeclarationType.ts | 18 +- src/slang-nodes/VariableDeclarationValue.ts | 14 +- src/slang-nodes/VersionExpression.ts | 14 +- src/slang-nodes/VersionExpressionSet.ts | 14 +- src/slang-nodes/VersionExpressionSets.ts | 14 +- src/slang-nodes/VersionLiteral.ts | 18 +- src/slang-nodes/VersionOperator.ts | 11 +- src/slang-nodes/VersionPragma.ts | 14 +- src/slang-nodes/VersionRange.ts | 14 +- src/slang-nodes/VersionTerm.ts | 14 +- src/slang-nodes/WhileStatement.ts | 14 +- src/slang-nodes/YulArguments.ts | 14 +- src/slang-nodes/YulAssignmentOperator.ts | 18 +- src/slang-nodes/YulBlock.ts | 14 +- src/slang-nodes/YulBreakStatement.ts | 11 +- src/slang-nodes/YulColonAndEqual.ts | 11 +- src/slang-nodes/YulContinueStatement.ts | 11 +- src/slang-nodes/YulDefaultCase.ts | 14 +- src/slang-nodes/YulEqualAndColon.ts | 11 +- src/slang-nodes/YulExpression.ts | 14 +- src/slang-nodes/YulForStatement.ts | 14 +- src/slang-nodes/YulFunctionCallExpression.ts | 14 +- src/slang-nodes/YulFunctionDefinition.ts | 18 +- src/slang-nodes/YulIdentifier.ts | 12 +- src/slang-nodes/YulIfStatement.ts | 14 +- src/slang-nodes/YulLabel.ts | 12 +- src/slang-nodes/YulLeaveStatement.ts | 11 +- src/slang-nodes/YulLiteral.ts | 18 +- src/slang-nodes/YulParameters.ts | 12 +- src/slang-nodes/YulParametersDeclaration.ts | 14 +- src/slang-nodes/YulPath.ts | 12 +- src/slang-nodes/YulPaths.ts | 14 +- src/slang-nodes/YulReturnsDeclaration.ts | 14 +- src/slang-nodes/YulStackAssignmentOperator.ts | 18 +- .../YulStackAssignmentStatement.ts | 14 +- src/slang-nodes/YulStatement.ts | 14 +- src/slang-nodes/YulStatements.ts | 14 +- src/slang-nodes/YulSwitchCase.ts | 14 +- src/slang-nodes/YulSwitchCases.ts | 14 +- src/slang-nodes/YulSwitchStatement.ts | 14 +- src/slang-nodes/YulValueCase.ts | 14 +- .../YulVariableAssignmentStatement.ts | 18 +- .../YulVariableDeclarationStatement.ts | 14 +- .../YulVariableDeclarationValue.ts | 14 +- src/slang-nodes/YulVariableNames.ts | 12 +- src/slang-utils/metadata.ts | 167 ------------------ src/slangPrinter.ts | 1 + src/slangSolidityParser.ts | 2 +- src/types.d.ts | 35 +--- 231 files changed, 1270 insertions(+), 2414 deletions(-) create mode 100644 src/slang-nodes/CommentNode.ts create mode 100644 src/slang-nodes/SlangNode.ts delete mode 100644 src/slang-utils/metadata.ts diff --git a/src/slang-nodes/AbicoderPragma.ts b/src/slang-nodes/AbicoderPragma.ts index c36415ac7..4ac460a1f 100644 --- a/src/slang-nodes/AbicoderPragma.ts +++ b/src/slang-nodes/AbicoderPragma.ts @@ -1,22 +1,18 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { Identifier } from './Identifier.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc } from 'prettier'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class AbicoderPragma implements SlangNode { +export class AbicoderPragma extends SlangNode { readonly kind = NonterminalKind.AbicoderPragma; - comments; - - loc; - version: Identifier; constructor(ast: ast.AbicoderPragma) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.version = new Identifier(ast.version); } diff --git a/src/slang-nodes/AdditiveExpression.ts b/src/slang-nodes/AdditiveExpression.ts index a81a4ee06..e934d3fd4 100644 --- a/src/slang-nodes/AdditiveExpression.ts +++ b/src/slang-nodes/AdditiveExpression.ts @@ -2,13 +2,13 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { printBinaryOperation } from '../slang-printers/print-binary-operation.js'; import { createHugFunction } from '../slang-utils/create-hug-function.js'; import { createKindCheckFunction } from '../slang-utils/create-kind-check-function.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { Expression } from './Expression.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const tryToHug = createHugFunction(['%']); @@ -25,13 +25,9 @@ const printAdditiveExpression = printBinaryOperation( ]) ); -export class AdditiveExpression implements SlangNode { +export class AdditiveExpression extends SlangNode { readonly kind = NonterminalKind.AdditiveExpression; - comments; - - loc; - leftOperand: Expression; operator: string; @@ -39,16 +35,13 @@ export class AdditiveExpression implements SlangNode { rightOperand: Expression; constructor(ast: ast.AdditiveExpression, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.leftOperand = new Expression(ast.leftOperand, options); this.operator = ast.operator.unparse(); this.rightOperand = new Expression(ast.rightOperand, options); - updateMetadata(this.loc, this.comments, [ - this.leftOperand, - this.rightOperand - ]); + this.updateMetadata([this.leftOperand, this.rightOperand]); this.leftOperand = tryToHug(this.leftOperand); this.rightOperand = tryToHug(this.rightOperand); diff --git a/src/slang-nodes/AddressType.ts b/src/slang-nodes/AddressType.ts index 8a3fe8411..0fe6472f4 100644 --- a/src/slang-nodes/AddressType.ts +++ b/src/slang-nodes/AddressType.ts @@ -1,22 +1,17 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { joinExisting } from '../slang-utils/join-existing.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { Doc } from 'prettier'; -import type { SlangNode } from '../types.d.ts'; -export class AddressType implements SlangNode { +export class AddressType extends SlangNode { readonly kind = NonterminalKind.AddressType; - comments; - - loc; - payableKeyword?: string; constructor(ast: ast.AddressType) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.payableKeyword = ast.payableKeyword?.unparse(); } diff --git a/src/slang-nodes/AndExpression.ts b/src/slang-nodes/AndExpression.ts index 091afcd87..db17e3be6 100644 --- a/src/slang-nodes/AndExpression.ts +++ b/src/slang-nodes/AndExpression.ts @@ -1,20 +1,16 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { printLogicalOperation } from '../slang-printers/print-logical-operation.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { Expression } from './Expression.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class AndExpression implements SlangNode { +export class AndExpression extends SlangNode { readonly kind = NonterminalKind.AndExpression; - comments; - - loc; - leftOperand: Expression; operator: string; @@ -22,16 +18,13 @@ export class AndExpression implements SlangNode { rightOperand: Expression; constructor(ast: ast.AndExpression, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.leftOperand = new Expression(ast.leftOperand, options); this.operator = ast.operator.unparse(); this.rightOperand = new Expression(ast.rightOperand, options); - updateMetadata(this.loc, this.comments, [ - this.leftOperand, - this.rightOperand - ]); + this.updateMetadata([this.leftOperand, this.rightOperand]); } print( diff --git a/src/slang-nodes/ArgumentsDeclaration.ts b/src/slang-nodes/ArgumentsDeclaration.ts index ce4ddf02c..efac80770 100644 --- a/src/slang-nodes/ArgumentsDeclaration.ts +++ b/src/slang-nodes/ArgumentsDeclaration.ts @@ -1,24 +1,20 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { PositionalArgumentsDeclaration } from './PositionalArgumentsDeclaration.js'; import { NamedArgumentsDeclaration } from './NamedArgumentsDeclaration.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class ArgumentsDeclaration implements SlangNode { +export class ArgumentsDeclaration extends SlangNode { readonly kind = NonterminalKind.ArgumentsDeclaration; - comments; - - loc; - variant: PositionalArgumentsDeclaration | NamedArgumentsDeclaration; constructor(ast: ast.ArgumentsDeclaration, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); switch (ast.variant.cst.kind) { case NonterminalKind.PositionalArgumentsDeclaration: @@ -37,7 +33,7 @@ export class ArgumentsDeclaration implements SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - updateMetadata(this.loc, this.comments, [this.variant]); + this.updateMetadata([this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ArrayExpression.ts b/src/slang-nodes/ArrayExpression.ts index d89ed963a..83db98ad1 100644 --- a/src/slang-nodes/ArrayExpression.ts +++ b/src/slang-nodes/ArrayExpression.ts @@ -1,30 +1,26 @@ import { doc } from 'prettier'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { ArrayValues } from './ArrayValues.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { group } = doc.builders; -export class ArrayExpression implements SlangNode { +export class ArrayExpression extends SlangNode { readonly kind = NonterminalKind.ArrayExpression; - comments; - - loc; - items: ArrayValues; constructor(ast: ast.ArrayExpression, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.items = new ArrayValues(ast.items, options); - updateMetadata(this.loc, this.comments, [this.items]); + this.updateMetadata([this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ArrayTypeName.ts b/src/slang-nodes/ArrayTypeName.ts index a7989ded6..cd3611927 100644 --- a/src/slang-nodes/ArrayTypeName.ts +++ b/src/slang-nodes/ArrayTypeName.ts @@ -1,33 +1,29 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { TypeName } from './TypeName.js'; import { Expression } from './Expression.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class ArrayTypeName implements SlangNode { +export class ArrayTypeName extends SlangNode { readonly kind = NonterminalKind.ArrayTypeName; - comments; - - loc; - operand: TypeName; index?: Expression; constructor(ast: ast.ArrayTypeName, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.operand = new TypeName(ast.operand, options); if (ast.index) { this.index = new Expression(ast.index, options); } - updateMetadata(this.loc, this.comments, [this.operand, this.index]); + this.updateMetadata([this.operand, this.index]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ArrayValues.ts b/src/slang-nodes/ArrayValues.ts index 3e5d9ace8..a649792f2 100644 --- a/src/slang-nodes/ArrayValues.ts +++ b/src/slang-nodes/ArrayValues.ts @@ -1,28 +1,24 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { printSeparatedList } from '../slang-printers/print-separated-list.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { Expression } from './Expression.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class ArrayValues implements SlangNode { +export class ArrayValues extends SlangNode { readonly kind = NonterminalKind.ArrayValues; - comments; - - loc; - items: Expression[]; constructor(ast: ast.ArrayValues, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast, true); + super(ast, true); this.items = ast.items.map((item) => new Expression(item, options)); - updateMetadata(this.loc, this.comments, [this.items]); + this.updateMetadata([this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/AssemblyFlags.ts b/src/slang-nodes/AssemblyFlags.ts index 8bbc7d8be..57b83a9ad 100644 --- a/src/slang-nodes/AssemblyFlags.ts +++ b/src/slang-nodes/AssemblyFlags.ts @@ -1,28 +1,24 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { printSeparatedList } from '../slang-printers/print-separated-list.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { StringLiteral } from './StringLiteral.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class AssemblyFlags implements SlangNode { +export class AssemblyFlags extends SlangNode { readonly kind = NonterminalKind.AssemblyFlags; - comments; - - loc; - items: StringLiteral[]; constructor(ast: ast.AssemblyFlags, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast, true); + super(ast, true); this.items = ast.items.map((item) => new StringLiteral(item, options)); - updateMetadata(this.loc, this.comments, [this.items]); + this.updateMetadata([this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/AssemblyFlagsDeclaration.ts b/src/slang-nodes/AssemblyFlagsDeclaration.ts index 62b71c712..05aeae43f 100644 --- a/src/slang-nodes/AssemblyFlagsDeclaration.ts +++ b/src/slang-nodes/AssemblyFlagsDeclaration.ts @@ -1,30 +1,26 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { AssemblyFlags } from './AssemblyFlags.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class AssemblyFlagsDeclaration implements SlangNode { +export class AssemblyFlagsDeclaration extends SlangNode { readonly kind = NonterminalKind.AssemblyFlagsDeclaration; - comments; - - loc; - flags: AssemblyFlags; constructor( ast: ast.AssemblyFlagsDeclaration, options: ParserOptions ) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.flags = new AssemblyFlags(ast.flags, options); - updateMetadata(this.loc, this.comments, [this.flags]); + this.updateMetadata([this.flags]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/AssemblyStatement.ts b/src/slang-nodes/AssemblyStatement.ts index f08002328..9d2b51de3 100644 --- a/src/slang-nodes/AssemblyStatement.ts +++ b/src/slang-nodes/AssemblyStatement.ts @@ -1,5 +1,5 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { joinExisting } from '../slang-utils/join-existing.js'; import { StringLiteral } from './StringLiteral.js'; import { AssemblyFlagsDeclaration } from './AssemblyFlagsDeclaration.js'; @@ -8,15 +8,11 @@ import { YulBlock } from './YulBlock.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class AssemblyStatement implements SlangNode { +export class AssemblyStatement extends SlangNode { readonly kind = NonterminalKind.AssemblyStatement; - comments; - - loc; - label?: StringLiteral; flags?: AssemblyFlagsDeclaration; @@ -24,7 +20,7 @@ export class AssemblyStatement implements SlangNode { body: YulBlock; constructor(ast: ast.AssemblyStatement, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); if (ast.label) { this.label = new StringLiteral(ast.label, options); @@ -34,11 +30,7 @@ export class AssemblyStatement implements SlangNode { } this.body = new YulBlock(ast.body, options); - updateMetadata(this.loc, this.comments, [ - this.label, - this.flags, - this.body - ]); + this.updateMetadata([this.label, this.flags, this.body]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/AssignmentExpression.ts b/src/slang-nodes/AssignmentExpression.ts index 615382461..3cf9d3ae7 100644 --- a/src/slang-nodes/AssignmentExpression.ts +++ b/src/slang-nodes/AssignmentExpression.ts @@ -1,23 +1,19 @@ import { NonterminalKind, TerminalKind } from '@nomicfoundation/slang/cst'; import { doc } from 'prettier'; import { isBinaryOperation } from '../slang-utils/is-binary-operation.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { Expression } from './Expression.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { group, indent, line } = doc.builders; -export class AssignmentExpression implements SlangNode { +export class AssignmentExpression extends SlangNode { readonly kind = NonterminalKind.AssignmentExpression; - comments; - - loc; - leftOperand: Expression; operator: string; @@ -25,16 +21,13 @@ export class AssignmentExpression implements SlangNode { rightOperand: Expression; constructor(ast: ast.AssignmentExpression, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.leftOperand = new Expression(ast.leftOperand, options); this.operator = ast.operator.unparse(); this.rightOperand = new Expression(ast.rightOperand, options); - updateMetadata(this.loc, this.comments, [ - this.leftOperand, - this.rightOperand - ]); + this.updateMetadata([this.leftOperand, this.rightOperand]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/BitwiseAndExpression.ts b/src/slang-nodes/BitwiseAndExpression.ts index 771d4fb11..52a16fd08 100644 --- a/src/slang-nodes/BitwiseAndExpression.ts +++ b/src/slang-nodes/BitwiseAndExpression.ts @@ -2,13 +2,13 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { printBinaryOperation } from '../slang-printers/print-binary-operation.js'; import { createHugFunction } from '../slang-utils/create-hug-function.js'; import { createKindCheckFunction } from '../slang-utils/create-kind-check-function.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { Expression } from './Expression.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const tryToHug = createHugFunction(['+', '-', '*', '/', '**', '<<', '>>']); @@ -21,13 +21,9 @@ const printBitwiseAndExpression = printBinaryOperation( ]) ); -export class BitwiseAndExpression implements SlangNode { +export class BitwiseAndExpression extends SlangNode { readonly kind = NonterminalKind.BitwiseAndExpression; - comments; - - loc; - leftOperand: Expression; operator: string; @@ -35,16 +31,13 @@ export class BitwiseAndExpression implements SlangNode { rightOperand: Expression; constructor(ast: ast.BitwiseAndExpression, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.leftOperand = new Expression(ast.leftOperand, options); this.operator = ast.operator.unparse(); this.rightOperand = new Expression(ast.rightOperand, options); - updateMetadata(this.loc, this.comments, [ - this.leftOperand, - this.rightOperand - ]); + this.updateMetadata([this.leftOperand, this.rightOperand]); this.leftOperand = tryToHug(this.leftOperand); this.rightOperand = tryToHug(this.rightOperand); diff --git a/src/slang-nodes/BitwiseOrExpression.ts b/src/slang-nodes/BitwiseOrExpression.ts index 4a0ef4e36..9bcd39dfa 100644 --- a/src/slang-nodes/BitwiseOrExpression.ts +++ b/src/slang-nodes/BitwiseOrExpression.ts @@ -2,13 +2,13 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { printBinaryOperation } from '../slang-printers/print-binary-operation.js'; import { createHugFunction } from '../slang-utils/create-hug-function.js'; import { createKindCheckFunction } from '../slang-utils/create-kind-check-function.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { Expression } from './Expression.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const tryToHug = createHugFunction([ '+', @@ -31,13 +31,9 @@ const printBitwiseOrExpression = printBinaryOperation( ]) ); -export class BitwiseOrExpression implements SlangNode { +export class BitwiseOrExpression extends SlangNode { readonly kind = NonterminalKind.BitwiseOrExpression; - comments; - - loc; - leftOperand: Expression; operator: string; @@ -45,16 +41,13 @@ export class BitwiseOrExpression implements SlangNode { rightOperand: Expression; constructor(ast: ast.BitwiseOrExpression, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.leftOperand = new Expression(ast.leftOperand, options); this.operator = ast.operator.unparse(); this.rightOperand = new Expression(ast.rightOperand, options); - updateMetadata(this.loc, this.comments, [ - this.leftOperand, - this.rightOperand - ]); + this.updateMetadata([this.leftOperand, this.rightOperand]); this.leftOperand = tryToHug(this.leftOperand); this.rightOperand = tryToHug(this.rightOperand); diff --git a/src/slang-nodes/BitwiseXorExpression.ts b/src/slang-nodes/BitwiseXorExpression.ts index 054bcd7d8..c933b6620 100644 --- a/src/slang-nodes/BitwiseXorExpression.ts +++ b/src/slang-nodes/BitwiseXorExpression.ts @@ -2,13 +2,13 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { printBinaryOperation } from '../slang-printers/print-binary-operation.js'; import { createHugFunction } from '../slang-utils/create-hug-function.js'; import { createKindCheckFunction } from '../slang-utils/create-kind-check-function.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { Expression } from './Expression.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const tryToHug = createHugFunction(['+', '-', '*', '/', '**', '<<', '>>', '&']); @@ -21,13 +21,9 @@ const printBitwiseXorExpression = printBinaryOperation( ]) ); -export class BitwiseXorExpression implements SlangNode { +export class BitwiseXorExpression extends SlangNode { readonly kind = NonterminalKind.BitwiseXorExpression; - comments; - - loc; - leftOperand: Expression; operator: string; @@ -35,16 +31,13 @@ export class BitwiseXorExpression implements SlangNode { rightOperand: Expression; constructor(ast: ast.BitwiseXorExpression, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.leftOperand = new Expression(ast.leftOperand, options); this.operator = ast.operator.unparse(); this.rightOperand = new Expression(ast.rightOperand, options); - updateMetadata(this.loc, this.comments, [ - this.leftOperand, - this.rightOperand - ]); + this.updateMetadata([this.leftOperand, this.rightOperand]); this.leftOperand = tryToHug(this.leftOperand); this.rightOperand = tryToHug(this.rightOperand); diff --git a/src/slang-nodes/Block.ts b/src/slang-nodes/Block.ts index 2be059276..db748a50b 100644 --- a/src/slang-nodes/Block.ts +++ b/src/slang-nodes/Block.ts @@ -1,27 +1,23 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { Statements } from './Statements.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class Block implements SlangNode { +export class Block extends SlangNode { readonly kind = NonterminalKind.Block; - comments; - - loc; - statements: Statements; constructor(ast: ast.Block, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.statements = new Statements(ast.statements, options); - updateMetadata(this.loc, this.comments, [this.statements]); + this.updateMetadata([this.statements]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/BreakStatement.ts b/src/slang-nodes/BreakStatement.ts index 24c4f0917..2e8eb523d 100644 --- a/src/slang-nodes/BreakStatement.ts +++ b/src/slang-nodes/BreakStatement.ts @@ -1,19 +1,14 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { Doc } from 'prettier'; -import type { SlangNode } from '../types.d.ts'; -export class BreakStatement implements SlangNode { +export class BreakStatement extends SlangNode { readonly kind = NonterminalKind.BreakStatement; - comments; - - loc; - constructor(ast: ast.BreakStatement) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); } print(): Doc { diff --git a/src/slang-nodes/CallOptions.ts b/src/slang-nodes/CallOptions.ts index 5ce7a8918..a701d736f 100644 --- a/src/slang-nodes/CallOptions.ts +++ b/src/slang-nodes/CallOptions.ts @@ -1,31 +1,27 @@ import { doc } from 'prettier'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { printSeparatedList } from '../slang-printers/print-separated-list.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { NamedArgument } from './NamedArgument.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { line, softline } = doc.builders; -export class CallOptions implements SlangNode { +export class CallOptions extends SlangNode { readonly kind = NonterminalKind.CallOptions; - comments; - - loc; - items: NamedArgument[]; constructor(ast: ast.CallOptions, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast, true); + super(ast, true); this.items = ast.items.map((item) => new NamedArgument(item, options)); - updateMetadata(this.loc, this.comments, [this.items]); + this.updateMetadata([this.items]); } print( diff --git a/src/slang-nodes/CallOptionsExpression.ts b/src/slang-nodes/CallOptionsExpression.ts index 7743cba0f..3b607f741 100644 --- a/src/slang-nodes/CallOptionsExpression.ts +++ b/src/slang-nodes/CallOptionsExpression.ts @@ -1,31 +1,27 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { Expression } from './Expression.js'; import { CallOptions } from './CallOptions.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class CallOptionsExpression implements SlangNode { +export class CallOptionsExpression extends SlangNode { readonly kind = NonterminalKind.CallOptionsExpression; - comments; - - loc; - operand: Expression; options: CallOptions; constructor(ast: ast.CallOptionsExpression, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.operand = new Expression(ast.operand, options); this.options = new CallOptions(ast.options, options); - updateMetadata(this.loc, this.comments, [this.operand, this.options]); + this.updateMetadata([this.operand, this.options]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/CatchClause.ts b/src/slang-nodes/CatchClause.ts index cb4077d79..47d0c32b9 100644 --- a/src/slang-nodes/CatchClause.ts +++ b/src/slang-nodes/CatchClause.ts @@ -1,33 +1,29 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { CatchClauseError } from './CatchClauseError.js'; import { Block } from './Block.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class CatchClause implements SlangNode { +export class CatchClause extends SlangNode { readonly kind = NonterminalKind.CatchClause; - comments; - - loc; - error?: CatchClauseError; body: Block; constructor(ast: ast.CatchClause, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); if (ast.error) { this.error = new CatchClauseError(ast.error, options); } this.body = new Block(ast.body, options); - updateMetadata(this.loc, this.comments, [this.error, this.body]); + this.updateMetadata([this.error, this.body]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/CatchClauseError.ts b/src/slang-nodes/CatchClauseError.ts index b5cb107c1..11b6d9b22 100644 --- a/src/slang-nodes/CatchClauseError.ts +++ b/src/slang-nodes/CatchClauseError.ts @@ -1,36 +1,32 @@ import { doc } from 'prettier'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { Identifier } from './Identifier.js'; import { ParametersDeclaration } from './ParametersDeclaration.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { group } = doc.builders; -export class CatchClauseError implements SlangNode { +export class CatchClauseError extends SlangNode { readonly kind = NonterminalKind.CatchClauseError; - comments; - - loc; - name?: Identifier; parameters: ParametersDeclaration; constructor(ast: ast.CatchClauseError, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); if (ast.name) { this.name = new Identifier(ast.name); } this.parameters = new ParametersDeclaration(ast.parameters, options); - updateMetadata(this.loc, this.comments, [this.parameters]); + this.updateMetadata([this.parameters]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/CatchClauses.ts b/src/slang-nodes/CatchClauses.ts index 7eb6ca08c..7ed690e98 100644 --- a/src/slang-nodes/CatchClauses.ts +++ b/src/slang-nodes/CatchClauses.ts @@ -1,30 +1,26 @@ import { doc } from 'prettier'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { CatchClause } from './CatchClause.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { join } = doc.builders; -export class CatchClauses implements SlangNode { +export class CatchClauses extends SlangNode { readonly kind = NonterminalKind.CatchClauses; - comments; - - loc; - items: CatchClause[]; constructor(ast: ast.CatchClauses, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast, true); + super(ast, true); this.items = ast.items.map((item) => new CatchClause(item, options)); - updateMetadata(this.loc, this.comments, [this.items]); + this.updateMetadata([this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/CommentNode.ts b/src/slang-nodes/CommentNode.ts new file mode 100644 index 000000000..aa40720e3 --- /dev/null +++ b/src/slang-nodes/CommentNode.ts @@ -0,0 +1,29 @@ +import { TerminalNode } from '@nomicfoundation/slang/cst'; + +import type { Location } from '../types.d.ts'; +import type { StrictAstNode } from './types.d.ts'; + +export class CommentNode { + loc: Location; + + leading?: boolean; + + trailing?: boolean; + + printed?: boolean; + + placement?: 'endOfLine' | 'ownLine' | 'remaining'; + + precedingNode?: StrictAstNode; + + enclosingNode?: StrictAstNode; + + followingNode?: StrictAstNode; + + constructor(ast: TerminalNode, offset: number) { + this.loc = { + start: offset, + end: offset + ast.textLength.utf16 + }; + } +} diff --git a/src/slang-nodes/ConditionalExpression.ts b/src/slang-nodes/ConditionalExpression.ts index c52dafad4..4e5ca386d 100644 --- a/src/slang-nodes/ConditionalExpression.ts +++ b/src/slang-nodes/ConditionalExpression.ts @@ -1,13 +1,13 @@ import { doc } from 'prettier'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { printSeparatedItem } from '../slang-printers/print-separated-item.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { Expression } from './Expression.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode, StrictAstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { group, hardline, ifBreak, indent, line, softline } = doc.builders; @@ -108,13 +108,9 @@ function getOperandSingleExpression({ : undefined; } -export class ConditionalExpression implements SlangNode { +export class ConditionalExpression extends SlangNode { readonly kind = NonterminalKind.ConditionalExpression; - comments; - - loc; - operand: Expression; trueExpression: Expression; @@ -122,13 +118,13 @@ export class ConditionalExpression implements SlangNode { falseExpression: Expression; constructor(ast: ast.ConditionalExpression, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.operand = new Expression(ast.operand, options); this.trueExpression = new Expression(ast.trueExpression, options); this.falseExpression = new Expression(ast.falseExpression, options); - updateMetadata(this.loc, this.comments, [ + this.updateMetadata([ this.operand, this.trueExpression, this.falseExpression diff --git a/src/slang-nodes/ConstantDefinition.ts b/src/slang-nodes/ConstantDefinition.ts index d3aaf1a60..cc30ccad2 100644 --- a/src/slang-nodes/ConstantDefinition.ts +++ b/src/slang-nodes/ConstantDefinition.ts @@ -1,5 +1,5 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { TypeName } from './TypeName.js'; import { Identifier } from './Identifier.js'; import { Expression } from './Expression.js'; @@ -7,15 +7,11 @@ import { Expression } from './Expression.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class ConstantDefinition implements SlangNode { +export class ConstantDefinition extends SlangNode { readonly kind = NonterminalKind.ConstantDefinition; - comments; - - loc; - typeName: TypeName; name: Identifier; @@ -23,13 +19,13 @@ export class ConstantDefinition implements SlangNode { value: Expression; constructor(ast: ast.ConstantDefinition, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.typeName = new TypeName(ast.typeName, options); this.name = new Identifier(ast.name); this.value = new Expression(ast.value, options); - updateMetadata(this.loc, this.comments, [this.typeName, this.value]); + this.updateMetadata([this.typeName, this.value]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ConstructorAttribute.ts b/src/slang-nodes/ConstructorAttribute.ts index f96f2c99c..b0fdb8b7c 100644 --- a/src/slang-nodes/ConstructorAttribute.ts +++ b/src/slang-nodes/ConstructorAttribute.ts @@ -1,34 +1,26 @@ import { NonterminalKind, TerminalNode } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { ModifierInvocation } from './ModifierInvocation.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class ConstructorAttribute implements SlangNode { +export class ConstructorAttribute extends SlangNode { readonly kind = NonterminalKind.ConstructorAttribute; - comments; - - loc; - variant: ModifierInvocation | string; constructor(ast: ast.ConstructorAttribute, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.variant = ast.variant instanceof TerminalNode ? ast.variant.unparse() : new ModifierInvocation(ast.variant, options); - updateMetadata( - this.loc, - this.comments, - typeof this.variant === 'string' ? [] : [this.variant] - ); + this.updateMetadata(typeof this.variant === 'string' ? [] : [this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ConstructorAttributes.ts b/src/slang-nodes/ConstructorAttributes.ts index 62776fe79..b2c6cc587 100644 --- a/src/slang-nodes/ConstructorAttributes.ts +++ b/src/slang-nodes/ConstructorAttributes.ts @@ -1,33 +1,29 @@ import { doc } from 'prettier'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { sortFunctionAttributes } from '../slang-utils/sort-function-attributes.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { ConstructorAttribute } from './ConstructorAttribute.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { line } = doc.builders; -export class ConstructorAttributes implements SlangNode { +export class ConstructorAttributes extends SlangNode { readonly kind = NonterminalKind.ConstructorAttributes; - comments; - - loc; - items: ConstructorAttribute[]; constructor(ast: ast.ConstructorAttributes, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast, true); + super(ast, true); this.items = ast.items.map( (item) => new ConstructorAttribute(item, options) ); - updateMetadata(this.loc, this.comments, [this.items]); + this.updateMetadata([this.items]); this.items = this.items.sort(sortFunctionAttributes); } diff --git a/src/slang-nodes/ConstructorDefinition.ts b/src/slang-nodes/ConstructorDefinition.ts index 5b14f8770..972ad9888 100644 --- a/src/slang-nodes/ConstructorDefinition.ts +++ b/src/slang-nodes/ConstructorDefinition.ts @@ -1,6 +1,6 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { printFunction } from '../slang-printers/print-function.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { ParametersDeclaration } from './ParametersDeclaration.js'; import { ConstructorAttributes } from './ConstructorAttributes.js'; import { Block } from './Block.js'; @@ -8,15 +8,11 @@ import { Block } from './Block.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class ConstructorDefinition implements SlangNode { +export class ConstructorDefinition extends SlangNode { readonly kind = NonterminalKind.ConstructorDefinition; - comments; - - loc; - parameters: ParametersDeclaration; attributes: ConstructorAttributes; @@ -24,17 +20,13 @@ export class ConstructorDefinition implements SlangNode { body: Block; constructor(ast: ast.ConstructorDefinition, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.parameters = new ParametersDeclaration(ast.parameters, options); this.attributes = new ConstructorAttributes(ast.attributes, options); this.body = new Block(ast.body, options); - updateMetadata(this.loc, this.comments, [ - this.parameters, - this.attributes, - this.body - ]); + this.updateMetadata([this.parameters, this.attributes, this.body]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ContinueStatement.ts b/src/slang-nodes/ContinueStatement.ts index 457cff4ec..5e856cb49 100644 --- a/src/slang-nodes/ContinueStatement.ts +++ b/src/slang-nodes/ContinueStatement.ts @@ -1,19 +1,14 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { Doc } from 'prettier'; -import type { SlangNode } from '../types.d.ts'; -export class ContinueStatement implements SlangNode { +export class ContinueStatement extends SlangNode { readonly kind = NonterminalKind.ContinueStatement; - comments; - - loc; - constructor(ast: ast.ContinueStatement) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); } print(): Doc { diff --git a/src/slang-nodes/ContractDefinition.ts b/src/slang-nodes/ContractDefinition.ts index 6acb3af0d..8349b6ac2 100644 --- a/src/slang-nodes/ContractDefinition.ts +++ b/src/slang-nodes/ContractDefinition.ts @@ -1,7 +1,7 @@ import { doc } from 'prettier'; import { satisfies } from 'semver'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { Identifier } from './Identifier.js'; import { ContractSpecifiers } from './ContractSpecifiers.js'; import { ContractMembers } from './ContractMembers.js'; @@ -9,17 +9,13 @@ import { ContractMembers } from './ContractMembers.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { group, line } = doc.builders; -export class ContractDefinition implements SlangNode { +export class ContractDefinition extends SlangNode { readonly kind = NonterminalKind.ContractDefinition; - comments; - - loc; - abstractKeyword?: string; name: Identifier; @@ -29,14 +25,14 @@ export class ContractDefinition implements SlangNode { members: ContractMembers; constructor(ast: ast.ContractDefinition, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.abstractKeyword = ast.abstractKeyword?.unparse(); this.name = new Identifier(ast.name); this.specifiers = new ContractSpecifiers(ast.specifiers, options); this.members = new ContractMembers(ast.members, options); - updateMetadata(this.loc, this.comments, [this.specifiers, this.members]); + this.updateMetadata([this.specifiers, this.members]); this.cleanModifierInvocationArguments(options); } diff --git a/src/slang-nodes/ContractMember.ts b/src/slang-nodes/ContractMember.ts index dd7e69919..748a461e8 100644 --- a/src/slang-nodes/ContractMember.ts +++ b/src/slang-nodes/ContractMember.ts @@ -1,5 +1,5 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { UsingDirective } from './UsingDirective.js'; import { FunctionDefinition } from './FunctionDefinition.js'; import { ConstructorDefinition } from './ConstructorDefinition.js'; @@ -17,15 +17,11 @@ import { UserDefinedValueTypeDefinition } from './UserDefinedValueTypeDefinition import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class ContractMember implements SlangNode { +export class ContractMember extends SlangNode { readonly kind = NonterminalKind.ContractMember; - comments; - - loc; - variant: | UsingDirective | FunctionDefinition @@ -42,7 +38,7 @@ export class ContractMember implements SlangNode { | UserDefinedValueTypeDefinition; constructor(ast: ast.ContractMember, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); switch (ast.variant.cst.kind) { case NonterminalKind.UsingDirective: @@ -123,7 +119,7 @@ export class ContractMember implements SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - updateMetadata(this.loc, this.comments, [this.variant]); + this.updateMetadata([this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ContractMembers.ts b/src/slang-nodes/ContractMembers.ts index 4536471d7..5c43eb090 100644 --- a/src/slang-nodes/ContractMembers.ts +++ b/src/slang-nodes/ContractMembers.ts @@ -3,31 +3,27 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { printSeparatedItem } from '../slang-printers/print-separated-item.js'; import { printComments } from '../slang-printers/print-comments.js'; import { printPreservingEmptyLines } from '../slang-printers/print-preserving-empty-lines.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { ContractMember } from './ContractMember.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { hardline } = doc.builders; -export class ContractMembers implements SlangNode { +export class ContractMembers extends SlangNode { readonly kind = NonterminalKind.ContractMembers; - comments; - - loc; - items: ContractMember[]; constructor(ast: ast.ContractMembers, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast, true); + super(ast, true); this.items = ast.items.map((item) => new ContractMember(item, options)); - updateMetadata(this.loc, this.comments, [this.items]); + this.updateMetadata([this.items]); } print( diff --git a/src/slang-nodes/ContractSpecifier.ts b/src/slang-nodes/ContractSpecifier.ts index 394364bc9..4042bc141 100644 --- a/src/slang-nodes/ContractSpecifier.ts +++ b/src/slang-nodes/ContractSpecifier.ts @@ -1,24 +1,20 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { InheritanceSpecifier } from './InheritanceSpecifier.js'; import { StorageLayoutSpecifier } from './StorageLayoutSpecifier.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class ContractSpecifier implements SlangNode { +export class ContractSpecifier extends SlangNode { readonly kind = NonterminalKind.ContractSpecifier; - comments; - - loc; - variant: InheritanceSpecifier | StorageLayoutSpecifier; constructor(ast: ast.ContractSpecifier, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); switch (ast.variant.cst.kind) { case NonterminalKind.InheritanceSpecifier: @@ -36,7 +32,7 @@ export class ContractSpecifier implements SlangNode { default: throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - updateMetadata(this.loc, this.comments, [this.variant]); + this.updateMetadata([this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ContractSpecifiers.ts b/src/slang-nodes/ContractSpecifiers.ts index 696e8dbe6..c3029b0bf 100644 --- a/src/slang-nodes/ContractSpecifiers.ts +++ b/src/slang-nodes/ContractSpecifiers.ts @@ -2,31 +2,27 @@ import { doc } from 'prettier'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { sortContractSpecifiers } from '../slang-utils/sort-contract-specifiers.js'; import { printSeparatedList } from '../slang-printers/print-separated-list.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { ContractSpecifier } from './ContractSpecifier.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { group, ifBreak, line, softline } = doc.builders; -export class ContractSpecifiers implements SlangNode { +export class ContractSpecifiers extends SlangNode { readonly kind = NonterminalKind.ContractSpecifiers; - comments; - - loc; - items: ContractSpecifier[]; constructor(ast: ast.ContractSpecifiers, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast, true); + super(ast, true); this.items = ast.items.map((item) => new ContractSpecifier(item, options)); - updateMetadata(this.loc, this.comments, [this.items]); + this.updateMetadata([this.items]); this.items = this.items.sort(sortContractSpecifiers); } diff --git a/src/slang-nodes/DecimalNumberExpression.ts b/src/slang-nodes/DecimalNumberExpression.ts index 17aec4342..8709092a4 100644 --- a/src/slang-nodes/DecimalNumberExpression.ts +++ b/src/slang-nodes/DecimalNumberExpression.ts @@ -1,32 +1,28 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { joinExisting } from '../slang-utils/join-existing.js'; import { NumberUnit } from './NumberUnit.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc } from 'prettier'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class DecimalNumberExpression implements SlangNode { +export class DecimalNumberExpression extends SlangNode { readonly kind = NonterminalKind.DecimalNumberExpression; - comments; - - loc; - literal: string; unit?: NumberUnit; constructor(ast: ast.DecimalNumberExpression) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.literal = ast.literal.unparse(); if (ast.unit) { this.unit = new NumberUnit(ast.unit); } - updateMetadata(this.loc, this.comments, [this.unit]); + this.updateMetadata([this.unit]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/DoWhileStatement.ts b/src/slang-nodes/DoWhileStatement.ts index 7a071cfe3..a35fe3810 100644 --- a/src/slang-nodes/DoWhileStatement.ts +++ b/src/slang-nodes/DoWhileStatement.ts @@ -1,35 +1,31 @@ import { doc } from 'prettier'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { printSeparatedItem } from '../slang-printers/print-separated-item.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { Statement } from './Statement.js'; import { Expression } from './Expression.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { group, indent, line } = doc.builders; -export class DoWhileStatement implements SlangNode { +export class DoWhileStatement extends SlangNode { readonly kind = NonterminalKind.DoWhileStatement; - comments; - - loc; - body: Statement; condition: Expression; constructor(ast: ast.DoWhileStatement, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.body = new Statement(ast.body, options); this.condition = new Expression(ast.condition, options); - updateMetadata(this.loc, this.comments, [this.body, this.condition]); + this.updateMetadata([this.body, this.condition]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ElementaryType.ts b/src/slang-nodes/ElementaryType.ts index 8d42d998e..f42ece711 100644 --- a/src/slang-nodes/ElementaryType.ts +++ b/src/slang-nodes/ElementaryType.ts @@ -1,33 +1,25 @@ import { NonterminalKind, TerminalNode } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { AddressType } from './AddressType.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc } from 'prettier'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class ElementaryType implements SlangNode { +export class ElementaryType extends SlangNode { readonly kind = NonterminalKind.ElementaryType; - comments; - - loc; - variant: AddressType | string; constructor(ast: ast.ElementaryType) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.variant = ast.variant instanceof TerminalNode ? ast.variant.unparse() : new AddressType(ast.variant); - updateMetadata( - this.loc, - this.comments, - typeof this.variant === 'string' ? [] : [this.variant] - ); + this.updateMetadata(typeof this.variant === 'string' ? [] : [this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ElseBranch.ts b/src/slang-nodes/ElseBranch.ts index f79bb0865..98277612c 100644 --- a/src/slang-nodes/ElseBranch.ts +++ b/src/slang-nodes/ElseBranch.ts @@ -1,13 +1,13 @@ import { doc } from 'prettier'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { createKindCheckFunction } from '../slang-utils/create-kind-check-function.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { Statement } from './Statement.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { group, indent, line } = doc.builders; @@ -16,21 +16,17 @@ const isIfStatementOrBlock = createKindCheckFunction([ NonterminalKind.IfStatement ]); -export class ElseBranch implements SlangNode { +export class ElseBranch extends SlangNode { readonly kind = NonterminalKind.ElseBranch; - comments; - - loc; - body: Statement; constructor(ast: ast.ElseBranch, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.body = new Statement(ast.body, options); - updateMetadata(this.loc, this.comments, [this.body]); + this.updateMetadata([this.body]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/EmitStatement.ts b/src/slang-nodes/EmitStatement.ts index 50310b3c0..598530d93 100644 --- a/src/slang-nodes/EmitStatement.ts +++ b/src/slang-nodes/EmitStatement.ts @@ -1,31 +1,27 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { IdentifierPath } from './IdentifierPath.js'; import { ArgumentsDeclaration } from './ArgumentsDeclaration.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class EmitStatement implements SlangNode { +export class EmitStatement extends SlangNode { readonly kind = NonterminalKind.EmitStatement; - comments; - - loc; - event: IdentifierPath; arguments: ArgumentsDeclaration; constructor(ast: ast.EmitStatement, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.event = new IdentifierPath(ast.event); this.arguments = new ArgumentsDeclaration(ast.arguments, options); - updateMetadata(this.loc, this.comments, [this.event, this.arguments]); + this.updateMetadata([this.event, this.arguments]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/EnumDefinition.ts b/src/slang-nodes/EnumDefinition.ts index a21951a1e..efa754281 100644 --- a/src/slang-nodes/EnumDefinition.ts +++ b/src/slang-nodes/EnumDefinition.ts @@ -1,30 +1,26 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { Identifier } from './Identifier.js'; import { EnumMembers } from './EnumMembers.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc } from 'prettier'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class EnumDefinition implements SlangNode { +export class EnumDefinition extends SlangNode { readonly kind = NonterminalKind.EnumDefinition; - comments; - - loc; - name: Identifier; members: EnumMembers; constructor(ast: ast.EnumDefinition) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.name = new Identifier(ast.name); this.members = new EnumMembers(ast.members); - updateMetadata(this.loc, this.comments, [this.members]); + this.updateMetadata([this.members]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/EnumMembers.ts b/src/slang-nodes/EnumMembers.ts index ef5eedbea..1925635d6 100644 --- a/src/slang-nodes/EnumMembers.ts +++ b/src/slang-nodes/EnumMembers.ts @@ -1,26 +1,22 @@ import { doc } from 'prettier'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { printSeparatedList } from '../slang-printers/print-separated-list.js'; -import { getNodeMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { Identifier } from './Identifier.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc } from 'prettier'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { hardline } = doc.builders; -export class EnumMembers implements SlangNode { +export class EnumMembers extends SlangNode { readonly kind = NonterminalKind.EnumMembers; - comments; - - loc; - items: Identifier[]; constructor(ast: ast.EnumMembers) { - [this.loc, this.comments] = getNodeMetadata(ast, true); + super(ast, true); this.items = ast.items.map((item) => new Identifier(item)); } diff --git a/src/slang-nodes/EqualityExpression.ts b/src/slang-nodes/EqualityExpression.ts index 8957303ec..6d03a9ac9 100644 --- a/src/slang-nodes/EqualityExpression.ts +++ b/src/slang-nodes/EqualityExpression.ts @@ -2,13 +2,13 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { createHugFunction } from '../slang-utils/create-hug-function.js'; import { createKindCheckFunction } from '../slang-utils/create-kind-check-function.js'; import { printBinaryOperation } from '../slang-printers/print-binary-operation.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { Expression } from './Expression.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const tryToHug = createHugFunction(['==', '!=']); @@ -19,13 +19,9 @@ const printEqualityExpression = printBinaryOperation( ]) ); -export class EqualityExpression implements SlangNode { +export class EqualityExpression extends SlangNode { readonly kind = NonterminalKind.EqualityExpression; - comments; - - loc; - leftOperand: Expression; operator: string; @@ -33,16 +29,13 @@ export class EqualityExpression implements SlangNode { rightOperand: Expression; constructor(ast: ast.EqualityExpression, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.leftOperand = new Expression(ast.leftOperand, options); this.operator = ast.operator.unparse(); this.rightOperand = new Expression(ast.rightOperand, options); - updateMetadata(this.loc, this.comments, [ - this.leftOperand, - this.rightOperand - ]); + this.updateMetadata([this.leftOperand, this.rightOperand]); this.leftOperand = tryToHug(this.leftOperand); } diff --git a/src/slang-nodes/ErrorDefinition.ts b/src/slang-nodes/ErrorDefinition.ts index 8a5162372..92f5df12f 100644 --- a/src/slang-nodes/ErrorDefinition.ts +++ b/src/slang-nodes/ErrorDefinition.ts @@ -1,31 +1,27 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { Identifier } from './Identifier.js'; import { ErrorParametersDeclaration } from './ErrorParametersDeclaration.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class ErrorDefinition implements SlangNode { +export class ErrorDefinition extends SlangNode { readonly kind = NonterminalKind.ErrorDefinition; - comments; - - loc; - name: Identifier; members: ErrorParametersDeclaration; constructor(ast: ast.ErrorDefinition, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.name = new Identifier(ast.name); this.members = new ErrorParametersDeclaration(ast.members, options); - updateMetadata(this.loc, this.comments, [this.members]); + this.updateMetadata([this.members]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ErrorParameter.ts b/src/slang-nodes/ErrorParameter.ts index ee4d74ed1..8f9bfc820 100644 --- a/src/slang-nodes/ErrorParameter.ts +++ b/src/slang-nodes/ErrorParameter.ts @@ -1,5 +1,5 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { joinExisting } from '../slang-utils/join-existing.js'; import { TypeName } from './TypeName.js'; import { Identifier } from './Identifier.js'; @@ -7,28 +7,24 @@ import { Identifier } from './Identifier.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class ErrorParameter implements SlangNode { +export class ErrorParameter extends SlangNode { readonly kind = NonterminalKind.ErrorParameter; - comments; - - loc; - typeName: TypeName; name?: Identifier; constructor(ast: ast.ErrorParameter, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.typeName = new TypeName(ast.typeName, options); if (ast.name) { this.name = new Identifier(ast.name); } - updateMetadata(this.loc, this.comments, [this.typeName]); + this.updateMetadata([this.typeName]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ErrorParameters.ts b/src/slang-nodes/ErrorParameters.ts index 742d19e0e..44b0cb198 100644 --- a/src/slang-nodes/ErrorParameters.ts +++ b/src/slang-nodes/ErrorParameters.ts @@ -1,28 +1,24 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { printSeparatedList } from '../slang-printers/print-separated-list.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { ErrorParameter } from './ErrorParameter.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class ErrorParameters implements SlangNode { +export class ErrorParameters extends SlangNode { readonly kind = NonterminalKind.ErrorParameters; - comments; - - loc; - items: ErrorParameter[]; constructor(ast: ast.ErrorParameters, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast, true); + super(ast, true); this.items = ast.items.map((item) => new ErrorParameter(item, options)); - updateMetadata(this.loc, this.comments, [this.items]); + this.updateMetadata([this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ErrorParametersDeclaration.ts b/src/slang-nodes/ErrorParametersDeclaration.ts index 55576315b..b8846fdd6 100644 --- a/src/slang-nodes/ErrorParametersDeclaration.ts +++ b/src/slang-nodes/ErrorParametersDeclaration.ts @@ -1,30 +1,26 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { ErrorParameters } from './ErrorParameters.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class ErrorParametersDeclaration implements SlangNode { +export class ErrorParametersDeclaration extends SlangNode { readonly kind = NonterminalKind.ErrorParametersDeclaration; - comments; - - loc; - parameters: ErrorParameters; constructor( ast: ast.ErrorParametersDeclaration, options: ParserOptions ) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.parameters = new ErrorParameters(ast.parameters, options); - updateMetadata(this.loc, this.comments, [this.parameters]); + this.updateMetadata([this.parameters]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/EventDefinition.ts b/src/slang-nodes/EventDefinition.ts index 0969cf597..3ab004fe0 100644 --- a/src/slang-nodes/EventDefinition.ts +++ b/src/slang-nodes/EventDefinition.ts @@ -1,20 +1,16 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { EventParametersDeclaration } from './EventParametersDeclaration.js'; import { Identifier } from './Identifier.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class EventDefinition implements SlangNode { +export class EventDefinition extends SlangNode { readonly kind = NonterminalKind.EventDefinition; - comments; - - loc; - name: Identifier; parameters: EventParametersDeclaration; @@ -22,13 +18,13 @@ export class EventDefinition implements SlangNode { anonymousKeyword?: string; constructor(ast: ast.EventDefinition, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.name = new Identifier(ast.name); this.parameters = new EventParametersDeclaration(ast.parameters, options); this.anonymousKeyword = ast.anonymousKeyword?.unparse(); - updateMetadata(this.loc, this.comments, [this.parameters]); + this.updateMetadata([this.parameters]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/EventParameter.ts b/src/slang-nodes/EventParameter.ts index b997b067c..5fbfffbfa 100644 --- a/src/slang-nodes/EventParameter.ts +++ b/src/slang-nodes/EventParameter.ts @@ -1,5 +1,5 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { joinExisting } from '../slang-utils/join-existing.js'; import { TypeName } from './TypeName.js'; import { Identifier } from './Identifier.js'; @@ -7,15 +7,11 @@ import { Identifier } from './Identifier.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class EventParameter implements SlangNode { +export class EventParameter extends SlangNode { readonly kind = NonterminalKind.EventParameter; - comments; - - loc; - typeName: TypeName; indexedKeyword?: string; @@ -23,7 +19,7 @@ export class EventParameter implements SlangNode { name?: Identifier; constructor(ast: ast.EventParameter, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.typeName = new TypeName(ast.typeName, options); this.indexedKeyword = ast.indexedKeyword?.unparse(); @@ -31,7 +27,7 @@ export class EventParameter implements SlangNode { this.name = new Identifier(ast.name); } - updateMetadata(this.loc, this.comments, [this.typeName]); + this.updateMetadata([this.typeName]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/EventParameters.ts b/src/slang-nodes/EventParameters.ts index c1b2f49a1..e2d462acb 100644 --- a/src/slang-nodes/EventParameters.ts +++ b/src/slang-nodes/EventParameters.ts @@ -1,28 +1,24 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { printSeparatedList } from '../slang-printers/print-separated-list.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { EventParameter } from './EventParameter.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class EventParameters implements SlangNode { +export class EventParameters extends SlangNode { readonly kind = NonterminalKind.EventParameters; - comments; - - loc; - items: EventParameter[]; constructor(ast: ast.EventParameters, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast, true); + super(ast, true); this.items = ast.items.map((item) => new EventParameter(item, options)); - updateMetadata(this.loc, this.comments, [this.items]); + this.updateMetadata([this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/EventParametersDeclaration.ts b/src/slang-nodes/EventParametersDeclaration.ts index 1c3f7d203..680db1e42 100644 --- a/src/slang-nodes/EventParametersDeclaration.ts +++ b/src/slang-nodes/EventParametersDeclaration.ts @@ -1,30 +1,26 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { EventParameters } from './EventParameters.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class EventParametersDeclaration implements SlangNode { +export class EventParametersDeclaration extends SlangNode { readonly kind = NonterminalKind.EventParametersDeclaration; - comments; - - loc; - parameters: EventParameters; constructor( ast: ast.EventParametersDeclaration, options: ParserOptions ) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.parameters = new EventParameters(ast.parameters, options); - updateMetadata(this.loc, this.comments, [this.parameters]); + this.updateMetadata([this.parameters]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ExperimentalFeature.ts b/src/slang-nodes/ExperimentalFeature.ts index d17a1c314..2d77fd8c2 100644 --- a/src/slang-nodes/ExperimentalFeature.ts +++ b/src/slang-nodes/ExperimentalFeature.ts @@ -3,35 +3,29 @@ import { TerminalKind, TerminalNode } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { StringLiteral } from './StringLiteral.js'; import { Identifier } from './Identifier.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class ExperimentalFeature implements SlangNode { +export class ExperimentalFeature extends SlangNode { readonly kind = NonterminalKind.ExperimentalFeature; - comments; - - loc; - variant: StringLiteral | Identifier; constructor(ast: ast.ExperimentalFeature, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.variant = ast.variant instanceof TerminalNode ? new Identifier(ast.variant) : new StringLiteral(ast.variant, options); - updateMetadata( - this.loc, - this.comments, + this.updateMetadata( this.variant.kind === TerminalKind.Identifier ? [] : [this.variant] ); } diff --git a/src/slang-nodes/ExperimentalPragma.ts b/src/slang-nodes/ExperimentalPragma.ts index 4ea874dcf..20e6c6acf 100644 --- a/src/slang-nodes/ExperimentalPragma.ts +++ b/src/slang-nodes/ExperimentalPragma.ts @@ -1,27 +1,23 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { ExperimentalFeature } from './ExperimentalFeature.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class ExperimentalPragma implements SlangNode { +export class ExperimentalPragma extends SlangNode { readonly kind = NonterminalKind.ExperimentalPragma; - comments; - - loc; - feature: ExperimentalFeature; constructor(ast: ast.ExperimentalPragma, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.feature = new ExperimentalFeature(ast.feature, options); - updateMetadata(this.loc, this.comments, [this.feature]); + this.updateMetadata([this.feature]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ExponentiationExpression.ts b/src/slang-nodes/ExponentiationExpression.ts index ade0cb3e6..c8ec727e3 100644 --- a/src/slang-nodes/ExponentiationExpression.ts +++ b/src/slang-nodes/ExponentiationExpression.ts @@ -4,13 +4,13 @@ import { createBinaryOperationPrinter } from '../slang-printers/create-binary-op import { binaryIndentRulesBuilder } from '../slang-printers/print-binary-operation.js'; import { createHugFunction } from '../slang-utils/create-hug-function.js'; import { createKindCheckFunction } from '../slang-utils/create-kind-check-function.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { Expression } from './Expression.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { group } = doc.builders; @@ -36,13 +36,9 @@ const printExponentiationExpression = createBinaryOperationPrinter( binaryIndentRulesBuilder(shouldIndent) // indent as a binary operation with some exceptions ); -export class ExponentiationExpression implements SlangNode { +export class ExponentiationExpression extends SlangNode { readonly kind = NonterminalKind.ExponentiationExpression; - comments; - - loc; - leftOperand: Expression; operator: string; @@ -53,16 +49,13 @@ export class ExponentiationExpression implements SlangNode { ast: ast.ExponentiationExpression, options: ParserOptions ) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.leftOperand = new Expression(ast.leftOperand, options); this.operator = ast.operator.unparse(); this.rightOperand = new Expression(ast.rightOperand, options); - updateMetadata(this.loc, this.comments, [ - this.leftOperand, - this.rightOperand - ]); + this.updateMetadata([this.leftOperand, this.rightOperand]); this.rightOperand = tryToHug(this.rightOperand); this.leftOperand = tryToHug(this.leftOperand); diff --git a/src/slang-nodes/Expression.ts b/src/slang-nodes/Expression.ts index fa7a6ea7d..d3d6f4740 100644 --- a/src/slang-nodes/Expression.ts +++ b/src/slang-nodes/Expression.ts @@ -3,7 +3,7 @@ import { TerminalKind, TerminalNode } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { AssignmentExpression } from './AssignmentExpression.js'; import { ConditionalExpression } from './ConditionalExpression.js'; import { OrExpression } from './OrExpression.js'; @@ -36,15 +36,11 @@ import { Identifier } from './Identifier.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class Expression implements SlangNode { +export class Expression extends SlangNode { readonly kind = NonterminalKind.Expression; - comments; - - loc; - variant: | AssignmentExpression | ConditionalExpression @@ -76,7 +72,7 @@ export class Expression implements SlangNode { | Identifier; constructor(ast: ast.Expression, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); if (ast.variant instanceof TerminalNode) { this.variant = new Identifier(ast.variant); @@ -244,9 +240,7 @@ export class Expression implements SlangNode { } } - updateMetadata( - this.loc, - this.comments, + this.updateMetadata( this.variant.kind === TerminalKind.Identifier ? [] : [this.variant] ); } diff --git a/src/slang-nodes/ExpressionStatement.ts b/src/slang-nodes/ExpressionStatement.ts index 3c4b04af4..8b4068ca8 100644 --- a/src/slang-nodes/ExpressionStatement.ts +++ b/src/slang-nodes/ExpressionStatement.ts @@ -1,27 +1,23 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { Expression } from './Expression.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class ExpressionStatement implements SlangNode { +export class ExpressionStatement extends SlangNode { readonly kind = NonterminalKind.ExpressionStatement; - comments; - - loc; - expression: Expression; constructor(ast: ast.ExpressionStatement, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.expression = new Expression(ast.expression, options); - updateMetadata(this.loc, this.comments, [this.expression]); + this.updateMetadata([this.expression]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/FallbackFunctionAttribute.ts b/src/slang-nodes/FallbackFunctionAttribute.ts index f3aa47780..a18eab700 100644 --- a/src/slang-nodes/FallbackFunctionAttribute.ts +++ b/src/slang-nodes/FallbackFunctionAttribute.ts @@ -1,27 +1,23 @@ import { NonterminalKind, TerminalNode } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { ModifierInvocation } from './ModifierInvocation.js'; import { OverrideSpecifier } from './OverrideSpecifier.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class FallbackFunctionAttribute implements SlangNode { +export class FallbackFunctionAttribute extends SlangNode { readonly kind = NonterminalKind.FallbackFunctionAttribute; - comments; - - loc; - variant: ModifierInvocation | OverrideSpecifier | string; constructor( ast: ast.FallbackFunctionAttribute, options: ParserOptions ) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); if (ast.variant instanceof TerminalNode) { this.variant = ast.variant.unparse(); @@ -43,11 +39,7 @@ export class FallbackFunctionAttribute implements SlangNode { } } - updateMetadata( - this.loc, - this.comments, - typeof this.variant === 'string' ? [] : [this.variant] - ); + this.updateMetadata(typeof this.variant === 'string' ? [] : [this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/FallbackFunctionAttributes.ts b/src/slang-nodes/FallbackFunctionAttributes.ts index 65917ac23..e40df692d 100644 --- a/src/slang-nodes/FallbackFunctionAttributes.ts +++ b/src/slang-nodes/FallbackFunctionAttributes.ts @@ -1,36 +1,32 @@ import { doc } from 'prettier'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { sortFunctionAttributes } from '../slang-utils/sort-function-attributes.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { FallbackFunctionAttribute } from './FallbackFunctionAttribute.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { line } = doc.builders; -export class FallbackFunctionAttributes implements SlangNode { +export class FallbackFunctionAttributes extends SlangNode { readonly kind = NonterminalKind.FallbackFunctionAttributes; - comments; - - loc; - items: FallbackFunctionAttribute[]; constructor( ast: ast.FallbackFunctionAttributes, options: ParserOptions ) { - [this.loc, this.comments] = getNodeMetadata(ast, true); + super(ast, true); this.items = ast.items.map( (item) => new FallbackFunctionAttribute(item, options) ); - updateMetadata(this.loc, this.comments, [this.items]); + this.updateMetadata([this.items]); this.items = this.items.sort(sortFunctionAttributes); } diff --git a/src/slang-nodes/FallbackFunctionDefinition.ts b/src/slang-nodes/FallbackFunctionDefinition.ts index 2e1ef38c1..f07c8cfd5 100644 --- a/src/slang-nodes/FallbackFunctionDefinition.ts +++ b/src/slang-nodes/FallbackFunctionDefinition.ts @@ -1,6 +1,6 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { printFunction } from '../slang-printers/print-function.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { ParametersDeclaration } from './ParametersDeclaration.js'; import { FallbackFunctionAttributes } from './FallbackFunctionAttributes.js'; import { ReturnsDeclaration } from './ReturnsDeclaration.js'; @@ -9,15 +9,11 @@ import { FunctionBody } from './FunctionBody.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class FallbackFunctionDefinition implements SlangNode { +export class FallbackFunctionDefinition extends SlangNode { readonly kind = NonterminalKind.FallbackFunctionDefinition; - comments; - - loc; - parameters: ParametersDeclaration; attributes: FallbackFunctionAttributes; @@ -30,7 +26,7 @@ export class FallbackFunctionDefinition implements SlangNode { ast: ast.FallbackFunctionDefinition, options: ParserOptions ) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.parameters = new ParametersDeclaration(ast.parameters, options); this.attributes = new FallbackFunctionAttributes(ast.attributes, options); @@ -39,7 +35,7 @@ export class FallbackFunctionDefinition implements SlangNode { } this.body = new FunctionBody(ast.body, options); - updateMetadata(this.loc, this.comments, [ + this.updateMetadata([ this.parameters, this.attributes, this.returns, diff --git a/src/slang-nodes/ForStatement.ts b/src/slang-nodes/ForStatement.ts index 8b5a48fc7..59ee5ed02 100644 --- a/src/slang-nodes/ForStatement.ts +++ b/src/slang-nodes/ForStatement.ts @@ -1,7 +1,7 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { doc } from 'prettier'; import { printSeparatedList } from '../slang-printers/print-separated-list.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { ForStatementInitialization } from './ForStatementInitialization.js'; import { ForStatementCondition } from './ForStatementCondition.js'; import { Expression } from './Expression.js'; @@ -10,17 +10,13 @@ import { Statement } from './Statement.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { group, indent, line } = doc.builders; -export class ForStatement implements SlangNode { +export class ForStatement extends SlangNode { readonly kind = NonterminalKind.ForStatement; - comments; - - loc; - initialization: ForStatementInitialization; condition: ForStatementCondition; @@ -30,7 +26,7 @@ export class ForStatement implements SlangNode { body: Statement; constructor(ast: ast.ForStatement, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.initialization = new ForStatementInitialization( ast.initialization, @@ -42,7 +38,7 @@ export class ForStatement implements SlangNode { } this.body = new Statement(ast.body, options); - updateMetadata(this.loc, this.comments, [ + this.updateMetadata([ this.initialization, this.condition, this.iterator, diff --git a/src/slang-nodes/ForStatementCondition.ts b/src/slang-nodes/ForStatementCondition.ts index 055b440ae..9f6c5d5a8 100644 --- a/src/slang-nodes/ForStatementCondition.ts +++ b/src/slang-nodes/ForStatementCondition.ts @@ -1,34 +1,26 @@ import { NonterminalKind, TerminalNode } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { ExpressionStatement } from './ExpressionStatement.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class ForStatementCondition implements SlangNode { +export class ForStatementCondition extends SlangNode { readonly kind = NonterminalKind.ForStatementCondition; - comments; - - loc; - variant: ExpressionStatement | string; constructor(ast: ast.ForStatementCondition, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.variant = ast.variant instanceof TerminalNode ? ast.variant.unparse() : new ExpressionStatement(ast.variant, options); - updateMetadata( - this.loc, - this.comments, - typeof this.variant === 'string' ? [] : [this.variant] - ); + this.updateMetadata(typeof this.variant === 'string' ? [] : [this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ForStatementInitialization.ts b/src/slang-nodes/ForStatementInitialization.ts index 5c76adb01..6bf221c1d 100644 --- a/src/slang-nodes/ForStatementInitialization.ts +++ b/src/slang-nodes/ForStatementInitialization.ts @@ -1,5 +1,5 @@ import { NonterminalKind, TerminalNode } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { ExpressionStatement } from './ExpressionStatement.js'; import { VariableDeclarationStatement } from './VariableDeclarationStatement.js'; import { TupleDeconstructionStatement } from './TupleDeconstructionStatement.js'; @@ -7,15 +7,11 @@ import { TupleDeconstructionStatement } from './TupleDeconstructionStatement.js' import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class ForStatementInitialization implements SlangNode { +export class ForStatementInitialization extends SlangNode { readonly kind = NonterminalKind.ForStatementInitialization; - comments; - - loc; - variant: | ExpressionStatement | VariableDeclarationStatement @@ -26,7 +22,7 @@ export class ForStatementInitialization implements SlangNode { ast: ast.ForStatementInitialization, options: ParserOptions ) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); if (ast.variant instanceof TerminalNode) { this.variant = ast.variant.unparse(); @@ -55,11 +51,7 @@ export class ForStatementInitialization implements SlangNode { } } - updateMetadata( - this.loc, - this.comments, - typeof this.variant === 'string' ? [] : [this.variant] - ); + this.updateMetadata(typeof this.variant === 'string' ? [] : [this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/FunctionAttribute.ts b/src/slang-nodes/FunctionAttribute.ts index b73e39c7e..6e9dd21bc 100644 --- a/src/slang-nodes/FunctionAttribute.ts +++ b/src/slang-nodes/FunctionAttribute.ts @@ -1,24 +1,20 @@ import { NonterminalKind, TerminalNode } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { ModifierInvocation } from './ModifierInvocation.js'; import { OverrideSpecifier } from './OverrideSpecifier.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class FunctionAttribute implements SlangNode { +export class FunctionAttribute extends SlangNode { readonly kind = NonterminalKind.FunctionAttribute; - comments; - - loc; - variant: ModifierInvocation | OverrideSpecifier | string; constructor(ast: ast.FunctionAttribute, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); if (ast.variant instanceof TerminalNode) { this.variant = ast.variant.unparse(); @@ -40,11 +36,7 @@ export class FunctionAttribute implements SlangNode { } } - updateMetadata( - this.loc, - this.comments, - typeof this.variant === 'string' ? [] : [this.variant] - ); + this.updateMetadata(typeof this.variant === 'string' ? [] : [this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/FunctionAttributes.ts b/src/slang-nodes/FunctionAttributes.ts index 32586dc27..60285c1ea 100644 --- a/src/slang-nodes/FunctionAttributes.ts +++ b/src/slang-nodes/FunctionAttributes.ts @@ -1,31 +1,27 @@ import { doc } from 'prettier'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { sortFunctionAttributes } from '../slang-utils/sort-function-attributes.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { FunctionAttribute } from './FunctionAttribute.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { line } = doc.builders; -export class FunctionAttributes implements SlangNode { +export class FunctionAttributes extends SlangNode { readonly kind = NonterminalKind.FunctionAttributes; - comments; - - loc; - items: FunctionAttribute[]; constructor(ast: ast.FunctionAttributes, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast, true); + super(ast, true); this.items = ast.items.map((item) => new FunctionAttribute(item, options)); - updateMetadata(this.loc, this.comments, [this.items]); + this.updateMetadata([this.items]); this.items = this.items.sort(sortFunctionAttributes); } diff --git a/src/slang-nodes/FunctionBody.ts b/src/slang-nodes/FunctionBody.ts index f8c42d0f4..f4c25d8b9 100644 --- a/src/slang-nodes/FunctionBody.ts +++ b/src/slang-nodes/FunctionBody.ts @@ -1,34 +1,26 @@ import { NonterminalKind, TerminalNode } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { Block } from './Block.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class FunctionBody implements SlangNode { +export class FunctionBody extends SlangNode { readonly kind = NonterminalKind.FunctionBody; - comments; - - loc; - variant: Block | string; constructor(ast: ast.FunctionBody, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.variant = ast.variant instanceof TerminalNode ? ast.variant.unparse() : new Block(ast.variant, options); - updateMetadata( - this.loc, - this.comments, - typeof this.variant === 'string' ? [] : [this.variant] - ); + this.updateMetadata(typeof this.variant === 'string' ? [] : [this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/FunctionCallExpression.ts b/src/slang-nodes/FunctionCallExpression.ts index 77f281343..922e9ca9d 100644 --- a/src/slang-nodes/FunctionCallExpression.ts +++ b/src/slang-nodes/FunctionCallExpression.ts @@ -1,24 +1,20 @@ import { doc } from 'prettier'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { isLabel } from '../slang-utils/is-label.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { Expression } from './Expression.js'; import { ArgumentsDeclaration } from './ArgumentsDeclaration.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { group, indentIfBreak, label } = doc.builders; -export class FunctionCallExpression implements SlangNode { +export class FunctionCallExpression extends SlangNode { readonly kind = NonterminalKind.FunctionCallExpression; - comments; - - loc; - operand: Expression; arguments: ArgumentsDeclaration; @@ -27,12 +23,12 @@ export class FunctionCallExpression implements SlangNode { ast: ast.FunctionCallExpression, options: ParserOptions ) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.operand = new Expression(ast.operand, options); this.arguments = new ArgumentsDeclaration(ast.arguments, options); - updateMetadata(this.loc, this.comments, [this.operand, this.arguments]); + this.updateMetadata([this.operand, this.arguments]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/FunctionDefinition.ts b/src/slang-nodes/FunctionDefinition.ts index 7c4e468a3..5e7c46a8b 100644 --- a/src/slang-nodes/FunctionDefinition.ts +++ b/src/slang-nodes/FunctionDefinition.ts @@ -1,7 +1,7 @@ import { satisfies } from 'semver'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { printFunction } from '../slang-printers/print-function.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { FunctionName } from './FunctionName.js'; import { ParametersDeclaration } from './ParametersDeclaration.js'; import { FunctionAttributes } from './FunctionAttributes.js'; @@ -11,15 +11,11 @@ import { FunctionBody } from './FunctionBody.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class FunctionDefinition implements SlangNode { +export class FunctionDefinition extends SlangNode { readonly kind = NonterminalKind.FunctionDefinition; - comments; - - loc; - name: FunctionName; parameters: ParametersDeclaration; @@ -31,7 +27,7 @@ export class FunctionDefinition implements SlangNode { body: FunctionBody; constructor(ast: ast.FunctionDefinition, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.name = new FunctionName(ast.name); this.parameters = new ParametersDeclaration(ast.parameters, options); @@ -41,7 +37,7 @@ export class FunctionDefinition implements SlangNode { } this.body = new FunctionBody(ast.body, options); - updateMetadata(this.loc, this.comments, [ + this.updateMetadata([ this.name, this.parameters, this.attributes, diff --git a/src/slang-nodes/FunctionName.ts b/src/slang-nodes/FunctionName.ts index 5f2cf6010..aadb33458 100644 --- a/src/slang-nodes/FunctionName.ts +++ b/src/slang-nodes/FunctionName.ts @@ -1,22 +1,18 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { Identifier } from './Identifier.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc } from 'prettier'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class FunctionName implements SlangNode { +export class FunctionName extends SlangNode { readonly kind = NonterminalKind.FunctionName; - comments; - - loc; - variant: Identifier; constructor(ast: ast.FunctionName) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.variant = new Identifier(ast.variant); } diff --git a/src/slang-nodes/FunctionType.ts b/src/slang-nodes/FunctionType.ts index 27d09294c..3e72314b1 100644 --- a/src/slang-nodes/FunctionType.ts +++ b/src/slang-nodes/FunctionType.ts @@ -1,6 +1,6 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { printFunction } from '../slang-printers/print-function.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { ParametersDeclaration } from './ParametersDeclaration.js'; import { FunctionTypeAttributes } from './FunctionTypeAttributes.js'; import { ReturnsDeclaration } from './ReturnsDeclaration.js'; @@ -8,15 +8,11 @@ import { ReturnsDeclaration } from './ReturnsDeclaration.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class FunctionType implements SlangNode { +export class FunctionType extends SlangNode { readonly kind = NonterminalKind.FunctionType; - comments; - - loc; - parameters: ParametersDeclaration; attributes: FunctionTypeAttributes; @@ -24,7 +20,7 @@ export class FunctionType implements SlangNode { returns?: ReturnsDeclaration; constructor(ast: ast.FunctionType, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.parameters = new ParametersDeclaration(ast.parameters, options); this.attributes = new FunctionTypeAttributes(ast.attributes); @@ -32,11 +28,7 @@ export class FunctionType implements SlangNode { this.returns = new ReturnsDeclaration(ast.returns, options); } - updateMetadata(this.loc, this.comments, [ - this.parameters, - this.attributes, - this.returns - ]); + this.updateMetadata([this.parameters, this.attributes, this.returns]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/FunctionTypeAttribute.ts b/src/slang-nodes/FunctionTypeAttribute.ts index e45f56219..a0c4efb8f 100644 --- a/src/slang-nodes/FunctionTypeAttribute.ts +++ b/src/slang-nodes/FunctionTypeAttribute.ts @@ -1,21 +1,16 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { Doc } from 'prettier'; -import type { SlangNode } from '../types.d.ts'; -export class FunctionTypeAttribute implements SlangNode { +export class FunctionTypeAttribute extends SlangNode { readonly kind = NonterminalKind.FunctionTypeAttribute; - comments; - - loc; - variant: string; constructor(ast: ast.FunctionTypeAttribute) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.variant = ast.variant.unparse(); } diff --git a/src/slang-nodes/FunctionTypeAttributes.ts b/src/slang-nodes/FunctionTypeAttributes.ts index bb244e2ef..f3613b186 100644 --- a/src/slang-nodes/FunctionTypeAttributes.ts +++ b/src/slang-nodes/FunctionTypeAttributes.ts @@ -1,30 +1,26 @@ import { doc } from 'prettier'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { sortFunctionAttributes } from '../slang-utils/sort-function-attributes.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { FunctionTypeAttribute } from './FunctionTypeAttribute.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc } from 'prettier'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { line } = doc.builders; -export class FunctionTypeAttributes implements SlangNode { +export class FunctionTypeAttributes extends SlangNode { readonly kind = NonterminalKind.FunctionTypeAttributes; - comments; - - loc; - items: FunctionTypeAttribute[]; constructor(ast: ast.FunctionTypeAttributes) { - [this.loc, this.comments] = getNodeMetadata(ast, true); + super(ast, true); this.items = ast.items.map((item) => new FunctionTypeAttribute(item)); - updateMetadata(this.loc, this.comments, [this.items]); + this.updateMetadata([this.items]); this.items = this.items.sort(sortFunctionAttributes); } diff --git a/src/slang-nodes/HexNumberExpression.ts b/src/slang-nodes/HexNumberExpression.ts index 01eab001c..b28033f66 100644 --- a/src/slang-nodes/HexNumberExpression.ts +++ b/src/slang-nodes/HexNumberExpression.ts @@ -1,32 +1,28 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { joinExisting } from '../slang-utils/join-existing.js'; import { NumberUnit } from './NumberUnit.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc } from 'prettier'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class HexNumberExpression implements SlangNode { +export class HexNumberExpression extends SlangNode { readonly kind = NonterminalKind.HexNumberExpression; - comments; - - loc; - literal: string; unit?: NumberUnit; constructor(ast: ast.HexNumberExpression) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.literal = ast.literal.unparse(); if (ast.unit) { this.unit = new NumberUnit(ast.unit); } - updateMetadata(this.loc, this.comments, [this.unit]); + this.updateMetadata([this.unit]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/HexStringLiteral.ts b/src/slang-nodes/HexStringLiteral.ts index 2656506ae..d2f0b767c 100644 --- a/src/slang-nodes/HexStringLiteral.ts +++ b/src/slang-nodes/HexStringLiteral.ts @@ -1,23 +1,18 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { printString } from '../slang-printers/print-string.js'; -import { getNodeMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { SlangNode } from '../types.d.ts'; -export class HexStringLiteral implements SlangNode { +export class HexStringLiteral extends SlangNode { readonly kind = NonterminalKind.HexStringLiteral; - comments; - - loc; - variant: string; constructor(ast: ast.HexStringLiteral, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.variant = ast.variant.unparse(); diff --git a/src/slang-nodes/HexStringLiterals.ts b/src/slang-nodes/HexStringLiterals.ts index ca099e261..01c9ee145 100644 --- a/src/slang-nodes/HexStringLiterals.ts +++ b/src/slang-nodes/HexStringLiterals.ts @@ -1,30 +1,26 @@ import { doc } from 'prettier'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { HexStringLiteral } from './HexStringLiteral.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { join, hardline } = doc.builders; -export class HexStringLiterals implements SlangNode { +export class HexStringLiterals extends SlangNode { readonly kind = NonterminalKind.HexStringLiterals; - comments; - - loc; - items: HexStringLiteral[]; constructor(ast: ast.HexStringLiterals, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast, true); + super(ast, true); this.items = ast.items.map((item) => new HexStringLiteral(item, options)); - updateMetadata(this.loc, this.comments, [this.items]); + this.updateMetadata([this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/Identifier.ts b/src/slang-nodes/Identifier.ts index 74491dcba..4adeef1b0 100644 --- a/src/slang-nodes/Identifier.ts +++ b/src/slang-nodes/Identifier.ts @@ -1,21 +1,15 @@ import { TerminalKind, TerminalNode } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import type { Doc } from 'prettier'; -import type { Location, SlangNode } from '../types.d.ts'; -import type { Comment } from './types.d.ts'; -export class Identifier implements SlangNode { +export class Identifier extends SlangNode { readonly kind = TerminalKind.Identifier; - comments: Comment[]; - - loc: Location; - value: string; constructor(ast: TerminalNode) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.value = ast.unparse(); } diff --git a/src/slang-nodes/IdentifierPath.ts b/src/slang-nodes/IdentifierPath.ts index 0ebcf4cf1..5406c7909 100644 --- a/src/slang-nodes/IdentifierPath.ts +++ b/src/slang-nodes/IdentifierPath.ts @@ -1,25 +1,21 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { doc } from 'prettier'; -import { getNodeMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { Identifier } from './Identifier.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc } from 'prettier'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { join } = doc.builders; -export class IdentifierPath implements SlangNode { +export class IdentifierPath extends SlangNode { readonly kind = NonterminalKind.IdentifierPath; - comments; - - loc; - items: Identifier[]; constructor(ast: ast.IdentifierPath) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.items = ast.items.map((item) => new Identifier(item)); } diff --git a/src/slang-nodes/IfStatement.ts b/src/slang-nodes/IfStatement.ts index f26333c9b..9d84a54fa 100644 --- a/src/slang-nodes/IfStatement.ts +++ b/src/slang-nodes/IfStatement.ts @@ -1,7 +1,7 @@ import { doc } from 'prettier'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { printSeparatedItem } from '../slang-printers/print-separated-item.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { isBlockComment } from '../slang-utils/is-comment.js'; import { Expression } from './Expression.js'; import { Statement } from './Statement.js'; @@ -10,17 +10,13 @@ import { ElseBranch } from './ElseBranch.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { group, hardline, indent, line } = doc.builders; -export class IfStatement implements SlangNode { +export class IfStatement extends SlangNode { readonly kind = NonterminalKind.IfStatement; - comments; - - loc; - condition: Expression; body: Statement; @@ -28,7 +24,7 @@ export class IfStatement implements SlangNode { elseBranch?: ElseBranch; constructor(ast: ast.IfStatement, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.condition = new Expression(ast.condition, options); this.body = new Statement(ast.body, options); @@ -36,11 +32,7 @@ export class IfStatement implements SlangNode { this.elseBranch = new ElseBranch(ast.elseBranch, options); } - updateMetadata(this.loc, this.comments, [ - this.condition, - this.body, - this.elseBranch - ]); + this.updateMetadata([this.condition, this.body, this.elseBranch]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ImportAlias.ts b/src/slang-nodes/ImportAlias.ts index ba9b47608..0287674d5 100644 --- a/src/slang-nodes/ImportAlias.ts +++ b/src/slang-nodes/ImportAlias.ts @@ -1,22 +1,18 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { Identifier } from './Identifier.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc } from 'prettier'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class ImportAlias implements SlangNode { +export class ImportAlias extends SlangNode { readonly kind = NonterminalKind.ImportAlias; - comments; - - loc; - identifier: Identifier; constructor(ast: ast.ImportAlias) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.identifier = new Identifier(ast.identifier); } diff --git a/src/slang-nodes/ImportClause.ts b/src/slang-nodes/ImportClause.ts index 95675f7c8..819e2fb56 100644 --- a/src/slang-nodes/ImportClause.ts +++ b/src/slang-nodes/ImportClause.ts @@ -1,5 +1,5 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { PathImport } from './PathImport.js'; import { NamedImport } from './NamedImport.js'; import { ImportDeconstruction } from './ImportDeconstruction.js'; @@ -7,19 +7,15 @@ import { ImportDeconstruction } from './ImportDeconstruction.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class ImportClause implements SlangNode { +export class ImportClause extends SlangNode { readonly kind = NonterminalKind.ImportClause; - comments; - - loc; - variant: PathImport | NamedImport | ImportDeconstruction; constructor(ast: ast.ImportClause, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); switch (ast.variant.cst.kind) { case NonterminalKind.PathImport: @@ -38,7 +34,7 @@ export class ImportClause implements SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - updateMetadata(this.loc, this.comments, [this.variant]); + this.updateMetadata([this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ImportDeconstruction.ts b/src/slang-nodes/ImportDeconstruction.ts index 3de3fd791..8047056e7 100644 --- a/src/slang-nodes/ImportDeconstruction.ts +++ b/src/slang-nodes/ImportDeconstruction.ts @@ -1,31 +1,27 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { ImportDeconstructionSymbols } from './ImportDeconstructionSymbols.js'; import { StringLiteral } from './StringLiteral.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class ImportDeconstruction implements SlangNode { +export class ImportDeconstruction extends SlangNode { readonly kind = NonterminalKind.ImportDeconstruction; - comments; - - loc; - symbols: ImportDeconstructionSymbols; path: StringLiteral; constructor(ast: ast.ImportDeconstruction, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.symbols = new ImportDeconstructionSymbols(ast.symbols); this.path = new StringLiteral(ast.path, options); - updateMetadata(this.loc, this.comments, [this.symbols, this.path]); + this.updateMetadata([this.symbols, this.path]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ImportDeconstructionSymbol.ts b/src/slang-nodes/ImportDeconstructionSymbol.ts index 2086aae61..ea04f8eb8 100644 --- a/src/slang-nodes/ImportDeconstructionSymbol.ts +++ b/src/slang-nodes/ImportDeconstructionSymbol.ts @@ -1,32 +1,28 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { Identifier } from './Identifier.js'; import { ImportAlias } from './ImportAlias.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc } from 'prettier'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class ImportDeconstructionSymbol implements SlangNode { +export class ImportDeconstructionSymbol extends SlangNode { readonly kind = NonterminalKind.ImportDeconstructionSymbol; - comments; - - loc; - name: Identifier; alias?: ImportAlias; constructor(ast: ast.ImportDeconstructionSymbol) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.name = new Identifier(ast.name); if (ast.alias) { this.alias = new ImportAlias(ast.alias); } - updateMetadata(this.loc, this.comments, [this.alias]); + this.updateMetadata([this.alias]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ImportDeconstructionSymbols.ts b/src/slang-nodes/ImportDeconstructionSymbols.ts index b7f66bf3e..c51a67751 100644 --- a/src/slang-nodes/ImportDeconstructionSymbols.ts +++ b/src/slang-nodes/ImportDeconstructionSymbols.ts @@ -2,31 +2,27 @@ import { doc } from 'prettier'; import { satisfies } from 'semver'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { printSeparatedList } from '../slang-printers/print-separated-list.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { ImportDeconstructionSymbol } from './ImportDeconstructionSymbol.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { line, softline } = doc.builders; -export class ImportDeconstructionSymbols implements SlangNode { +export class ImportDeconstructionSymbols extends SlangNode { readonly kind = NonterminalKind.ImportDeconstructionSymbols; - comments; - - loc; - items: ImportDeconstructionSymbol[]; constructor(ast: ast.ImportDeconstructionSymbols) { - [this.loc, this.comments] = getNodeMetadata(ast, true); + super(ast, true); this.items = ast.items.map((item) => new ImportDeconstructionSymbol(item)); - updateMetadata(this.loc, this.comments, [this.items]); + this.updateMetadata([this.items]); } print( diff --git a/src/slang-nodes/ImportDirective.ts b/src/slang-nodes/ImportDirective.ts index f01473779..798214248 100644 --- a/src/slang-nodes/ImportDirective.ts +++ b/src/slang-nodes/ImportDirective.ts @@ -1,27 +1,23 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { ImportClause } from './ImportClause.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class ImportDirective implements SlangNode { +export class ImportDirective extends SlangNode { readonly kind = NonterminalKind.ImportDirective; - comments; - - loc; - clause: ImportClause; constructor(ast: ast.ImportDirective, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.clause = new ImportClause(ast.clause, options); - updateMetadata(this.loc, this.comments, [this.clause]); + this.updateMetadata([this.clause]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/IndexAccessEnd.ts b/src/slang-nodes/IndexAccessEnd.ts index 18deee3fb..333511599 100644 --- a/src/slang-nodes/IndexAccessEnd.ts +++ b/src/slang-nodes/IndexAccessEnd.ts @@ -1,29 +1,25 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { Expression } from './Expression.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class IndexAccessEnd implements SlangNode { +export class IndexAccessEnd extends SlangNode { readonly kind = NonterminalKind.IndexAccessEnd; - comments; - - loc; - end?: Expression; constructor(ast: ast.IndexAccessEnd, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); if (ast.end) { this.end = new Expression(ast.end, options); } - updateMetadata(this.loc, this.comments, [this.end]); + this.updateMetadata([this.end]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/IndexAccessExpression.ts b/src/slang-nodes/IndexAccessExpression.ts index 39cb542be..13ca3ee5b 100644 --- a/src/slang-nodes/IndexAccessExpression.ts +++ b/src/slang-nodes/IndexAccessExpression.ts @@ -2,24 +2,20 @@ import { doc } from 'prettier'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { printSeparatedItem } from '../slang-printers/print-separated-item.js'; import { isLabel } from '../slang-utils/is-label.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { Expression } from './Expression.js'; import { IndexAccessEnd } from './IndexAccessEnd.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { group, indentIfBreak, label } = doc.builders; -export class IndexAccessExpression implements SlangNode { +export class IndexAccessExpression extends SlangNode { readonly kind = NonterminalKind.IndexAccessExpression; - comments; - - loc; - operand: Expression; start?: Expression; @@ -27,7 +23,7 @@ export class IndexAccessExpression implements SlangNode { end?: IndexAccessEnd; constructor(ast: ast.IndexAccessExpression, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.operand = new Expression(ast.operand, options); if (ast.start) { @@ -37,11 +33,7 @@ export class IndexAccessExpression implements SlangNode { this.end = new IndexAccessEnd(ast.end, options); } - updateMetadata(this.loc, this.comments, [ - this.operand, - this.start, - this.end - ]); + this.updateMetadata([this.operand, this.start, this.end]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/InequalityExpression.ts b/src/slang-nodes/InequalityExpression.ts index 305ad9ed7..03e751244 100644 --- a/src/slang-nodes/InequalityExpression.ts +++ b/src/slang-nodes/InequalityExpression.ts @@ -1,13 +1,13 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { createKindCheckFunction } from '../slang-utils/create-kind-check-function.js'; import { printBinaryOperation } from '../slang-printers/print-binary-operation.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { Expression } from './Expression.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const printComparisonExpression = printBinaryOperation( createKindCheckFunction([ @@ -17,13 +17,9 @@ const printComparisonExpression = printBinaryOperation( ]) ); -export class InequalityExpression implements SlangNode { +export class InequalityExpression extends SlangNode { readonly kind = NonterminalKind.InequalityExpression; - comments; - - loc; - leftOperand: Expression; operator: string; @@ -31,16 +27,13 @@ export class InequalityExpression implements SlangNode { rightOperand: Expression; constructor(ast: ast.InequalityExpression, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.leftOperand = new Expression(ast.leftOperand, options); this.operator = ast.operator.unparse(); this.rightOperand = new Expression(ast.rightOperand, options); - updateMetadata(this.loc, this.comments, [ - this.leftOperand, - this.rightOperand - ]); + this.updateMetadata([this.leftOperand, this.rightOperand]); } print( diff --git a/src/slang-nodes/InheritanceSpecifier.ts b/src/slang-nodes/InheritanceSpecifier.ts index 671799a3b..2c51432b5 100644 --- a/src/slang-nodes/InheritanceSpecifier.ts +++ b/src/slang-nodes/InheritanceSpecifier.ts @@ -1,27 +1,23 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { InheritanceTypes } from './InheritanceTypes.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class InheritanceSpecifier implements SlangNode { +export class InheritanceSpecifier extends SlangNode { readonly kind = NonterminalKind.InheritanceSpecifier; - comments; - - loc; - types: InheritanceTypes; constructor(ast: ast.InheritanceSpecifier, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.types = new InheritanceTypes(ast.types, options); - updateMetadata(this.loc, this.comments, [this.types]); + this.updateMetadata([this.types]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/InheritanceType.ts b/src/slang-nodes/InheritanceType.ts index 6d889d6bd..93ee8aa8c 100644 --- a/src/slang-nodes/InheritanceType.ts +++ b/src/slang-nodes/InheritanceType.ts @@ -1,33 +1,29 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { IdentifierPath } from './IdentifierPath.js'; import { ArgumentsDeclaration } from './ArgumentsDeclaration.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class InheritanceType implements SlangNode { +export class InheritanceType extends SlangNode { readonly kind = NonterminalKind.InheritanceType; - comments; - - loc; - typeName: IdentifierPath; arguments?: ArgumentsDeclaration; constructor(ast: ast.InheritanceType, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.typeName = new IdentifierPath(ast.typeName); if (ast.arguments) { this.arguments = new ArgumentsDeclaration(ast.arguments, options); } - updateMetadata(this.loc, this.comments, [this.typeName, this.arguments]); + this.updateMetadata([this.typeName, this.arguments]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/InheritanceTypes.ts b/src/slang-nodes/InheritanceTypes.ts index a5d6d302d..ea1339cf7 100644 --- a/src/slang-nodes/InheritanceTypes.ts +++ b/src/slang-nodes/InheritanceTypes.ts @@ -1,31 +1,27 @@ import { doc } from 'prettier'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { printSeparatedList } from '../slang-printers/print-separated-list.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { InheritanceType } from './InheritanceType.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { line } = doc.builders; -export class InheritanceTypes implements SlangNode { +export class InheritanceTypes extends SlangNode { readonly kind = NonterminalKind.InheritanceTypes; - comments; - - loc; - items: InheritanceType[]; constructor(ast: ast.InheritanceTypes, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast, true); + super(ast, true); this.items = ast.items.map((item) => new InheritanceType(item, options)); - updateMetadata(this.loc, this.comments, [this.items]); + this.updateMetadata([this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/InterfaceDefinition.ts b/src/slang-nodes/InterfaceDefinition.ts index 4744c7248..4a4857ee3 100644 --- a/src/slang-nodes/InterfaceDefinition.ts +++ b/src/slang-nodes/InterfaceDefinition.ts @@ -1,6 +1,6 @@ import { doc } from 'prettier'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { Identifier } from './Identifier.js'; import { InheritanceSpecifier } from './InheritanceSpecifier.js'; import { InterfaceMembers } from './InterfaceMembers.js'; @@ -8,17 +8,13 @@ import { InterfaceMembers } from './InterfaceMembers.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { group, line } = doc.builders; -export class InterfaceDefinition implements SlangNode { +export class InterfaceDefinition extends SlangNode { readonly kind = NonterminalKind.InterfaceDefinition; - comments; - - loc; - name: Identifier; inheritance?: InheritanceSpecifier; @@ -26,7 +22,7 @@ export class InterfaceDefinition implements SlangNode { members: InterfaceMembers; constructor(ast: ast.InterfaceDefinition, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.name = new Identifier(ast.name); if (ast.inheritance) { @@ -34,7 +30,7 @@ export class InterfaceDefinition implements SlangNode { } this.members = new InterfaceMembers(ast.members, options); - updateMetadata(this.loc, this.comments, [this.inheritance, this.members]); + this.updateMetadata([this.inheritance, this.members]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/InterfaceMembers.ts b/src/slang-nodes/InterfaceMembers.ts index f971ad531..384a9763e 100644 --- a/src/slang-nodes/InterfaceMembers.ts +++ b/src/slang-nodes/InterfaceMembers.ts @@ -2,31 +2,27 @@ import { doc } from 'prettier'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { printSeparatedItem } from '../slang-printers/print-separated-item.js'; import { printPreservingEmptyLines } from '../slang-printers/print-preserving-empty-lines.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { ContractMember } from './ContractMember.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { hardline } = doc.builders; -export class InterfaceMembers implements SlangNode { +export class InterfaceMembers extends SlangNode { readonly kind = NonterminalKind.InterfaceMembers; - comments; - - loc; - items: ContractMember[]; constructor(ast: ast.InterfaceMembers, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast, true); + super(ast, true); this.items = ast.items.map((item) => new ContractMember(item, options)); - updateMetadata(this.loc, this.comments, [this.items]); + this.updateMetadata([this.items]); } print( diff --git a/src/slang-nodes/LibraryDefinition.ts b/src/slang-nodes/LibraryDefinition.ts index 9dab457f4..53c09a94a 100644 --- a/src/slang-nodes/LibraryDefinition.ts +++ b/src/slang-nodes/LibraryDefinition.ts @@ -1,34 +1,30 @@ import { doc } from 'prettier'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { Identifier } from './Identifier.js'; import { LibraryMembers } from './LibraryMembers.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { group, line } = doc.builders; -export class LibraryDefinition implements SlangNode { +export class LibraryDefinition extends SlangNode { readonly kind = NonterminalKind.LibraryDefinition; - comments; - - loc; - name: Identifier; members: LibraryMembers; constructor(ast: ast.LibraryDefinition, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.name = new Identifier(ast.name); this.members = new LibraryMembers(ast.members, options); - updateMetadata(this.loc, this.comments, [this.members]); + this.updateMetadata([this.members]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/LibraryMembers.ts b/src/slang-nodes/LibraryMembers.ts index 3483f7bae..ce888a472 100644 --- a/src/slang-nodes/LibraryMembers.ts +++ b/src/slang-nodes/LibraryMembers.ts @@ -2,31 +2,27 @@ import { doc } from 'prettier'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { printSeparatedItem } from '../slang-printers/print-separated-item.js'; import { printPreservingEmptyLines } from '../slang-printers/print-preserving-empty-lines.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { ContractMember } from './ContractMember.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { hardline } = doc.builders; -export class LibraryMembers implements SlangNode { +export class LibraryMembers extends SlangNode { readonly kind = NonterminalKind.LibraryMembers; - comments; - - loc; - items: ContractMember[]; constructor(ast: ast.LibraryMembers, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast, true); + super(ast, true); this.items = ast.items.map((item) => new ContractMember(item, options)); - updateMetadata(this.loc, this.comments, [this.items]); + this.updateMetadata([this.items]); } print( diff --git a/src/slang-nodes/MappingKey.ts b/src/slang-nodes/MappingKey.ts index ca5e51199..a07786c67 100644 --- a/src/slang-nodes/MappingKey.ts +++ b/src/slang-nodes/MappingKey.ts @@ -1,33 +1,29 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { joinExisting } from '../slang-utils/join-existing.js'; import { MappingKeyType } from './MappingKeyType.js'; import { Identifier } from './Identifier.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc } from 'prettier'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class MappingKey implements SlangNode { +export class MappingKey extends SlangNode { readonly kind = NonterminalKind.MappingKey; - comments; - - loc; - keyType: MappingKeyType; name?: Identifier; constructor(ast: ast.MappingKey) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.keyType = new MappingKeyType(ast.keyType); if (ast.name) { this.name = new Identifier(ast.name); } - updateMetadata(this.loc, this.comments, [this.keyType]); + this.updateMetadata([this.keyType]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/MappingKeyType.ts b/src/slang-nodes/MappingKeyType.ts index 1da0cf0d8..675795238 100644 --- a/src/slang-nodes/MappingKeyType.ts +++ b/src/slang-nodes/MappingKeyType.ts @@ -1,23 +1,19 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { ElementaryType } from './ElementaryType.js'; import { IdentifierPath } from './IdentifierPath.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc } from 'prettier'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class MappingKeyType implements SlangNode { +export class MappingKeyType extends SlangNode { readonly kind = NonterminalKind.MappingKeyType; - comments; - - loc; - variant: ElementaryType | IdentifierPath; constructor(ast: ast.MappingKeyType) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); switch (ast.variant.cst.kind) { case NonterminalKind.ElementaryType: @@ -30,7 +26,7 @@ export class MappingKeyType implements SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - updateMetadata(this.loc, this.comments, [this.variant]); + this.updateMetadata([this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/MappingType.ts b/src/slang-nodes/MappingType.ts index 9e47d7140..78b14e06d 100644 --- a/src/slang-nodes/MappingType.ts +++ b/src/slang-nodes/MappingType.ts @@ -1,31 +1,27 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { MappingKey } from './MappingKey.js'; import { MappingValue } from './MappingValue.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class MappingType implements SlangNode { +export class MappingType extends SlangNode { readonly kind = NonterminalKind.MappingType; - comments; - - loc; - keyType: MappingKey; valueType: MappingValue; constructor(ast: ast.MappingType, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.keyType = new MappingKey(ast.keyType); this.valueType = new MappingValue(ast.valueType, options); - updateMetadata(this.loc, this.comments, [this.keyType, this.valueType]); + this.updateMetadata([this.keyType, this.valueType]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/MappingValue.ts b/src/slang-nodes/MappingValue.ts index 603632aad..dd5a99fcf 100644 --- a/src/slang-nodes/MappingValue.ts +++ b/src/slang-nodes/MappingValue.ts @@ -1,5 +1,5 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { joinExisting } from '../slang-utils/join-existing.js'; import { TypeName } from './TypeName.js'; import { Identifier } from './Identifier.js'; @@ -7,28 +7,24 @@ import { Identifier } from './Identifier.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class MappingValue implements SlangNode { +export class MappingValue extends SlangNode { readonly kind = NonterminalKind.MappingValue; - comments; - - loc; - typeName: TypeName; name?: Identifier; constructor(ast: ast.MappingValue, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.typeName = new TypeName(ast.typeName, options); if (ast.name) { this.name = new Identifier(ast.name); } - updateMetadata(this.loc, this.comments, [this.typeName]); + this.updateMetadata([this.typeName]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/MemberAccessExpression.ts b/src/slang-nodes/MemberAccessExpression.ts index 9ecca885f..2a0e7dbcd 100644 --- a/src/slang-nodes/MemberAccessExpression.ts +++ b/src/slang-nodes/MemberAccessExpression.ts @@ -2,14 +2,14 @@ import { doc } from 'prettier'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { isLabel } from '../slang-utils/is-label.js'; import { createKindCheckFunction } from '../slang-utils/create-kind-check-function.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { Expression } from './Expression.js'; import { Identifier } from './Identifier.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode, StrictAstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { group, indent, label, softline } = doc.builders; @@ -111,13 +111,9 @@ function processChain(chain: Doc[]): Doc { ]); } -export class MemberAccessExpression implements SlangNode { +export class MemberAccessExpression extends SlangNode { readonly kind = NonterminalKind.MemberAccessExpression; - comments; - - loc; - operand: Expression; member: Identifier; @@ -126,12 +122,12 @@ export class MemberAccessExpression implements SlangNode { ast: ast.MemberAccessExpression, options: ParserOptions ) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.operand = new Expression(ast.operand, options); this.member = new Identifier(ast.member); - updateMetadata(this.loc, this.comments, [this.operand]); + this.updateMetadata([this.operand]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ModifierAttribute.ts b/src/slang-nodes/ModifierAttribute.ts index 3c6451794..21ff7a633 100644 --- a/src/slang-nodes/ModifierAttribute.ts +++ b/src/slang-nodes/ModifierAttribute.ts @@ -1,33 +1,25 @@ import { NonterminalKind, TerminalNode } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { OverrideSpecifier } from './OverrideSpecifier.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc } from 'prettier'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class ModifierAttribute implements SlangNode { +export class ModifierAttribute extends SlangNode { readonly kind = NonterminalKind.ModifierAttribute; - comments; - - loc; - variant: OverrideSpecifier | string; constructor(ast: ast.ModifierAttribute) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.variant = ast.variant instanceof TerminalNode ? ast.variant.unparse() : new OverrideSpecifier(ast.variant); - updateMetadata( - this.loc, - this.comments, - typeof this.variant === 'string' ? [] : [this.variant] - ); + this.updateMetadata(typeof this.variant === 'string' ? [] : [this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ModifierAttributes.ts b/src/slang-nodes/ModifierAttributes.ts index 780f04c2f..ef8ca5fc2 100644 --- a/src/slang-nodes/ModifierAttributes.ts +++ b/src/slang-nodes/ModifierAttributes.ts @@ -1,30 +1,26 @@ import { doc } from 'prettier'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { sortFunctionAttributes } from '../slang-utils/sort-function-attributes.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { ModifierAttribute } from './ModifierAttribute.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc } from 'prettier'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { line } = doc.builders; -export class ModifierAttributes implements SlangNode { +export class ModifierAttributes extends SlangNode { readonly kind = NonterminalKind.ModifierAttributes; - comments; - - loc; - items: ModifierAttribute[]; constructor(ast: ast.ModifierAttributes) { - [this.loc, this.comments] = getNodeMetadata(ast, true); + super(ast, true); this.items = ast.items.map((item) => new ModifierAttribute(item)); - updateMetadata(this.loc, this.comments, [this.items]); + this.updateMetadata([this.items]); this.items = this.items.sort(sortFunctionAttributes); } diff --git a/src/slang-nodes/ModifierDefinition.ts b/src/slang-nodes/ModifierDefinition.ts index ef731fdc0..f450d8793 100644 --- a/src/slang-nodes/ModifierDefinition.ts +++ b/src/slang-nodes/ModifierDefinition.ts @@ -1,6 +1,6 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { printFunction } from '../slang-printers/print-function.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { Identifier } from './Identifier.js'; import { ParametersDeclaration } from './ParametersDeclaration.js'; import { Parameters } from './Parameters.js'; @@ -10,15 +10,11 @@ import { FunctionBody } from './FunctionBody.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class ModifierDefinition implements SlangNode { +export class ModifierDefinition extends SlangNode { readonly kind = NonterminalKind.ModifierDefinition; - comments; - - loc; - name: Identifier; parameters?: ParametersDeclaration; @@ -28,7 +24,7 @@ export class ModifierDefinition implements SlangNode { body: FunctionBody; constructor(ast: ast.ModifierDefinition, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.name = new Identifier(ast.name); if (ast.parameters) { @@ -37,11 +33,7 @@ export class ModifierDefinition implements SlangNode { this.attributes = new ModifierAttributes(ast.attributes); this.body = new FunctionBody(ast.body, options); - updateMetadata(this.loc, this.comments, [ - this.parameters, - this.attributes, - this.body - ]); + this.updateMetadata([this.parameters, this.attributes, this.body]); if (!this.parameters) { const parametersOffset = diff --git a/src/slang-nodes/ModifierInvocation.ts b/src/slang-nodes/ModifierInvocation.ts index 777644e3e..acbb193ae 100644 --- a/src/slang-nodes/ModifierInvocation.ts +++ b/src/slang-nodes/ModifierInvocation.ts @@ -1,33 +1,29 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { IdentifierPath } from './IdentifierPath.js'; import { ArgumentsDeclaration } from './ArgumentsDeclaration.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class ModifierInvocation implements SlangNode { +export class ModifierInvocation extends SlangNode { readonly kind = NonterminalKind.ModifierInvocation; - comments; - - loc; - name: IdentifierPath; arguments?: ArgumentsDeclaration; constructor(ast: ast.ModifierInvocation, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.name = new IdentifierPath(ast.name); if (ast.arguments) { this.arguments = new ArgumentsDeclaration(ast.arguments, options); } - updateMetadata(this.loc, this.comments, [this.name, this.arguments]); + this.updateMetadata([this.name, this.arguments]); } cleanModifierInvocationArguments(): void { diff --git a/src/slang-nodes/MultiLineComment.ts b/src/slang-nodes/MultiLineComment.ts index 25786ffaf..307d89f7f 100644 --- a/src/slang-nodes/MultiLineComment.ts +++ b/src/slang-nodes/MultiLineComment.ts @@ -1,38 +1,20 @@ import { TerminalKind, TerminalNode } from '@nomicfoundation/slang/cst'; import { doc } from 'prettier'; -import { getNodeMetadata } from '../slang-utils/metadata.js'; +import { CommentNode } from './CommentNode.js'; import { isIndentableBlockComment } from '../slang-utils/is-indentable-block-comment.js'; import { printIndentableBlockComment } from '../slang-printers/print-indentable-block-comment.js'; import type { Doc } from 'prettier'; -import type { BaseComment, Location, SlangNode } from '../types.d.ts'; -import type { StrictAstNode } from './types.d.ts'; const { join, literalline } = doc.builders; -export class MultiLineComment implements SlangNode, BaseComment { +export class MultiLineComment extends CommentNode { readonly kind = TerminalKind.MultiLineComment; - loc: Location; - value: string; - leading?: boolean; - - trailing?: boolean; - - printed?: boolean; - - placement?: 'endOfLine' | 'ownLine' | 'remaining'; - - precedingNode?: StrictAstNode; - - enclosingNode?: StrictAstNode; - - followingNode?: StrictAstNode; - - constructor(ast: TerminalNode) { - [this.loc] = getNodeMetadata(ast); + constructor(ast: TerminalNode, offset: number) { + super(ast, offset); this.value = ast.unparse(); } diff --git a/src/slang-nodes/MultiLineNatSpecComment.ts b/src/slang-nodes/MultiLineNatSpecComment.ts index 4aefb73d5..0881c823f 100644 --- a/src/slang-nodes/MultiLineNatSpecComment.ts +++ b/src/slang-nodes/MultiLineNatSpecComment.ts @@ -1,38 +1,20 @@ import { TerminalKind, TerminalNode } from '@nomicfoundation/slang/cst'; import { doc } from 'prettier'; -import { getNodeMetadata } from '../slang-utils/metadata.js'; +import { CommentNode } from './CommentNode.js'; import { isIndentableBlockComment } from '../slang-utils/is-indentable-block-comment.js'; import { printIndentableBlockComment } from '../slang-printers/print-indentable-block-comment.js'; import type { Doc } from 'prettier'; -import type { BaseComment, Location, SlangNode } from '../types.d.ts'; -import type { StrictAstNode } from './types.d.ts'; const { join, literalline } = doc.builders; -export class MultiLineNatSpecComment implements SlangNode, BaseComment { +export class MultiLineNatSpecComment extends CommentNode { readonly kind = TerminalKind.MultiLineNatSpecComment; - loc: Location; - value: string; - leading?: boolean; - - trailing?: boolean; - - printed?: boolean; - - placement?: 'endOfLine' | 'ownLine' | 'remaining'; - - precedingNode?: StrictAstNode; - - enclosingNode?: StrictAstNode; - - followingNode?: StrictAstNode; - - constructor(ast: TerminalNode) { - [this.loc] = getNodeMetadata(ast); + constructor(ast: TerminalNode, offset: number) { + super(ast, offset); this.value = ast.unparse(); } diff --git a/src/slang-nodes/MultiplicativeExpression.ts b/src/slang-nodes/MultiplicativeExpression.ts index 7d3198aed..c074b25e6 100644 --- a/src/slang-nodes/MultiplicativeExpression.ts +++ b/src/slang-nodes/MultiplicativeExpression.ts @@ -2,13 +2,13 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { printBinaryOperation } from '../slang-printers/print-binary-operation.js'; import { createHugFunction } from '../slang-utils/create-hug-function.js'; import { createKindCheckFunction } from '../slang-utils/create-kind-check-function.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { Expression } from './Expression.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const multiplicationTryToHug = createHugFunction(['/', '%']); const divisionTryToHug = createHugFunction(['*', '%']); @@ -28,13 +28,9 @@ const printMultiplicativeExpression = printBinaryOperation( ]) ); -export class MultiplicativeExpression implements SlangNode { +export class MultiplicativeExpression extends SlangNode { readonly kind = NonterminalKind.MultiplicativeExpression; - comments; - - loc; - leftOperand: Expression; operator: string; @@ -45,16 +41,13 @@ export class MultiplicativeExpression implements SlangNode { ast: ast.MultiplicativeExpression, options: ParserOptions ) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.leftOperand = new Expression(ast.leftOperand, options); this.operator = ast.operator.unparse(); this.rightOperand = new Expression(ast.rightOperand, options); - updateMetadata(this.loc, this.comments, [ - this.leftOperand, - this.rightOperand - ]); + this.updateMetadata([this.leftOperand, this.rightOperand]); switch (this.operator) { case '*': diff --git a/src/slang-nodes/NamedArgument.ts b/src/slang-nodes/NamedArgument.ts index 4d9bfdcc6..7d3d7d485 100644 --- a/src/slang-nodes/NamedArgument.ts +++ b/src/slang-nodes/NamedArgument.ts @@ -1,31 +1,27 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { Identifier } from './Identifier.js'; import { Expression } from './Expression.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class NamedArgument implements SlangNode { +export class NamedArgument extends SlangNode { readonly kind = NonterminalKind.NamedArgument; - comments; - - loc; - name: Identifier; value: Expression; constructor(ast: ast.NamedArgument, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.name = new Identifier(ast.name); this.value = new Expression(ast.value, options); - updateMetadata(this.loc, this.comments, [this.value]); + this.updateMetadata([this.value]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/NamedArgumentGroup.ts b/src/slang-nodes/NamedArgumentGroup.ts index ee275c70f..d515bc468 100644 --- a/src/slang-nodes/NamedArgumentGroup.ts +++ b/src/slang-nodes/NamedArgumentGroup.ts @@ -1,27 +1,23 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { NamedArguments } from './NamedArguments.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class NamedArgumentGroup implements SlangNode { +export class NamedArgumentGroup extends SlangNode { readonly kind = NonterminalKind.NamedArgumentGroup; - comments; - - loc; - arguments: NamedArguments; constructor(ast: ast.NamedArgumentGroup, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.arguments = new NamedArguments(ast.arguments, options); - updateMetadata(this.loc, this.comments, [this.arguments]); + this.updateMetadata([this.arguments]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/NamedArguments.ts b/src/slang-nodes/NamedArguments.ts index dff64a1d7..afd153195 100644 --- a/src/slang-nodes/NamedArguments.ts +++ b/src/slang-nodes/NamedArguments.ts @@ -1,31 +1,27 @@ import { doc } from 'prettier'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { printSeparatedList } from '../slang-printers/print-separated-list.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { NamedArgument } from './NamedArgument.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { line, softline } = doc.builders; -export class NamedArguments implements SlangNode { +export class NamedArguments extends SlangNode { readonly kind = NonterminalKind.NamedArguments; - comments; - - loc; - items: NamedArgument[]; constructor(ast: ast.NamedArguments, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast, true); + super(ast, true); this.items = ast.items.map((item) => new NamedArgument(item, options)); - updateMetadata(this.loc, this.comments, [this.items]); + this.updateMetadata([this.items]); } print( diff --git a/src/slang-nodes/NamedArgumentsDeclaration.ts b/src/slang-nodes/NamedArgumentsDeclaration.ts index f21011758..c12dd32b3 100644 --- a/src/slang-nodes/NamedArgumentsDeclaration.ts +++ b/src/slang-nodes/NamedArgumentsDeclaration.ts @@ -1,32 +1,28 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { NamedArgumentGroup } from './NamedArgumentGroup.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class NamedArgumentsDeclaration implements SlangNode { +export class NamedArgumentsDeclaration extends SlangNode { readonly kind = NonterminalKind.NamedArgumentsDeclaration; - comments; - - loc; - arguments?: NamedArgumentGroup; constructor( ast: ast.NamedArgumentsDeclaration, options: ParserOptions ) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); if (ast.arguments) { this.arguments = new NamedArgumentGroup(ast.arguments, options); } - updateMetadata(this.loc, this.comments, [this.arguments]); + this.updateMetadata([this.arguments]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/NamedImport.ts b/src/slang-nodes/NamedImport.ts index 90edd0364..885052e44 100644 --- a/src/slang-nodes/NamedImport.ts +++ b/src/slang-nodes/NamedImport.ts @@ -1,31 +1,27 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { ImportAlias } from './ImportAlias.js'; import { StringLiteral } from './StringLiteral.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class NamedImport implements SlangNode { +export class NamedImport extends SlangNode { readonly kind = NonterminalKind.NamedImport; - comments; - - loc; - alias: ImportAlias; path: StringLiteral; constructor(ast: ast.NamedImport, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.alias = new ImportAlias(ast.alias); this.path = new StringLiteral(ast.path, options); - updateMetadata(this.loc, this.comments, [this.alias, this.path]); + this.updateMetadata([this.alias, this.path]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/NewExpression.ts b/src/slang-nodes/NewExpression.ts index b0c19f3cf..c9f2c961c 100644 --- a/src/slang-nodes/NewExpression.ts +++ b/src/slang-nodes/NewExpression.ts @@ -1,27 +1,23 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { TypeName } from './TypeName.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class NewExpression implements SlangNode { +export class NewExpression extends SlangNode { readonly kind = NonterminalKind.NewExpression; - comments; - - loc; - typeName: TypeName; constructor(ast: ast.NewExpression, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.typeName = new TypeName(ast.typeName, options); - updateMetadata(this.loc, this.comments, [this.typeName]); + this.updateMetadata([this.typeName]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/NumberUnit.ts b/src/slang-nodes/NumberUnit.ts index c68b36b62..6bfb73f81 100644 --- a/src/slang-nodes/NumberUnit.ts +++ b/src/slang-nodes/NumberUnit.ts @@ -1,21 +1,16 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { Doc } from 'prettier'; -import type { SlangNode } from '../types.d.ts'; -export class NumberUnit implements SlangNode { +export class NumberUnit extends SlangNode { readonly kind = NonterminalKind.NumberUnit; - comments; - - loc; - variant: string; constructor(ast: ast.NumberUnit) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.variant = ast.variant.unparse(); } diff --git a/src/slang-nodes/OrExpression.ts b/src/slang-nodes/OrExpression.ts index 9aaf00c66..d50205241 100644 --- a/src/slang-nodes/OrExpression.ts +++ b/src/slang-nodes/OrExpression.ts @@ -1,23 +1,19 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { printLogicalOperation } from '../slang-printers/print-logical-operation.js'; import { createHugFunction } from '../slang-utils/create-hug-function.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { Expression } from './Expression.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const tryToHug = createHugFunction(['&&']); -export class OrExpression implements SlangNode { +export class OrExpression extends SlangNode { readonly kind = NonterminalKind.OrExpression; - comments; - - loc; - leftOperand: Expression; operator: string; @@ -25,16 +21,13 @@ export class OrExpression implements SlangNode { rightOperand: Expression; constructor(ast: ast.OrExpression, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.leftOperand = new Expression(ast.leftOperand, options); this.operator = ast.operator.unparse(); this.rightOperand = new Expression(ast.rightOperand, options); - updateMetadata(this.loc, this.comments, [ - this.leftOperand, - this.rightOperand - ]); + this.updateMetadata([this.leftOperand, this.rightOperand]); this.leftOperand = tryToHug(this.leftOperand); this.rightOperand = tryToHug(this.rightOperand); diff --git a/src/slang-nodes/OverridePaths.ts b/src/slang-nodes/OverridePaths.ts index 82f78621b..844ef0f48 100644 --- a/src/slang-nodes/OverridePaths.ts +++ b/src/slang-nodes/OverridePaths.ts @@ -1,27 +1,23 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { printSeparatedList } from '../slang-printers/print-separated-list.js'; import { IdentifierPath } from './IdentifierPath.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc } from 'prettier'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class OverridePaths implements SlangNode { +export class OverridePaths extends SlangNode { readonly kind = NonterminalKind.OverridePaths; - comments; - - loc; - items: IdentifierPath[]; constructor(ast: ast.OverridePaths) { - [this.loc, this.comments] = getNodeMetadata(ast, true); + super(ast, true); this.items = ast.items.map((item) => new IdentifierPath(item)); - updateMetadata(this.loc, this.comments, [this.items]); + this.updateMetadata([this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/OverridePathsDeclaration.ts b/src/slang-nodes/OverridePathsDeclaration.ts index 6678a84f0..eb15ccb99 100644 --- a/src/slang-nodes/OverridePathsDeclaration.ts +++ b/src/slang-nodes/OverridePathsDeclaration.ts @@ -1,26 +1,22 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { OverridePaths } from './OverridePaths.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc } from 'prettier'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class OverridePathsDeclaration implements SlangNode { +export class OverridePathsDeclaration extends SlangNode { readonly kind = NonterminalKind.OverridePathsDeclaration; - comments; - - loc; - paths: OverridePaths; constructor(ast: ast.OverridePathsDeclaration) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.paths = new OverridePaths(ast.paths); - updateMetadata(this.loc, this.comments, [this.paths]); + this.updateMetadata([this.paths]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/OverrideSpecifier.ts b/src/slang-nodes/OverrideSpecifier.ts index 31730297f..154c58af0 100644 --- a/src/slang-nodes/OverrideSpecifier.ts +++ b/src/slang-nodes/OverrideSpecifier.ts @@ -1,28 +1,24 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { OverridePathsDeclaration } from './OverridePathsDeclaration.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc } from 'prettier'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class OverrideSpecifier implements SlangNode { +export class OverrideSpecifier extends SlangNode { readonly kind = NonterminalKind.OverrideSpecifier; - comments; - - loc; - overridden?: OverridePathsDeclaration; constructor(ast: ast.OverrideSpecifier) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); if (ast.overridden) { this.overridden = new OverridePathsDeclaration(ast.overridden); } - updateMetadata(this.loc, this.comments, [this.overridden]); + this.updateMetadata([this.overridden]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/Parameter.ts b/src/slang-nodes/Parameter.ts index 1da4524a8..5ed2910a1 100644 --- a/src/slang-nodes/Parameter.ts +++ b/src/slang-nodes/Parameter.ts @@ -1,6 +1,6 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { doc } from 'prettier'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { joinExisting } from '../slang-utils/join-existing.js'; import { TypeName } from './TypeName.js'; import { StorageLocation } from './StorageLocation.js'; @@ -9,17 +9,13 @@ import { Identifier } from './Identifier.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { group } = doc.builders; -export class Parameter implements SlangNode { +export class Parameter extends SlangNode { readonly kind = NonterminalKind.Parameter; - comments; - - loc; - typeName: TypeName; storageLocation?: StorageLocation; @@ -27,7 +23,7 @@ export class Parameter implements SlangNode { name?: Identifier; constructor(ast: ast.Parameter, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.typeName = new TypeName(ast.typeName, options); if (ast.storageLocation) { @@ -37,10 +33,7 @@ export class Parameter implements SlangNode { this.name = new Identifier(ast.name); } - updateMetadata(this.loc, this.comments, [ - this.typeName, - this.storageLocation - ]); + this.updateMetadata([this.typeName, this.storageLocation]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/Parameters.ts b/src/slang-nodes/Parameters.ts index fde933463..28f44284f 100644 --- a/src/slang-nodes/Parameters.ts +++ b/src/slang-nodes/Parameters.ts @@ -2,29 +2,25 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { printSeparatedList } from '../slang-printers/print-separated-list.js'; import { printSeparatedItem } from '../slang-printers/print-separated-item.js'; import { printComments } from '../slang-printers/print-comments.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { Parameter } from './Parameter.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class Parameters implements SlangNode { +export class Parameters extends SlangNode { readonly kind = NonterminalKind.Parameters; - comments; - - loc; - items: Parameter[]; constructor(ast: ast.Parameters, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast, true); + super(ast, true); this.items = ast.items.map((item) => new Parameter(item, options)); - updateMetadata(this.loc, this.comments, [this.items]); + this.updateMetadata([this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ParametersDeclaration.ts b/src/slang-nodes/ParametersDeclaration.ts index dd6ec383d..f7794366d 100644 --- a/src/slang-nodes/ParametersDeclaration.ts +++ b/src/slang-nodes/ParametersDeclaration.ts @@ -1,27 +1,23 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { Parameters } from './Parameters.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class ParametersDeclaration implements SlangNode { +export class ParametersDeclaration extends SlangNode { readonly kind = NonterminalKind.ParametersDeclaration; - comments; - - loc; - parameters: Parameters; constructor(ast: ast.ParametersDeclaration, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.parameters = new Parameters(ast.parameters, options); - updateMetadata(this.loc, this.comments, [this.parameters]); + this.updateMetadata([this.parameters]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/PathImport.ts b/src/slang-nodes/PathImport.ts index 423f9a50e..0dd8c029d 100644 --- a/src/slang-nodes/PathImport.ts +++ b/src/slang-nodes/PathImport.ts @@ -1,33 +1,29 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { StringLiteral } from './StringLiteral.js'; import { ImportAlias } from './ImportAlias.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class PathImport implements SlangNode { +export class PathImport extends SlangNode { readonly kind = NonterminalKind.PathImport; - comments; - - loc; - path: StringLiteral; alias?: ImportAlias; constructor(ast: ast.PathImport, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.path = new StringLiteral(ast.path, options); if (ast.alias) { this.alias = new ImportAlias(ast.alias); } - updateMetadata(this.loc, this.comments, [this.path, this.alias]); + this.updateMetadata([this.path, this.alias]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/PositionalArguments.ts b/src/slang-nodes/PositionalArguments.ts index b63e9ebcd..a29614c07 100644 --- a/src/slang-nodes/PositionalArguments.ts +++ b/src/slang-nodes/PositionalArguments.ts @@ -2,29 +2,25 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { printComments } from '../slang-printers/print-comments.js'; import { printSeparatedItem } from '../slang-printers/print-separated-item.js'; import { printSeparatedList } from '../slang-printers/print-separated-list.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { Expression } from './Expression.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class PositionalArguments implements SlangNode { +export class PositionalArguments extends SlangNode { readonly kind = NonterminalKind.PositionalArguments; - comments; - - loc; - items: Expression[]; constructor(ast: ast.PositionalArguments, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast, true); + super(ast, true); this.items = ast.items.map((item) => new Expression(item, options)); - updateMetadata(this.loc, this.comments, [this.items]); + this.updateMetadata([this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/PositionalArgumentsDeclaration.ts b/src/slang-nodes/PositionalArgumentsDeclaration.ts index 475439026..d9edad812 100644 --- a/src/slang-nodes/PositionalArgumentsDeclaration.ts +++ b/src/slang-nodes/PositionalArgumentsDeclaration.ts @@ -1,20 +1,16 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { isBlockComment } from '../slang-utils/is-comment.js'; import { PositionalArguments } from './PositionalArguments.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class PositionalArgumentsDeclaration implements SlangNode { +export class PositionalArgumentsDeclaration extends SlangNode { readonly kind = NonterminalKind.PositionalArgumentsDeclaration; - comments; - - loc; - isEmpty; arguments: PositionalArguments; @@ -23,11 +19,11 @@ export class PositionalArgumentsDeclaration implements SlangNode { ast: ast.PositionalArgumentsDeclaration, options: ParserOptions ) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.arguments = new PositionalArguments(ast.arguments, options); - updateMetadata(this.loc, this.comments, [this.arguments]); + this.updateMetadata([this.arguments]); // We need to check the comments at this point because they will be removed // from this node into the root node. diff --git a/src/slang-nodes/PostfixExpression.ts b/src/slang-nodes/PostfixExpression.ts index 9b99a7a8f..099445545 100644 --- a/src/slang-nodes/PostfixExpression.ts +++ b/src/slang-nodes/PostfixExpression.ts @@ -1,30 +1,26 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { Expression } from './Expression.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class PostfixExpression implements SlangNode { +export class PostfixExpression extends SlangNode { readonly kind = NonterminalKind.PostfixExpression; - comments; - - loc; - operand: Expression; operator: string; constructor(ast: ast.PostfixExpression, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.operand = new Expression(ast.operand, options); this.operator = ast.operator.unparse(); - updateMetadata(this.loc, this.comments, [this.operand]); + this.updateMetadata([this.operand]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/Pragma.ts b/src/slang-nodes/Pragma.ts index f93101f1f..8620c736f 100644 --- a/src/slang-nodes/Pragma.ts +++ b/src/slang-nodes/Pragma.ts @@ -1,5 +1,5 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { AbicoderPragma } from './AbicoderPragma.js'; import { ExperimentalPragma } from './ExperimentalPragma.js'; import { VersionPragma } from './VersionPragma.js'; @@ -7,19 +7,15 @@ import { VersionPragma } from './VersionPragma.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class Pragma implements SlangNode { +export class Pragma extends SlangNode { readonly kind = NonterminalKind.Pragma; - comments; - - loc; - variant: AbicoderPragma | ExperimentalPragma | VersionPragma; constructor(ast: ast.Pragma, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); switch (ast.variant.cst.kind) { case NonterminalKind.AbicoderPragma: @@ -38,7 +34,7 @@ export class Pragma implements SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - updateMetadata(this.loc, this.comments, [this.variant]); + this.updateMetadata([this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/PragmaDirective.ts b/src/slang-nodes/PragmaDirective.ts index 59e33c270..3f438ca94 100644 --- a/src/slang-nodes/PragmaDirective.ts +++ b/src/slang-nodes/PragmaDirective.ts @@ -1,27 +1,23 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { Pragma } from './Pragma.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class PragmaDirective implements SlangNode { +export class PragmaDirective extends SlangNode { readonly kind = NonterminalKind.PragmaDirective; - comments; - - loc; - pragma: Pragma; constructor(ast: ast.PragmaDirective, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.pragma = new Pragma(ast.pragma, options); - updateMetadata(this.loc, this.comments, [this.pragma]); + this.updateMetadata([this.pragma]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/PrefixExpression.ts b/src/slang-nodes/PrefixExpression.ts index 830f49a0c..23660892d 100644 --- a/src/slang-nodes/PrefixExpression.ts +++ b/src/slang-nodes/PrefixExpression.ts @@ -1,30 +1,26 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { Expression } from './Expression.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class PrefixExpression implements SlangNode { +export class PrefixExpression extends SlangNode { readonly kind = NonterminalKind.PrefixExpression; - comments; - - loc; - operator: string; operand: Expression; constructor(ast: ast.PrefixExpression, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.operator = ast.operator.unparse(); this.operand = new Expression(ast.operand, options); - updateMetadata(this.loc, this.comments, [this.operand]); + this.updateMetadata([this.operand]); if (this.operator === 'delete') { this.operator = `${this.operator} `; diff --git a/src/slang-nodes/ReceiveFunctionAttribute.ts b/src/slang-nodes/ReceiveFunctionAttribute.ts index b52165f5c..558dc626a 100644 --- a/src/slang-nodes/ReceiveFunctionAttribute.ts +++ b/src/slang-nodes/ReceiveFunctionAttribute.ts @@ -1,27 +1,23 @@ import { NonterminalKind, TerminalNode } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { ModifierInvocation } from './ModifierInvocation.js'; import { OverrideSpecifier } from './OverrideSpecifier.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class ReceiveFunctionAttribute implements SlangNode { +export class ReceiveFunctionAttribute extends SlangNode { readonly kind = NonterminalKind.ReceiveFunctionAttribute; - comments; - - loc; - variant: ModifierInvocation | OverrideSpecifier | string; constructor( ast: ast.ReceiveFunctionAttribute, options: ParserOptions ) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); if (ast.variant instanceof TerminalNode) { this.variant = ast.variant.unparse(); @@ -43,11 +39,7 @@ export class ReceiveFunctionAttribute implements SlangNode { } } - updateMetadata( - this.loc, - this.comments, - typeof this.variant === 'string' ? [] : [this.variant] - ); + this.updateMetadata(typeof this.variant === 'string' ? [] : [this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ReceiveFunctionAttributes.ts b/src/slang-nodes/ReceiveFunctionAttributes.ts index 4b919ddbf..e562a3629 100644 --- a/src/slang-nodes/ReceiveFunctionAttributes.ts +++ b/src/slang-nodes/ReceiveFunctionAttributes.ts @@ -1,36 +1,32 @@ import { doc } from 'prettier'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { sortFunctionAttributes } from '../slang-utils/sort-function-attributes.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { ReceiveFunctionAttribute } from './ReceiveFunctionAttribute.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { line } = doc.builders; -export class ReceiveFunctionAttributes implements SlangNode { +export class ReceiveFunctionAttributes extends SlangNode { readonly kind = NonterminalKind.ReceiveFunctionAttributes; - comments; - - loc; - items: ReceiveFunctionAttribute[]; constructor( ast: ast.ReceiveFunctionAttributes, options: ParserOptions ) { - [this.loc, this.comments] = getNodeMetadata(ast, true); + super(ast, true); this.items = ast.items.map( (item) => new ReceiveFunctionAttribute(item, options) ); - updateMetadata(this.loc, this.comments, [this.items]); + this.updateMetadata([this.items]); this.items = this.items.sort(sortFunctionAttributes); } diff --git a/src/slang-nodes/ReceiveFunctionDefinition.ts b/src/slang-nodes/ReceiveFunctionDefinition.ts index 93ffb0307..7bf6e223b 100644 --- a/src/slang-nodes/ReceiveFunctionDefinition.ts +++ b/src/slang-nodes/ReceiveFunctionDefinition.ts @@ -1,6 +1,6 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { printFunction } from '../slang-printers/print-function.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { ParametersDeclaration } from './ParametersDeclaration.js'; import { ReceiveFunctionAttributes } from './ReceiveFunctionAttributes.js'; import { FunctionBody } from './FunctionBody.js'; @@ -8,15 +8,11 @@ import { FunctionBody } from './FunctionBody.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class ReceiveFunctionDefinition implements SlangNode { +export class ReceiveFunctionDefinition extends SlangNode { readonly kind = NonterminalKind.ReceiveFunctionDefinition; - comments; - - loc; - parameters: ParametersDeclaration; attributes: ReceiveFunctionAttributes; @@ -27,17 +23,13 @@ export class ReceiveFunctionDefinition implements SlangNode { ast: ast.ReceiveFunctionDefinition, options: ParserOptions ) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.parameters = new ParametersDeclaration(ast.parameters, options); this.attributes = new ReceiveFunctionAttributes(ast.attributes, options); this.body = new FunctionBody(ast.body, options); - updateMetadata(this.loc, this.comments, [ - this.parameters, - this.attributes, - this.body - ]); + this.updateMetadata([this.parameters, this.attributes, this.body]); this.cleanModifierInvocationArguments(); } diff --git a/src/slang-nodes/ReturnStatement.ts b/src/slang-nodes/ReturnStatement.ts index 2cdecef8b..3725d6826 100644 --- a/src/slang-nodes/ReturnStatement.ts +++ b/src/slang-nodes/ReturnStatement.ts @@ -1,12 +1,12 @@ import { doc } from 'prettier'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { Expression } from './Expression.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { group, indent, line } = doc.builders; @@ -27,23 +27,19 @@ function printExpression( return ''; } -export class ReturnStatement implements SlangNode { +export class ReturnStatement extends SlangNode { readonly kind = NonterminalKind.ReturnStatement; - comments; - - loc; - expression?: Expression; constructor(ast: ast.ReturnStatement, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); if (ast.expression) { this.expression = new Expression(ast.expression, options); } - updateMetadata(this.loc, this.comments, [this.expression]); + this.updateMetadata([this.expression]); } print( diff --git a/src/slang-nodes/ReturnsDeclaration.ts b/src/slang-nodes/ReturnsDeclaration.ts index 8d31d68ed..029dc089b 100644 --- a/src/slang-nodes/ReturnsDeclaration.ts +++ b/src/slang-nodes/ReturnsDeclaration.ts @@ -1,30 +1,26 @@ import { doc } from 'prettier'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { ParametersDeclaration } from './ParametersDeclaration.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { group } = doc.builders; -export class ReturnsDeclaration implements SlangNode { +export class ReturnsDeclaration extends SlangNode { readonly kind = NonterminalKind.ReturnsDeclaration; - comments; - - loc; - variables: ParametersDeclaration; constructor(ast: ast.ReturnsDeclaration, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.variables = new ParametersDeclaration(ast.variables, options); - updateMetadata(this.loc, this.comments, [this.variables]); + this.updateMetadata([this.variables]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/RevertStatement.ts b/src/slang-nodes/RevertStatement.ts index 7244b93ce..a98f8c0bf 100644 --- a/src/slang-nodes/RevertStatement.ts +++ b/src/slang-nodes/RevertStatement.ts @@ -1,5 +1,5 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { joinExisting } from '../slang-utils/join-existing.js'; import { IdentifierPath } from './IdentifierPath.js'; import { ArgumentsDeclaration } from './ArgumentsDeclaration.js'; @@ -7,28 +7,24 @@ import { ArgumentsDeclaration } from './ArgumentsDeclaration.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class RevertStatement implements SlangNode { +export class RevertStatement extends SlangNode { readonly kind = NonterminalKind.RevertStatement; - comments; - - loc; - error?: IdentifierPath; arguments: ArgumentsDeclaration; constructor(ast: ast.RevertStatement, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); if (ast.error) { this.error = new IdentifierPath(ast.error); } this.arguments = new ArgumentsDeclaration(ast.arguments, options); - updateMetadata(this.loc, this.comments, [this.error, this.arguments]); + this.updateMetadata([this.error, this.arguments]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ShiftExpression.ts b/src/slang-nodes/ShiftExpression.ts index 17ec170bc..d989e5165 100644 --- a/src/slang-nodes/ShiftExpression.ts +++ b/src/slang-nodes/ShiftExpression.ts @@ -2,13 +2,13 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { printBinaryOperation } from '../slang-printers/print-binary-operation.js'; import { createHugFunction } from '../slang-utils/create-hug-function.js'; import { createKindCheckFunction } from '../slang-utils/create-kind-check-function.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { Expression } from './Expression.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const tryToHugLeftOperand = createHugFunction([ '+', @@ -33,13 +33,9 @@ const printShiftExpression = printBinaryOperation( ]) ); -export class ShiftExpression implements SlangNode { +export class ShiftExpression extends SlangNode { readonly kind = NonterminalKind.ShiftExpression; - comments; - - loc; - leftOperand: Expression; operator: string; @@ -47,16 +43,13 @@ export class ShiftExpression implements SlangNode { rightOperand: Expression; constructor(ast: ast.ShiftExpression, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.leftOperand = new Expression(ast.leftOperand, options); this.operator = ast.operator.unparse(); this.rightOperand = new Expression(ast.rightOperand, options); - updateMetadata(this.loc, this.comments, [ - this.leftOperand, - this.rightOperand - ]); + this.updateMetadata([this.leftOperand, this.rightOperand]); this.leftOperand = tryToHugLeftOperand(this.leftOperand); this.rightOperand = tryToHugRightOperand(this.rightOperand); diff --git a/src/slang-nodes/SimpleVersionLiteral.ts b/src/slang-nodes/SimpleVersionLiteral.ts index fc8d86ea5..4e65775d0 100644 --- a/src/slang-nodes/SimpleVersionLiteral.ts +++ b/src/slang-nodes/SimpleVersionLiteral.ts @@ -1,21 +1,16 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { Doc } from 'prettier'; -import type { SlangNode } from '../types.d.ts'; -export class SimpleVersionLiteral implements SlangNode { +export class SimpleVersionLiteral extends SlangNode { readonly kind = NonterminalKind.SimpleVersionLiteral; - comments; - - loc; - items: string[]; constructor(ast: ast.SimpleVersionLiteral) { - [this.loc, this.comments] = getNodeMetadata(ast, true); + super(ast, true); this.items = ast.items.map((item) => item.unparse()); } diff --git a/src/slang-nodes/SingleLineComment.ts b/src/slang-nodes/SingleLineComment.ts index ea42f506c..68958761e 100644 --- a/src/slang-nodes/SingleLineComment.ts +++ b/src/slang-nodes/SingleLineComment.ts @@ -1,33 +1,15 @@ import { TerminalKind, TerminalNode } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata } from '../slang-utils/metadata.js'; +import { CommentNode } from './CommentNode.js'; import type { Doc } from 'prettier'; -import type { BaseComment, Location, SlangNode } from '../types.d.ts'; -import type { StrictAstNode } from './types.d.ts'; -export class SingleLineComment implements SlangNode, BaseComment { +export class SingleLineComment extends CommentNode { readonly kind = TerminalKind.SingleLineComment; - loc: Location; - value: string; - leading?: boolean; - - trailing?: boolean; - - printed?: boolean; - - placement?: 'endOfLine' | 'ownLine' | 'remaining'; - - precedingNode?: StrictAstNode; - - enclosingNode?: StrictAstNode; - - followingNode?: StrictAstNode; - - constructor(ast: TerminalNode) { - [this.loc] = getNodeMetadata(ast); + constructor(ast: TerminalNode, offset: number) { + super(ast, offset); this.value = ast.unparse(); } diff --git a/src/slang-nodes/SingleLineNatSpecComment.ts b/src/slang-nodes/SingleLineNatSpecComment.ts index ae785a88f..ccafa2443 100644 --- a/src/slang-nodes/SingleLineNatSpecComment.ts +++ b/src/slang-nodes/SingleLineNatSpecComment.ts @@ -1,33 +1,15 @@ import { TerminalKind, TerminalNode } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata } from '../slang-utils/metadata.js'; +import { CommentNode } from './CommentNode.js'; import type { Doc } from 'prettier'; -import type { BaseComment, Location, SlangNode } from '../types.d.ts'; -import type { StrictAstNode } from './types.d.ts'; -export class SingleLineNatSpecComment implements SlangNode, BaseComment { +export class SingleLineNatSpecComment extends CommentNode { readonly kind = TerminalKind.SingleLineNatSpecComment; - loc: Location; - value: string; - leading?: boolean; - - trailing?: boolean; - - printed?: boolean; - - placement?: 'endOfLine' | 'ownLine' | 'remaining'; - - precedingNode?: StrictAstNode; - - enclosingNode?: StrictAstNode; - - followingNode?: StrictAstNode; - - constructor(ast: TerminalNode) { - [this.loc] = getNodeMetadata(ast); + constructor(ast: TerminalNode, offset: number) { + super(ast, offset); this.value = ast.unparse(); } diff --git a/src/slang-nodes/SlangNode.ts b/src/slang-nodes/SlangNode.ts new file mode 100644 index 000000000..df381e199 --- /dev/null +++ b/src/slang-nodes/SlangNode.ts @@ -0,0 +1,164 @@ +import { TerminalKind, TerminalNode } from '@nomicfoundation/slang/cst'; +import { createKindCheckFunction } from '../slang-utils/create-kind-check-function.js'; +import { MultiLineComment } from '../slang-nodes/MultiLineComment.js'; +import { MultiLineNatSpecComment } from '../slang-nodes/MultiLineNatSpecComment.js'; +import { SingleLineComment } from '../slang-nodes/SingleLineComment.js'; +import { SingleLineNatSpecComment } from '../slang-nodes/SingleLineNatSpecComment.js'; + +import type { Node } from '@nomicfoundation/slang/cst'; +import type { Comment, StrictAstNode } from '../slang-nodes/types.d.ts'; +import type { AstLocation, SlangAstNode } from '../types.d.ts'; + +const isCommentOrWhiteSpace = createKindCheckFunction([ + TerminalKind.MultiLineComment, + TerminalKind.MultiLineNatSpecComment, + TerminalKind.SingleLineComment, + TerminalKind.SingleLineNatSpecComment, + TerminalKind.EndOfLine, + TerminalKind.Whitespace +]); + +const offsets = new Map(); +export function clearOffsets(): void { + offsets.clear(); +} + +function getLeadingOffset(children: Node[]): number { + let offset = 0; + for (const child of children) { + if (child.isNonterminalNode() || !isCommentOrWhiteSpace(child)) { + // The node's content starts when we find the first non-terminal token, + // or if we find a non-comment, non-whitespace token. + return offset; + } + offset += child.textLength.utf16; + } + return offset; +} + +function collectComments( + comments: Comment[], + node: StrictAstNode | StrictAstNode[] | undefined +): Comment[] { + if (node) { + if (Array.isArray(node)) { + return node.reduce(collectComments, comments); + } + if (node.comments.length > 0) { + comments.push(...node.comments.splice(0)); + } + } + return comments; +} + +export class SlangNode { + comments: Comment[] = []; + + loc: AstLocation; + + constructor( + ast: SlangAstNode | TerminalNode, + enclosePeripheralComments = false + ) { + if (ast instanceof TerminalNode) { + const offset = offsets.get(ast.id) || 0; + this.loc = { + start: offset, + end: offset + ast.textLength.utf16, + leadingOffset: 0, + trailingOffset: 0 + }; + return; + } + const parent = ast.cst; + const children = parent.children().map((child) => child.node); + + const initialOffset = offsets.get(parent.id) || 0; + let offset = initialOffset; + + for (const child of children) { + const { id, kind, textLength } = child; + if (child.isNonterminalNode()) { + offsets.set(id, offset); + } else { + switch (kind) { + // Since the fetching the comments and calculating offsets are both done + // as we iterate over the children and the comment also depends on the + // offset, it's hard to separate these responsibilities into different + // functions without doing the iteration twice. + case TerminalKind.MultiLineComment: + this.comments.push(new MultiLineComment(child, offset)); + break; + case TerminalKind.MultiLineNatSpecComment: + this.comments.push(new MultiLineNatSpecComment(child, offset)); + break; + case TerminalKind.SingleLineComment: + this.comments.push(new SingleLineComment(child, offset)); + break; + case TerminalKind.SingleLineNatSpecComment: + this.comments.push(new SingleLineNatSpecComment(child, offset)); + break; + case TerminalKind.Identifier: + case TerminalKind.YulIdentifier: + // Identifiers usually are user provided names for variables, + // functions, etc... + // Since a user can add comments to this section of the code as well, + // we need to track the offsets. + offsets.set(id, offset); + break; + } + } + + offset += textLength.utf16; + } + + const [leadingOffset, trailingOffset] = enclosePeripheralComments + ? [0, 0] + : [getLeadingOffset(children), getLeadingOffset(children.reverse())]; + + this.loc = { + start: initialOffset + leadingOffset, + end: offset - trailingOffset, + leadingOffset, + trailingOffset + }; + } + + updateMetadata( + childNodes: (StrictAstNode | StrictAstNode[] | undefined)[] + ): void { + const { comments, loc } = this; + // Collect comments + this.comments = childNodes.reduce(collectComments, comments); + + // calculate correct loc object + if (loc.leadingOffset === 0) { + for (const childNode of childNodes) { + if (typeof childNode === 'undefined' || Array.isArray(childNode)) + continue; + const { leadingOffset, start } = childNode.loc; + + if (start - leadingOffset === loc.start) { + loc.leadingOffset = leadingOffset; + loc.start += leadingOffset; + break; + } + } + } + + if (loc.trailingOffset === 0) { + for (const childNode of childNodes.reverse()) { + if (typeof childNode === 'undefined' || Array.isArray(childNode)) + continue; + const { trailingOffset, end } = childNode.loc; + + if (end + trailingOffset === loc.end) { + loc.trailingOffset = trailingOffset; + loc.end -= trailingOffset; + break; + } + } + } + this.loc = loc; + } +} diff --git a/src/slang-nodes/SourceUnit.ts b/src/slang-nodes/SourceUnit.ts index 6d00d7394..e3c0d4464 100644 --- a/src/slang-nodes/SourceUnit.ts +++ b/src/slang-nodes/SourceUnit.ts @@ -1,30 +1,26 @@ import { doc } from 'prettier'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { SourceUnitMembers } from './SourceUnitMembers.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; -import type { AstNode, Comment } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { AstNode } from './types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { line } = doc.builders; -export class SourceUnit implements SlangNode { +export class SourceUnit extends SlangNode { readonly kind = NonterminalKind.SourceUnit; - comments: Comment[]; - - loc; - members: SourceUnitMembers; constructor(ast: ast.SourceUnit, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.members = new SourceUnitMembers(ast.members, options); - updateMetadata(this.loc, this.comments, [this.members]); + this.updateMetadata([this.members]); // Because of comments being extracted like a russian doll, the order needs // to be fixed at the end. diff --git a/src/slang-nodes/SourceUnitMember.ts b/src/slang-nodes/SourceUnitMember.ts index 83fbeee19..c78686171 100644 --- a/src/slang-nodes/SourceUnitMember.ts +++ b/src/slang-nodes/SourceUnitMember.ts @@ -1,5 +1,5 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { PragmaDirective } from './PragmaDirective.js'; import { ImportDirective } from './ImportDirective.js'; import { ContractDefinition } from './ContractDefinition.js'; @@ -17,15 +17,11 @@ import { EventDefinition } from './EventDefinition.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class SourceUnitMember implements SlangNode { +export class SourceUnitMember extends SlangNode { readonly kind = NonterminalKind.SourceUnitMember; - comments; - - loc; - variant: | PragmaDirective | ImportDirective @@ -42,7 +38,7 @@ export class SourceUnitMember implements SlangNode { | EventDefinition; constructor(ast: ast.SourceUnitMember, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); switch (ast.variant.cst.kind) { case NonterminalKind.PragmaDirective: @@ -123,7 +119,7 @@ export class SourceUnitMember implements SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - updateMetadata(this.loc, this.comments, [this.variant]); + this.updateMetadata([this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/SourceUnitMembers.ts b/src/slang-nodes/SourceUnitMembers.ts index 14e4d7db2..770986342 100644 --- a/src/slang-nodes/SourceUnitMembers.ts +++ b/src/slang-nodes/SourceUnitMembers.ts @@ -1,28 +1,24 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { printPreservingEmptyLines } from '../slang-printers/print-preserving-empty-lines.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { SourceUnitMember } from './SourceUnitMember.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class SourceUnitMembers implements SlangNode { +export class SourceUnitMembers extends SlangNode { readonly kind = NonterminalKind.SourceUnitMembers; - comments; - - loc; - items: SourceUnitMember[]; constructor(ast: ast.SourceUnitMembers, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast, true); + super(ast, true); this.items = ast.items.map((item) => new SourceUnitMember(item, options)); - updateMetadata(this.loc, this.comments, [this.items]); + this.updateMetadata([this.items]); } print( diff --git a/src/slang-nodes/StateVariableAttribute.ts b/src/slang-nodes/StateVariableAttribute.ts index 3d2a74dce..96fe115d6 100644 --- a/src/slang-nodes/StateVariableAttribute.ts +++ b/src/slang-nodes/StateVariableAttribute.ts @@ -1,33 +1,25 @@ import { NonterminalKind, TerminalNode } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { OverrideSpecifier } from './OverrideSpecifier.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc } from 'prettier'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class StateVariableAttribute implements SlangNode { +export class StateVariableAttribute extends SlangNode { readonly kind = NonterminalKind.StateVariableAttribute; - comments; - - loc; - variant: OverrideSpecifier | string; constructor(ast: ast.StateVariableAttribute) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.variant = ast.variant instanceof TerminalNode ? ast.variant.unparse() : new OverrideSpecifier(ast.variant); - updateMetadata( - this.loc, - this.comments, - typeof this.variant === 'string' ? [] : [this.variant] - ); + this.updateMetadata(typeof this.variant === 'string' ? [] : [this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/StateVariableAttributes.ts b/src/slang-nodes/StateVariableAttributes.ts index c7742fd37..e7a422a32 100644 --- a/src/slang-nodes/StateVariableAttributes.ts +++ b/src/slang-nodes/StateVariableAttributes.ts @@ -1,30 +1,26 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { doc } from 'prettier'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { sortFunctionAttributes } from '../slang-utils/sort-function-attributes.js'; import { StateVariableAttribute } from './StateVariableAttribute.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc } from 'prettier'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { line } = doc.builders; -export class StateVariableAttributes implements SlangNode { +export class StateVariableAttributes extends SlangNode { readonly kind = NonterminalKind.StateVariableAttributes; - comments; - - loc; - items: StateVariableAttribute[]; constructor(ast: ast.StateVariableAttributes) { - [this.loc, this.comments] = getNodeMetadata(ast, true); + super(ast, true); this.items = ast.items.map((item) => new StateVariableAttribute(item)); - updateMetadata(this.loc, this.comments, [this.items]); + this.updateMetadata([this.items]); this.items = this.items.sort(sortFunctionAttributes); } diff --git a/src/slang-nodes/StateVariableDefinition.ts b/src/slang-nodes/StateVariableDefinition.ts index d9d13c119..7e055aef1 100644 --- a/src/slang-nodes/StateVariableDefinition.ts +++ b/src/slang-nodes/StateVariableDefinition.ts @@ -1,6 +1,6 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { doc } from 'prettier'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { TypeName } from './TypeName.js'; import { StateVariableAttributes } from './StateVariableAttributes.js'; import { Identifier } from './Identifier.js'; @@ -9,17 +9,13 @@ import { StateVariableDefinitionValue } from './StateVariableDefinitionValue.js' import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { group, indent, indentIfBreak } = doc.builders; -export class StateVariableDefinition implements SlangNode { +export class StateVariableDefinition extends SlangNode { readonly kind = NonterminalKind.StateVariableDefinition; - comments; - - loc; - typeName: TypeName; attributes: StateVariableAttributes; @@ -32,7 +28,7 @@ export class StateVariableDefinition implements SlangNode { ast: ast.StateVariableDefinition, options: ParserOptions ) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.typeName = new TypeName(ast.typeName, options); this.attributes = new StateVariableAttributes(ast.attributes); @@ -41,11 +37,7 @@ export class StateVariableDefinition implements SlangNode { this.value = new StateVariableDefinitionValue(ast.value, options); } - updateMetadata(this.loc, this.comments, [ - this.typeName, - this.attributes, - this.value - ]); + this.updateMetadata([this.typeName, this.attributes, this.value]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/StateVariableDefinitionValue.ts b/src/slang-nodes/StateVariableDefinitionValue.ts index af910350c..33ab94790 100644 --- a/src/slang-nodes/StateVariableDefinitionValue.ts +++ b/src/slang-nodes/StateVariableDefinitionValue.ts @@ -1,33 +1,29 @@ import { doc } from 'prettier'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { Expression } from './Expression.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { group, indent, line } = doc.builders; -export class StateVariableDefinitionValue implements SlangNode { +export class StateVariableDefinitionValue extends SlangNode { readonly kind = NonterminalKind.StateVariableDefinitionValue; - comments; - - loc; - value: Expression; constructor( ast: ast.StateVariableDefinitionValue, options: ParserOptions ) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.value = new Expression(ast.value, options); - updateMetadata(this.loc, this.comments, [this.value]); + this.updateMetadata([this.value]); } print( diff --git a/src/slang-nodes/Statement.ts b/src/slang-nodes/Statement.ts index 7ae582e9a..4e6a6031f 100644 --- a/src/slang-nodes/Statement.ts +++ b/src/slang-nodes/Statement.ts @@ -1,5 +1,5 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { ExpressionStatement } from './ExpressionStatement.js'; import { VariableDeclarationStatement } from './VariableDeclarationStatement.js'; import { TupleDeconstructionStatement } from './TupleDeconstructionStatement.js'; @@ -21,15 +21,11 @@ import { UncheckedBlock } from './UncheckedBlock.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class Statement implements SlangNode { +export class Statement extends SlangNode { readonly kind = NonterminalKind.Statement; - comments; - - loc; - variant: | ExpressionStatement | VariableDeclarationStatement @@ -50,7 +46,7 @@ export class Statement implements SlangNode { | UncheckedBlock; constructor(ast: ast.Statement, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); switch (ast.variant.cst.kind) { case NonterminalKind.ExpressionStatement: @@ -146,7 +142,7 @@ export class Statement implements SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - updateMetadata(this.loc, this.comments, [this.variant]); + this.updateMetadata([this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/Statements.ts b/src/slang-nodes/Statements.ts index e8d6c2398..5ff28c8b7 100644 --- a/src/slang-nodes/Statements.ts +++ b/src/slang-nodes/Statements.ts @@ -3,31 +3,27 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { printSeparatedItem } from '../slang-printers/print-separated-item.js'; import { printComments } from '../slang-printers/print-comments.js'; import { printPreservingEmptyLines } from '../slang-printers/print-preserving-empty-lines.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { Statement } from './Statement.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { hardline } = doc.builders; -export class Statements implements SlangNode { +export class Statements extends SlangNode { readonly kind = NonterminalKind.Statements; - comments; - - loc; - items: Statement[]; constructor(ast: ast.Statements, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast, true); + super(ast, true); this.items = ast.items.map((item) => new Statement(item, options)); - updateMetadata(this.loc, this.comments, [this.items]); + this.updateMetadata([this.items]); } print( diff --git a/src/slang-nodes/StorageLayoutSpecifier.ts b/src/slang-nodes/StorageLayoutSpecifier.ts index 7a61a6e5a..2869d042e 100644 --- a/src/slang-nodes/StorageLayoutSpecifier.ts +++ b/src/slang-nodes/StorageLayoutSpecifier.ts @@ -1,34 +1,30 @@ import { doc } from 'prettier'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { printSeparatedItem } from '../slang-printers/print-separated-item.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { Expression } from './Expression.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { line } = doc.builders; -export class StorageLayoutSpecifier implements SlangNode { +export class StorageLayoutSpecifier extends SlangNode { readonly kind = NonterminalKind.StorageLayoutSpecifier; - comments; - - loc; - expression: Expression; constructor( ast: ast.StorageLayoutSpecifier, options: ParserOptions ) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.expression = new Expression(ast.expression, options); - updateMetadata(this.loc, this.comments, [this.expression]); + this.updateMetadata([this.expression]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/StorageLocation.ts b/src/slang-nodes/StorageLocation.ts index 6e70db1c8..64d048a03 100644 --- a/src/slang-nodes/StorageLocation.ts +++ b/src/slang-nodes/StorageLocation.ts @@ -1,21 +1,16 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { Doc } from 'prettier'; -import type { SlangNode } from '../types.d.ts'; -export class StorageLocation implements SlangNode { +export class StorageLocation extends SlangNode { readonly kind = NonterminalKind.StorageLocation; - comments; - - loc; - variant: string; constructor(ast: ast.StorageLocation) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.variant = ast.variant.unparse(); } diff --git a/src/slang-nodes/StringExpression.ts b/src/slang-nodes/StringExpression.ts index cab92f6ae..eb87f6af6 100644 --- a/src/slang-nodes/StringExpression.ts +++ b/src/slang-nodes/StringExpression.ts @@ -1,5 +1,5 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { StringLiteral } from './StringLiteral.js'; import { StringLiterals } from './StringLiterals.js'; import { HexStringLiteral } from './HexStringLiteral.js'; @@ -9,15 +9,11 @@ import { UnicodeStringLiterals } from './UnicodeStringLiterals.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class StringExpression implements SlangNode { +export class StringExpression extends SlangNode { readonly kind = NonterminalKind.StringExpression; - comments; - - loc; - variant: | StringLiteral | StringLiterals @@ -26,7 +22,7 @@ export class StringExpression implements SlangNode { | UnicodeStringLiterals; constructor(ast: ast.StringExpression, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); switch (ast.variant.cst.kind) { case NonterminalKind.StringLiteral: @@ -63,7 +59,7 @@ export class StringExpression implements SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - updateMetadata(this.loc, this.comments, [this.variant]); + this.updateMetadata([this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/StringLiteral.ts b/src/slang-nodes/StringLiteral.ts index 4875b4a8d..aee53e230 100644 --- a/src/slang-nodes/StringLiteral.ts +++ b/src/slang-nodes/StringLiteral.ts @@ -1,23 +1,18 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { printString } from '../slang-printers/print-string.js'; -import { getNodeMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { SlangNode } from '../types.d.ts'; -export class StringLiteral implements SlangNode { +export class StringLiteral extends SlangNode { readonly kind = NonterminalKind.StringLiteral; - comments; - - loc; - variant: string; constructor(ast: ast.StringLiteral, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.variant = ast.variant.unparse(); diff --git a/src/slang-nodes/StringLiterals.ts b/src/slang-nodes/StringLiterals.ts index fb279ac64..1c108e4fe 100644 --- a/src/slang-nodes/StringLiterals.ts +++ b/src/slang-nodes/StringLiterals.ts @@ -1,30 +1,26 @@ import { doc } from 'prettier'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { StringLiteral } from './StringLiteral.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { join, hardline } = doc.builders; -export class StringLiterals implements SlangNode { +export class StringLiterals extends SlangNode { readonly kind = NonterminalKind.StringLiterals; - comments; - - loc; - items: StringLiteral[]; constructor(ast: ast.StringLiterals, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast, true); + super(ast, true); this.items = ast.items.map((item) => new StringLiteral(item, options)); - updateMetadata(this.loc, this.comments, [this.items]); + this.updateMetadata([this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/StructDefinition.ts b/src/slang-nodes/StructDefinition.ts index ba1e9e37a..84f17f36d 100644 --- a/src/slang-nodes/StructDefinition.ts +++ b/src/slang-nodes/StructDefinition.ts @@ -1,31 +1,27 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { Identifier } from './Identifier.js'; import { StructMembers } from './StructMembers.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class StructDefinition implements SlangNode { +export class StructDefinition extends SlangNode { readonly kind = NonterminalKind.StructDefinition; - comments; - - loc; - name: Identifier; members: StructMembers; constructor(ast: ast.StructDefinition, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.name = new Identifier(ast.name); this.members = new StructMembers(ast.members, options); - updateMetadata(this.loc, this.comments, [this.members]); + this.updateMetadata([this.members]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/StructMember.ts b/src/slang-nodes/StructMember.ts index 9055b390a..891ba59f4 100644 --- a/src/slang-nodes/StructMember.ts +++ b/src/slang-nodes/StructMember.ts @@ -1,31 +1,27 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { TypeName } from './TypeName.js'; import { Identifier } from './Identifier.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class StructMember implements SlangNode { +export class StructMember extends SlangNode { readonly kind = NonterminalKind.StructMember; - comments; - - loc; - typeName: TypeName; name: Identifier; constructor(ast: ast.StructMember, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.typeName = new TypeName(ast.typeName, options); this.name = new Identifier(ast.name); - updateMetadata(this.loc, this.comments, [this.typeName]); + this.updateMetadata([this.typeName]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/StructMembers.ts b/src/slang-nodes/StructMembers.ts index eb373ffe1..7891b407a 100644 --- a/src/slang-nodes/StructMembers.ts +++ b/src/slang-nodes/StructMembers.ts @@ -1,31 +1,27 @@ import { doc } from 'prettier'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { printSeparatedList } from '../slang-printers/print-separated-list.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { StructMember } from './StructMember.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { hardline } = doc.builders; -export class StructMembers implements SlangNode { +export class StructMembers extends SlangNode { readonly kind = NonterminalKind.StructMembers; - comments; - - loc; - items: StructMember[]; constructor(ast: ast.StructMembers, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast, true); + super(ast, true); this.items = ast.items.map((item) => new StructMember(item, options)); - updateMetadata(this.loc, this.comments, [this.items]); + this.updateMetadata([this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ThrowStatement.ts b/src/slang-nodes/ThrowStatement.ts index 7f1024f10..c59252f59 100644 --- a/src/slang-nodes/ThrowStatement.ts +++ b/src/slang-nodes/ThrowStatement.ts @@ -1,19 +1,14 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { Doc } from 'prettier'; -import type { SlangNode } from '../types.d.ts'; -export class ThrowStatement implements SlangNode { +export class ThrowStatement extends SlangNode { readonly kind = NonterminalKind.ThrowStatement; - comments; - - loc; - constructor(ast: ast.ThrowStatement) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); } print(): Doc { diff --git a/src/slang-nodes/TryStatement.ts b/src/slang-nodes/TryStatement.ts index 6ca5fd9ed..0276aa809 100644 --- a/src/slang-nodes/TryStatement.ts +++ b/src/slang-nodes/TryStatement.ts @@ -1,7 +1,7 @@ import { doc } from 'prettier'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { printSeparatedItem } from '../slang-printers/print-separated-item.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { joinExisting } from '../slang-utils/join-existing.js'; import { Expression } from './Expression.js'; import { ReturnsDeclaration } from './ReturnsDeclaration.js'; @@ -11,17 +11,13 @@ import { CatchClauses } from './CatchClauses.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { line } = doc.builders; -export class TryStatement implements SlangNode { +export class TryStatement extends SlangNode { readonly kind = NonterminalKind.TryStatement; - comments; - - loc; - expression: Expression; returns?: ReturnsDeclaration; @@ -31,7 +27,7 @@ export class TryStatement implements SlangNode { catchClauses: CatchClauses; constructor(ast: ast.TryStatement, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.expression = new Expression(ast.expression, options); if (ast.returns) { @@ -40,7 +36,7 @@ export class TryStatement implements SlangNode { this.body = new Block(ast.body, options); this.catchClauses = new CatchClauses(ast.catchClauses, options); - updateMetadata(this.loc, this.comments, [ + this.updateMetadata([ this.expression, this.returns, this.body, diff --git a/src/slang-nodes/TupleDeconstructionElement.ts b/src/slang-nodes/TupleDeconstructionElement.ts index 7b440e08f..414604228 100644 --- a/src/slang-nodes/TupleDeconstructionElement.ts +++ b/src/slang-nodes/TupleDeconstructionElement.ts @@ -1,32 +1,28 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { TupleMember } from './TupleMember.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class TupleDeconstructionElement implements SlangNode { +export class TupleDeconstructionElement extends SlangNode { readonly kind = NonterminalKind.TupleDeconstructionElement; - comments; - - loc; - member?: TupleMember; constructor( ast: ast.TupleDeconstructionElement, options: ParserOptions ) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); if (ast.member) { this.member = new TupleMember(ast.member, options); } - updateMetadata(this.loc, this.comments, [this.member]); + this.updateMetadata([this.member]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/TupleDeconstructionElements.ts b/src/slang-nodes/TupleDeconstructionElements.ts index 17676c4c4..121cdd514 100644 --- a/src/slang-nodes/TupleDeconstructionElements.ts +++ b/src/slang-nodes/TupleDeconstructionElements.ts @@ -1,33 +1,29 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { printSeparatedList } from '../slang-printers/print-separated-list.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { TupleDeconstructionElement } from './TupleDeconstructionElement.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class TupleDeconstructionElements implements SlangNode { +export class TupleDeconstructionElements extends SlangNode { readonly kind = NonterminalKind.TupleDeconstructionElements; - comments; - - loc; - items: TupleDeconstructionElement[]; constructor( ast: ast.TupleDeconstructionElements, options: ParserOptions ) { - [this.loc, this.comments] = getNodeMetadata(ast, true); + super(ast, true); this.items = ast.items.map( (item) => new TupleDeconstructionElement(item, options) ); - updateMetadata(this.loc, this.comments, [this.items]); + this.updateMetadata([this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/TupleDeconstructionStatement.ts b/src/slang-nodes/TupleDeconstructionStatement.ts index bb6caef71..72c389e2b 100644 --- a/src/slang-nodes/TupleDeconstructionStatement.ts +++ b/src/slang-nodes/TupleDeconstructionStatement.ts @@ -1,23 +1,19 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { doc } from 'prettier'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { TupleDeconstructionElements } from './TupleDeconstructionElements.js'; import { Expression } from './Expression.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { group, indentIfBreak } = doc.builders; -export class TupleDeconstructionStatement implements SlangNode { +export class TupleDeconstructionStatement extends SlangNode { readonly kind = NonterminalKind.TupleDeconstructionStatement; - comments; - - loc; - varKeyword?: string; elements: TupleDeconstructionElements; @@ -28,13 +24,13 @@ export class TupleDeconstructionStatement implements SlangNode { ast: ast.TupleDeconstructionStatement, options: ParserOptions ) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.varKeyword = ast.varKeyword?.unparse(); this.elements = new TupleDeconstructionElements(ast.elements, options); this.expression = new Expression(ast.expression, options); - updateMetadata(this.loc, this.comments, [this.elements, this.expression]); + this.updateMetadata([this.elements, this.expression]); } print( diff --git a/src/slang-nodes/TupleExpression.ts b/src/slang-nodes/TupleExpression.ts index 552761d73..60bb96852 100644 --- a/src/slang-nodes/TupleExpression.ts +++ b/src/slang-nodes/TupleExpression.ts @@ -1,27 +1,23 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { TupleValues } from './TupleValues.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class TupleExpression implements SlangNode { +export class TupleExpression extends SlangNode { readonly kind = NonterminalKind.TupleExpression; - comments; - - loc; - items: TupleValues; constructor(ast: ast.TupleExpression, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.items = new TupleValues(ast.items, options); - updateMetadata(this.loc, this.comments, [this.items]); + this.updateMetadata([this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/TupleMember.ts b/src/slang-nodes/TupleMember.ts index 607a8c5b3..0670a793b 100644 --- a/src/slang-nodes/TupleMember.ts +++ b/src/slang-nodes/TupleMember.ts @@ -1,24 +1,20 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { TypedTupleMember } from './TypedTupleMember.js'; import { UntypedTupleMember } from './UntypedTupleMember.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class TupleMember implements SlangNode { +export class TupleMember extends SlangNode { readonly kind = NonterminalKind.TupleMember; - comments; - - loc; - variant: TypedTupleMember | UntypedTupleMember; constructor(ast: ast.TupleMember, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); switch (ast.variant.cst.kind) { case NonterminalKind.TypedTupleMember: @@ -36,7 +32,7 @@ export class TupleMember implements SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - updateMetadata(this.loc, this.comments, [this.variant]); + this.updateMetadata([this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/TupleValue.ts b/src/slang-nodes/TupleValue.ts index a6c40fd6c..840e941f2 100644 --- a/src/slang-nodes/TupleValue.ts +++ b/src/slang-nodes/TupleValue.ts @@ -1,29 +1,25 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { Expression } from './Expression.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class TupleValue implements SlangNode { +export class TupleValue extends SlangNode { readonly kind = NonterminalKind.TupleValue; - comments; - - loc; - expression?: Expression; constructor(ast: ast.TupleValue, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); if (ast.expression) { this.expression = new Expression(ast.expression, options); } - updateMetadata(this.loc, this.comments, [this.expression]); + this.updateMetadata([this.expression]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/TupleValues.ts b/src/slang-nodes/TupleValues.ts index 280126d25..2955cb4d0 100644 --- a/src/slang-nodes/TupleValues.ts +++ b/src/slang-nodes/TupleValues.ts @@ -1,30 +1,26 @@ import { NonterminalKind, TerminalKind } from '@nomicfoundation/slang/cst'; import { printSeparatedList } from '../slang-printers/print-separated-list.js'; import { isBinaryOperation } from '../slang-utils/is-binary-operation.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { TupleValue } from './TupleValue.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; import type { Expression } from './Expression.js'; -export class TupleValues implements SlangNode { +export class TupleValues extends SlangNode { readonly kind = NonterminalKind.TupleValues; - comments; - - loc; - items: TupleValue[]; constructor(ast: ast.TupleValues, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast, true); + super(ast, true); this.items = ast.items.map((item) => new TupleValue(item, options)); - updateMetadata(this.loc, this.comments, [this.items]); + this.updateMetadata([this.items]); } getSingleExpression(): Expression | undefined { diff --git a/src/slang-nodes/TypeExpression.ts b/src/slang-nodes/TypeExpression.ts index 0c5cadefe..1e7804148 100644 --- a/src/slang-nodes/TypeExpression.ts +++ b/src/slang-nodes/TypeExpression.ts @@ -1,27 +1,23 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { TypeName } from './TypeName.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class TypeExpression implements SlangNode { +export class TypeExpression extends SlangNode { readonly kind = NonterminalKind.TypeExpression; - comments; - - loc; - typeName: TypeName; constructor(ast: ast.TypeExpression, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.typeName = new TypeName(ast.typeName, options); - updateMetadata(this.loc, this.comments, [this.typeName]); + this.updateMetadata([this.typeName]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/TypeName.ts b/src/slang-nodes/TypeName.ts index df2f663fe..6e162c2e0 100644 --- a/src/slang-nodes/TypeName.ts +++ b/src/slang-nodes/TypeName.ts @@ -1,5 +1,5 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { ArrayTypeName } from './ArrayTypeName.js'; import { FunctionType } from './FunctionType.js'; import { MappingType } from './MappingType.js'; @@ -9,15 +9,11 @@ import { IdentifierPath } from './IdentifierPath.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class TypeName implements SlangNode { +export class TypeName extends SlangNode { readonly kind = NonterminalKind.TypeName; - comments; - - loc; - variant: | ArrayTypeName | FunctionType @@ -26,7 +22,7 @@ export class TypeName implements SlangNode { | IdentifierPath; constructor(ast: ast.TypeName, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); switch (ast.variant.cst.kind) { case NonterminalKind.ArrayTypeName: @@ -54,7 +50,7 @@ export class TypeName implements SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - updateMetadata(this.loc, this.comments, [this.variant]); + this.updateMetadata([this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/TypedTupleMember.ts b/src/slang-nodes/TypedTupleMember.ts index d455bd145..c2f5b1e3e 100644 --- a/src/slang-nodes/TypedTupleMember.ts +++ b/src/slang-nodes/TypedTupleMember.ts @@ -1,5 +1,5 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { joinExisting } from '../slang-utils/join-existing.js'; import { TypeName } from './TypeName.js'; import { StorageLocation } from './StorageLocation.js'; @@ -8,15 +8,11 @@ import { Identifier } from './Identifier.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class TypedTupleMember implements SlangNode { +export class TypedTupleMember extends SlangNode { readonly kind = NonterminalKind.TypedTupleMember; - comments; - - loc; - typeName: TypeName; storageLocation?: StorageLocation; @@ -24,7 +20,7 @@ export class TypedTupleMember implements SlangNode { name: Identifier; constructor(ast: ast.TypedTupleMember, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.typeName = new TypeName(ast.typeName, options); if (ast.storageLocation) { @@ -32,10 +28,7 @@ export class TypedTupleMember implements SlangNode { } this.name = new Identifier(ast.name); - updateMetadata(this.loc, this.comments, [ - this.typeName, - this.storageLocation - ]); + this.updateMetadata([this.typeName, this.storageLocation]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/UncheckedBlock.ts b/src/slang-nodes/UncheckedBlock.ts index 8ad57228c..76f554ee3 100644 --- a/src/slang-nodes/UncheckedBlock.ts +++ b/src/slang-nodes/UncheckedBlock.ts @@ -1,27 +1,23 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { Block } from './Block.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class UncheckedBlock implements SlangNode { +export class UncheckedBlock extends SlangNode { readonly kind = NonterminalKind.UncheckedBlock; - comments; - - loc; - block: Block; constructor(ast: ast.UncheckedBlock, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.block = new Block(ast.block, options); - updateMetadata(this.loc, this.comments, [this.block]); + this.updateMetadata([this.block]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/UnicodeStringLiteral.ts b/src/slang-nodes/UnicodeStringLiteral.ts index 4721f842a..68144b674 100644 --- a/src/slang-nodes/UnicodeStringLiteral.ts +++ b/src/slang-nodes/UnicodeStringLiteral.ts @@ -1,23 +1,18 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { printString } from '../slang-printers/print-string.js'; -import { getNodeMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { SlangNode } from '../types.d.ts'; -export class UnicodeStringLiteral implements SlangNode { +export class UnicodeStringLiteral extends SlangNode { readonly kind = NonterminalKind.UnicodeStringLiteral; - comments; - - loc; - variant: string; constructor(ast: ast.UnicodeStringLiteral, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.variant = ast.variant.unparse(); diff --git a/src/slang-nodes/UnicodeStringLiterals.ts b/src/slang-nodes/UnicodeStringLiterals.ts index 5934a69a6..c637c01f1 100644 --- a/src/slang-nodes/UnicodeStringLiterals.ts +++ b/src/slang-nodes/UnicodeStringLiterals.ts @@ -1,32 +1,28 @@ import { doc } from 'prettier'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { UnicodeStringLiteral } from './UnicodeStringLiteral.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { join, hardline } = doc.builders; -export class UnicodeStringLiterals implements SlangNode { +export class UnicodeStringLiterals extends SlangNode { readonly kind = NonterminalKind.UnicodeStringLiterals; - comments; - - loc; - items: UnicodeStringLiteral[]; constructor(ast: ast.UnicodeStringLiterals, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast, true); + super(ast, true); this.items = ast.items.map( (item) => new UnicodeStringLiteral(item, options) ); - updateMetadata(this.loc, this.comments, [this.items]); + this.updateMetadata([this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/UnnamedFunctionAttribute.ts b/src/slang-nodes/UnnamedFunctionAttribute.ts index bf83010d8..cf4048539 100644 --- a/src/slang-nodes/UnnamedFunctionAttribute.ts +++ b/src/slang-nodes/UnnamedFunctionAttribute.ts @@ -1,37 +1,29 @@ import { NonterminalKind, TerminalNode } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { ModifierInvocation } from './ModifierInvocation.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class UnnamedFunctionAttribute implements SlangNode { +export class UnnamedFunctionAttribute extends SlangNode { readonly kind = NonterminalKind.UnnamedFunctionAttribute; - comments; - - loc; - variant: ModifierInvocation | string; constructor( ast: ast.UnnamedFunctionAttribute, options: ParserOptions ) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.variant = ast.variant instanceof TerminalNode ? ast.variant.unparse() : new ModifierInvocation(ast.variant, options); - updateMetadata( - this.loc, - this.comments, - typeof this.variant === 'string' ? [] : [this.variant] - ); + this.updateMetadata(typeof this.variant === 'string' ? [] : [this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/UnnamedFunctionAttributes.ts b/src/slang-nodes/UnnamedFunctionAttributes.ts index 7eeaaeefe..136976598 100644 --- a/src/slang-nodes/UnnamedFunctionAttributes.ts +++ b/src/slang-nodes/UnnamedFunctionAttributes.ts @@ -1,36 +1,32 @@ import { doc } from 'prettier'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { sortFunctionAttributes } from '../slang-utils/sort-function-attributes.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { UnnamedFunctionAttribute } from './UnnamedFunctionAttribute.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { line } = doc.builders; -export class UnnamedFunctionAttributes implements SlangNode { +export class UnnamedFunctionAttributes extends SlangNode { readonly kind = NonterminalKind.UnnamedFunctionAttributes; - comments; - - loc; - items: UnnamedFunctionAttribute[]; constructor( ast: ast.UnnamedFunctionAttributes, options: ParserOptions ) { - [this.loc, this.comments] = getNodeMetadata(ast, true); + super(ast, true); this.items = ast.items.map( (item) => new UnnamedFunctionAttribute(item, options) ); - updateMetadata(this.loc, this.comments, [this.items]); + this.updateMetadata([this.items]); this.items = this.items.sort(sortFunctionAttributes); } diff --git a/src/slang-nodes/UnnamedFunctionDefinition.ts b/src/slang-nodes/UnnamedFunctionDefinition.ts index 8773ccc1f..9e35ca8b3 100644 --- a/src/slang-nodes/UnnamedFunctionDefinition.ts +++ b/src/slang-nodes/UnnamedFunctionDefinition.ts @@ -1,6 +1,6 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { printFunction } from '../slang-printers/print-function.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { ParametersDeclaration } from './ParametersDeclaration.js'; import { UnnamedFunctionAttributes } from './UnnamedFunctionAttributes.js'; import { FunctionBody } from './FunctionBody.js'; @@ -8,15 +8,11 @@ import { FunctionBody } from './FunctionBody.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class UnnamedFunctionDefinition implements SlangNode { +export class UnnamedFunctionDefinition extends SlangNode { readonly kind = NonterminalKind.UnnamedFunctionDefinition; - comments; - - loc; - parameters: ParametersDeclaration; attributes: UnnamedFunctionAttributes; @@ -27,17 +23,13 @@ export class UnnamedFunctionDefinition implements SlangNode { ast: ast.UnnamedFunctionDefinition, options: ParserOptions ) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.parameters = new ParametersDeclaration(ast.parameters, options); this.attributes = new UnnamedFunctionAttributes(ast.attributes, options); this.body = new FunctionBody(ast.body, options); - updateMetadata(this.loc, this.comments, [ - this.parameters, - this.attributes, - this.body - ]); + this.updateMetadata([this.parameters, this.attributes, this.body]); this.cleanModifierInvocationArguments(); } diff --git a/src/slang-nodes/UntypedTupleMember.ts b/src/slang-nodes/UntypedTupleMember.ts index 0db328d33..16c3b63a6 100644 --- a/src/slang-nodes/UntypedTupleMember.ts +++ b/src/slang-nodes/UntypedTupleMember.ts @@ -1,33 +1,29 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { joinExisting } from '../slang-utils/join-existing.js'; import { StorageLocation } from './StorageLocation.js'; import { Identifier } from './Identifier.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc } from 'prettier'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class UntypedTupleMember implements SlangNode { +export class UntypedTupleMember extends SlangNode { readonly kind = NonterminalKind.UntypedTupleMember; - comments; - - loc; - storageLocation?: StorageLocation; name: Identifier; constructor(ast: ast.UntypedTupleMember) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); if (ast.storageLocation) { this.storageLocation = new StorageLocation(ast.storageLocation); } this.name = new Identifier(ast.name); - updateMetadata(this.loc, this.comments, [this.storageLocation]); + this.updateMetadata([this.storageLocation]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/UserDefinedValueTypeDefinition.ts b/src/slang-nodes/UserDefinedValueTypeDefinition.ts index 09da09e4d..abaa3d2cd 100644 --- a/src/slang-nodes/UserDefinedValueTypeDefinition.ts +++ b/src/slang-nodes/UserDefinedValueTypeDefinition.ts @@ -1,30 +1,26 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { Identifier } from './Identifier.js'; import { ElementaryType } from './ElementaryType.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc } from 'prettier'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class UserDefinedValueTypeDefinition implements SlangNode { +export class UserDefinedValueTypeDefinition extends SlangNode { readonly kind = NonterminalKind.UserDefinedValueTypeDefinition; - comments; - - loc; - name: Identifier; valueType: ElementaryType; constructor(ast: ast.UserDefinedValueTypeDefinition) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.name = new Identifier(ast.name); this.valueType = new ElementaryType(ast.valueType); - updateMetadata(this.loc, this.comments, [this.valueType]); + this.updateMetadata([this.valueType]); } print( diff --git a/src/slang-nodes/UsingAlias.ts b/src/slang-nodes/UsingAlias.ts index bdc786235..b19c274a7 100644 --- a/src/slang-nodes/UsingAlias.ts +++ b/src/slang-nodes/UsingAlias.ts @@ -1,26 +1,22 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { UsingOperator } from './UsingOperator.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc } from 'prettier'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class UsingAlias implements SlangNode { +export class UsingAlias extends SlangNode { readonly kind = NonterminalKind.UsingAlias; - comments; - - loc; - operator: UsingOperator; constructor(ast: ast.UsingAlias) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.operator = new UsingOperator(ast.operator); - updateMetadata(this.loc, this.comments, [this.operator]); + this.updateMetadata([this.operator]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/UsingClause.ts b/src/slang-nodes/UsingClause.ts index 642347101..a47a879a0 100644 --- a/src/slang-nodes/UsingClause.ts +++ b/src/slang-nodes/UsingClause.ts @@ -1,23 +1,19 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { IdentifierPath } from './IdentifierPath.js'; import { UsingDeconstruction } from './UsingDeconstruction.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc } from 'prettier'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class UsingClause implements SlangNode { +export class UsingClause extends SlangNode { readonly kind = NonterminalKind.UsingClause; - comments; - - loc; - variant: IdentifierPath | UsingDeconstruction; constructor(ast: ast.UsingClause) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); switch (ast.variant.cst.kind) { case NonterminalKind.IdentifierPath: @@ -32,7 +28,7 @@ export class UsingClause implements SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - updateMetadata(this.loc, this.comments, [this.variant]); + this.updateMetadata([this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/UsingDeconstruction.ts b/src/slang-nodes/UsingDeconstruction.ts index 5230f8360..854495015 100644 --- a/src/slang-nodes/UsingDeconstruction.ts +++ b/src/slang-nodes/UsingDeconstruction.ts @@ -1,26 +1,22 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { UsingDeconstructionSymbols } from './UsingDeconstructionSymbols.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc } from 'prettier'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class UsingDeconstruction implements SlangNode { +export class UsingDeconstruction extends SlangNode { readonly kind = NonterminalKind.UsingDeconstruction; - comments; - - loc; - symbols: UsingDeconstructionSymbols; constructor(ast: ast.UsingDeconstruction) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.symbols = new UsingDeconstructionSymbols(ast.symbols); - updateMetadata(this.loc, this.comments, [this.symbols]); + this.updateMetadata([this.symbols]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/UsingDeconstructionSymbol.ts b/src/slang-nodes/UsingDeconstructionSymbol.ts index ba52d25a5..01d4da28c 100644 --- a/src/slang-nodes/UsingDeconstructionSymbol.ts +++ b/src/slang-nodes/UsingDeconstructionSymbol.ts @@ -1,32 +1,28 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { IdentifierPath } from './IdentifierPath.js'; import { UsingAlias } from './UsingAlias.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc } from 'prettier'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class UsingDeconstructionSymbol implements SlangNode { +export class UsingDeconstructionSymbol extends SlangNode { readonly kind = NonterminalKind.UsingDeconstructionSymbol; - comments; - - loc; - name: IdentifierPath; alias?: UsingAlias; constructor(ast: ast.UsingDeconstructionSymbol) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.name = new IdentifierPath(ast.name); if (ast.alias) { this.alias = new UsingAlias(ast.alias); } - updateMetadata(this.loc, this.comments, [this.name, this.alias]); + this.updateMetadata([this.name, this.alias]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/UsingDeconstructionSymbols.ts b/src/slang-nodes/UsingDeconstructionSymbols.ts index 623d737c8..48e2a70f5 100644 --- a/src/slang-nodes/UsingDeconstructionSymbols.ts +++ b/src/slang-nodes/UsingDeconstructionSymbols.ts @@ -1,31 +1,27 @@ import { doc } from 'prettier'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { printSeparatedList } from '../slang-printers/print-separated-list.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { UsingDeconstructionSymbol } from './UsingDeconstructionSymbol.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { line, softline } = doc.builders; -export class UsingDeconstructionSymbols implements SlangNode { +export class UsingDeconstructionSymbols extends SlangNode { readonly kind = NonterminalKind.UsingDeconstructionSymbols; - comments; - - loc; - items: UsingDeconstructionSymbol[]; constructor(ast: ast.UsingDeconstructionSymbols) { - [this.loc, this.comments] = getNodeMetadata(ast, true); + super(ast, true); this.items = ast.items.map((item) => new UsingDeconstructionSymbol(item)); - updateMetadata(this.loc, this.comments, [this.items]); + this.updateMetadata([this.items]); } print( diff --git a/src/slang-nodes/UsingDirective.ts b/src/slang-nodes/UsingDirective.ts index b8c349af5..7108ccd6f 100644 --- a/src/slang-nodes/UsingDirective.ts +++ b/src/slang-nodes/UsingDirective.ts @@ -1,5 +1,5 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { joinExisting } from '../slang-utils/join-existing.js'; import { UsingClause } from './UsingClause.js'; import { UsingTarget } from './UsingTarget.js'; @@ -7,15 +7,11 @@ import { UsingTarget } from './UsingTarget.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class UsingDirective implements SlangNode { +export class UsingDirective extends SlangNode { readonly kind = NonterminalKind.UsingDirective; - comments; - - loc; - clause: UsingClause; target: UsingTarget; @@ -23,13 +19,13 @@ export class UsingDirective implements SlangNode { globalKeyword?: string; constructor(ast: ast.UsingDirective, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.clause = new UsingClause(ast.clause); this.target = new UsingTarget(ast.target, options); this.globalKeyword = ast.globalKeyword?.unparse(); - updateMetadata(this.loc, this.comments, [this.clause, this.target]); + this.updateMetadata([this.clause, this.target]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/UsingOperator.ts b/src/slang-nodes/UsingOperator.ts index fc667478c..48cbbe861 100644 --- a/src/slang-nodes/UsingOperator.ts +++ b/src/slang-nodes/UsingOperator.ts @@ -1,21 +1,16 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { Doc } from 'prettier'; -import type { SlangNode } from '../types.d.ts'; -export class UsingOperator implements SlangNode { +export class UsingOperator extends SlangNode { readonly kind = NonterminalKind.UsingOperator; - comments; - - loc; - variant: string; constructor(ast: ast.UsingOperator) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.variant = ast.variant.unparse(); } diff --git a/src/slang-nodes/UsingTarget.ts b/src/slang-nodes/UsingTarget.ts index f2500f4ca..4e221aef7 100644 --- a/src/slang-nodes/UsingTarget.ts +++ b/src/slang-nodes/UsingTarget.ts @@ -1,34 +1,26 @@ import { NonterminalKind, TerminalNode } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { TypeName } from './TypeName.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class UsingTarget implements SlangNode { +export class UsingTarget extends SlangNode { readonly kind = NonterminalKind.UsingTarget; - comments; - - loc; - variant: TypeName | string; constructor(ast: ast.UsingTarget, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.variant = ast.variant instanceof TerminalNode ? ast.variant.unparse() : new TypeName(ast.variant, options); - updateMetadata( - this.loc, - this.comments, - typeof this.variant === 'string' ? [] : [this.variant] - ); + this.updateMetadata(typeof this.variant === 'string' ? [] : [this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/VariableDeclarationStatement.ts b/src/slang-nodes/VariableDeclarationStatement.ts index 48690a4ad..487c7df38 100644 --- a/src/slang-nodes/VariableDeclarationStatement.ts +++ b/src/slang-nodes/VariableDeclarationStatement.ts @@ -1,6 +1,6 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { doc } from 'prettier'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { VariableDeclarationType } from './VariableDeclarationType.js'; import { StorageLocation } from './StorageLocation.js'; import { Identifier } from './Identifier.js'; @@ -9,17 +9,13 @@ import { VariableDeclarationValue } from './VariableDeclarationValue.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { group, indent, indentIfBreak, line } = doc.builders; -export class VariableDeclarationStatement implements SlangNode { +export class VariableDeclarationStatement extends SlangNode { readonly kind = NonterminalKind.VariableDeclarationStatement; - comments; - - loc; - variableType: VariableDeclarationType; storageLocation?: StorageLocation; @@ -32,7 +28,7 @@ export class VariableDeclarationStatement implements SlangNode { ast: ast.VariableDeclarationStatement, options: ParserOptions ) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.variableType = new VariableDeclarationType(ast.variableType, options); if (ast.storageLocation) { @@ -43,11 +39,7 @@ export class VariableDeclarationStatement implements SlangNode { this.value = new VariableDeclarationValue(ast.value, options); } - updateMetadata(this.loc, this.comments, [ - this.variableType, - this.storageLocation, - this.value - ]); + this.updateMetadata([this.variableType, this.storageLocation, this.value]); } print( diff --git a/src/slang-nodes/VariableDeclarationType.ts b/src/slang-nodes/VariableDeclarationType.ts index ed75f4392..9f3aa6ec4 100644 --- a/src/slang-nodes/VariableDeclarationType.ts +++ b/src/slang-nodes/VariableDeclarationType.ts @@ -1,37 +1,29 @@ import { NonterminalKind, TerminalNode } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { TypeName } from './TypeName.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class VariableDeclarationType implements SlangNode { +export class VariableDeclarationType extends SlangNode { readonly kind = NonterminalKind.VariableDeclarationType; - comments; - - loc; - variant: TypeName | string; constructor( ast: ast.VariableDeclarationType, options: ParserOptions ) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.variant = ast.variant instanceof TerminalNode ? ast.variant.unparse() : new TypeName(ast.variant, options); - updateMetadata( - this.loc, - this.comments, - typeof this.variant === 'string' ? [] : [this.variant] - ); + this.updateMetadata(typeof this.variant === 'string' ? [] : [this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/VariableDeclarationValue.ts b/src/slang-nodes/VariableDeclarationValue.ts index c7dfc1ec1..4c560ecfe 100644 --- a/src/slang-nodes/VariableDeclarationValue.ts +++ b/src/slang-nodes/VariableDeclarationValue.ts @@ -1,30 +1,26 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { Expression } from './Expression.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class VariableDeclarationValue implements SlangNode { +export class VariableDeclarationValue extends SlangNode { readonly kind = NonterminalKind.VariableDeclarationValue; - comments; - - loc; - expression: Expression; constructor( ast: ast.VariableDeclarationValue, options: ParserOptions ) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.expression = new Expression(ast.expression, options); - updateMetadata(this.loc, this.comments, [this.expression]); + this.updateMetadata([this.expression]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/VersionExpression.ts b/src/slang-nodes/VersionExpression.ts index 2b631d4d7..132b91f99 100644 --- a/src/slang-nodes/VersionExpression.ts +++ b/src/slang-nodes/VersionExpression.ts @@ -1,23 +1,19 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { VersionRange } from './VersionRange.js'; import { VersionTerm } from './VersionTerm.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc } from 'prettier'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class VersionExpression implements SlangNode { +export class VersionExpression extends SlangNode { readonly kind = NonterminalKind.VersionExpression; - comments; - - loc; - variant: VersionRange | VersionTerm; constructor(ast: ast.VersionExpression) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); switch (ast.variant.cst.kind) { case NonterminalKind.VersionRange: @@ -30,7 +26,7 @@ export class VersionExpression implements SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - updateMetadata(this.loc, this.comments, [this.variant]); + this.updateMetadata([this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/VersionExpressionSet.ts b/src/slang-nodes/VersionExpressionSet.ts index 351058bda..4b9b26526 100644 --- a/src/slang-nodes/VersionExpressionSet.ts +++ b/src/slang-nodes/VersionExpressionSet.ts @@ -1,29 +1,25 @@ import { doc } from 'prettier'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { VersionExpression } from './VersionExpression.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc } from 'prettier'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { join } = doc.builders; -export class VersionExpressionSet implements SlangNode { +export class VersionExpressionSet extends SlangNode { readonly kind = NonterminalKind.VersionExpressionSet; - comments; - - loc; - items: VersionExpression[]; constructor(ast: ast.VersionExpressionSet) { - [this.loc, this.comments] = getNodeMetadata(ast, true); + super(ast, true); this.items = ast.items.map((item) => new VersionExpression(item)); - updateMetadata(this.loc, this.comments, [this.items]); + this.updateMetadata([this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/VersionExpressionSets.ts b/src/slang-nodes/VersionExpressionSets.ts index be5e2802a..8cea1e3e1 100644 --- a/src/slang-nodes/VersionExpressionSets.ts +++ b/src/slang-nodes/VersionExpressionSets.ts @@ -1,29 +1,25 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { doc } from 'prettier'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { VersionExpressionSet } from './VersionExpressionSet.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc } from 'prettier'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { join } = doc.builders; -export class VersionExpressionSets implements SlangNode { +export class VersionExpressionSets extends SlangNode { readonly kind = NonterminalKind.VersionExpressionSets; - comments; - - loc; - items: VersionExpressionSet[]; constructor(ast: ast.VersionExpressionSets) { - [this.loc, this.comments] = getNodeMetadata(ast, true); + super(ast, true); this.items = ast.items.map((item) => new VersionExpressionSet(item)); - updateMetadata(this.loc, this.comments, [this.items]); + this.updateMetadata([this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/VersionLiteral.ts b/src/slang-nodes/VersionLiteral.ts index 4e61fe059..fc7408c6f 100644 --- a/src/slang-nodes/VersionLiteral.ts +++ b/src/slang-nodes/VersionLiteral.ts @@ -1,33 +1,25 @@ import { NonterminalKind, TerminalNode } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { SimpleVersionLiteral } from './SimpleVersionLiteral.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc } from 'prettier'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class VersionLiteral implements SlangNode { +export class VersionLiteral extends SlangNode { readonly kind = NonterminalKind.VersionLiteral; - comments; - - loc; - variant: SimpleVersionLiteral | string; constructor(ast: ast.VersionLiteral) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.variant = ast.variant instanceof TerminalNode ? ast.variant.unparse() : new SimpleVersionLiteral(ast.variant); - updateMetadata( - this.loc, - this.comments, - typeof this.variant === 'string' ? [] : [this.variant] - ); + this.updateMetadata(typeof this.variant === 'string' ? [] : [this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/VersionOperator.ts b/src/slang-nodes/VersionOperator.ts index 8c6ba7572..a94a213f0 100644 --- a/src/slang-nodes/VersionOperator.ts +++ b/src/slang-nodes/VersionOperator.ts @@ -1,21 +1,16 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { Doc } from 'prettier'; -import type { SlangNode } from '../types.d.ts'; -export class VersionOperator implements SlangNode { +export class VersionOperator extends SlangNode { readonly kind = NonterminalKind.VersionOperator; - comments; - - loc; - variant: string; constructor(ast: ast.VersionOperator) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.variant = ast.variant.unparse(); } diff --git a/src/slang-nodes/VersionPragma.ts b/src/slang-nodes/VersionPragma.ts index 36eec5936..da9779752 100644 --- a/src/slang-nodes/VersionPragma.ts +++ b/src/slang-nodes/VersionPragma.ts @@ -1,26 +1,22 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { VersionExpressionSets } from './VersionExpressionSets.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc } from 'prettier'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class VersionPragma implements SlangNode { +export class VersionPragma extends SlangNode { readonly kind = NonterminalKind.VersionPragma; - comments; - - loc; - sets: VersionExpressionSets; constructor(ast: ast.VersionPragma) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.sets = new VersionExpressionSets(ast.sets); - updateMetadata(this.loc, this.comments, [this.sets]); + this.updateMetadata([this.sets]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/VersionRange.ts b/src/slang-nodes/VersionRange.ts index cc65723bc..2e6ee9748 100644 --- a/src/slang-nodes/VersionRange.ts +++ b/src/slang-nodes/VersionRange.ts @@ -1,29 +1,25 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { VersionLiteral } from './VersionLiteral.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc } from 'prettier'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class VersionRange implements SlangNode { +export class VersionRange extends SlangNode { readonly kind = NonterminalKind.VersionRange; - comments; - - loc; - start: VersionLiteral; end: VersionLiteral; constructor(ast: ast.VersionRange) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.start = new VersionLiteral(ast.start); this.end = new VersionLiteral(ast.end); - updateMetadata(this.loc, this.comments, [this.start, this.end]); + this.updateMetadata([this.start, this.end]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/VersionTerm.ts b/src/slang-nodes/VersionTerm.ts index 5485f06f6..5b9bfbcc1 100644 --- a/src/slang-nodes/VersionTerm.ts +++ b/src/slang-nodes/VersionTerm.ts @@ -1,32 +1,28 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { VersionOperator } from './VersionOperator.js'; import { VersionLiteral } from './VersionLiteral.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc } from 'prettier'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class VersionTerm implements SlangNode { +export class VersionTerm extends SlangNode { readonly kind = NonterminalKind.VersionTerm; - comments; - - loc; - operator?: VersionOperator; literal: VersionLiteral; constructor(ast: ast.VersionTerm) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); if (ast.operator) { this.operator = new VersionOperator(ast.operator); } this.literal = new VersionLiteral(ast.literal); - updateMetadata(this.loc, this.comments, [this.operator, this.literal]); + this.updateMetadata([this.operator, this.literal]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/WhileStatement.ts b/src/slang-nodes/WhileStatement.ts index 9efbdd996..daf6ff13e 100644 --- a/src/slang-nodes/WhileStatement.ts +++ b/src/slang-nodes/WhileStatement.ts @@ -1,35 +1,31 @@ import { doc } from 'prettier'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { printSeparatedItem } from '../slang-printers/print-separated-item.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { Expression } from './Expression.js'; import { Statement } from './Statement.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { group, indent, line } = doc.builders; -export class WhileStatement implements SlangNode { +export class WhileStatement extends SlangNode { readonly kind = NonterminalKind.WhileStatement; - comments; - - loc; - condition: Expression; body: Statement; constructor(ast: ast.WhileStatement, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.condition = new Expression(ast.condition, options); this.body = new Statement(ast.body, options); - updateMetadata(this.loc, this.comments, [this.condition, this.body]); + this.updateMetadata([this.condition, this.body]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulArguments.ts b/src/slang-nodes/YulArguments.ts index e2df17aed..c01877271 100644 --- a/src/slang-nodes/YulArguments.ts +++ b/src/slang-nodes/YulArguments.ts @@ -1,28 +1,24 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { printSeparatedList } from '../slang-printers/print-separated-list.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { YulExpression } from './YulExpression.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class YulArguments implements SlangNode { +export class YulArguments extends SlangNode { readonly kind = NonterminalKind.YulArguments; - comments; - - loc; - items: YulExpression[]; constructor(ast: ast.YulArguments, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast, true); + super(ast, true); this.items = ast.items.map((item) => new YulExpression(item, options)); - updateMetadata(this.loc, this.comments, [this.items]); + this.updateMetadata([this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulAssignmentOperator.ts b/src/slang-nodes/YulAssignmentOperator.ts index 99ae0ab95..37cca137a 100644 --- a/src/slang-nodes/YulAssignmentOperator.ts +++ b/src/slang-nodes/YulAssignmentOperator.ts @@ -1,33 +1,25 @@ import { NonterminalKind, TerminalNode } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { YulColonAndEqual } from './YulColonAndEqual.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc } from 'prettier'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class YulAssignmentOperator implements SlangNode { +export class YulAssignmentOperator extends SlangNode { readonly kind = NonterminalKind.YulAssignmentOperator; - comments; - - loc; - variant: YulColonAndEqual | string; constructor(ast: ast.YulAssignmentOperator) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.variant = ast.variant instanceof TerminalNode ? ast.variant.unparse() : new YulColonAndEqual(ast.variant); - updateMetadata( - this.loc, - this.comments, - typeof this.variant === 'string' ? [] : [this.variant] - ); + this.updateMetadata(typeof this.variant === 'string' ? [] : [this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulBlock.ts b/src/slang-nodes/YulBlock.ts index a3becde3e..26dabc517 100644 --- a/src/slang-nodes/YulBlock.ts +++ b/src/slang-nodes/YulBlock.ts @@ -1,27 +1,23 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { YulStatements } from './YulStatements.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class YulBlock implements SlangNode { +export class YulBlock extends SlangNode { readonly kind = NonterminalKind.YulBlock; - comments; - - loc; - statements: YulStatements; constructor(ast: ast.YulBlock, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.statements = new YulStatements(ast.statements, options); - updateMetadata(this.loc, this.comments, [this.statements]); + this.updateMetadata([this.statements]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulBreakStatement.ts b/src/slang-nodes/YulBreakStatement.ts index 134225a18..96a48843c 100644 --- a/src/slang-nodes/YulBreakStatement.ts +++ b/src/slang-nodes/YulBreakStatement.ts @@ -1,19 +1,14 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { Doc } from 'prettier'; -import type { SlangNode } from '../types.d.ts'; -export class YulBreakStatement implements SlangNode { +export class YulBreakStatement extends SlangNode { readonly kind = NonterminalKind.YulBreakStatement; - comments; - - loc; - constructor(ast: ast.YulBreakStatement) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); } print(): Doc { diff --git a/src/slang-nodes/YulColonAndEqual.ts b/src/slang-nodes/YulColonAndEqual.ts index 3178cd0a6..3e9f49d2f 100644 --- a/src/slang-nodes/YulColonAndEqual.ts +++ b/src/slang-nodes/YulColonAndEqual.ts @@ -1,19 +1,14 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { Doc } from 'prettier'; -import type { SlangNode } from '../types.d.ts'; -export class YulColonAndEqual implements SlangNode { +export class YulColonAndEqual extends SlangNode { readonly kind = NonterminalKind.YulColonAndEqual; - comments; - - loc; - constructor(ast: ast.YulColonAndEqual) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); } print(): Doc { diff --git a/src/slang-nodes/YulContinueStatement.ts b/src/slang-nodes/YulContinueStatement.ts index 813ac8ba3..93bbd3eb2 100644 --- a/src/slang-nodes/YulContinueStatement.ts +++ b/src/slang-nodes/YulContinueStatement.ts @@ -1,19 +1,14 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { Doc } from 'prettier'; -import type { SlangNode } from '../types.d.ts'; -export class YulContinueStatement implements SlangNode { +export class YulContinueStatement extends SlangNode { readonly kind = NonterminalKind.YulContinueStatement; - comments; - - loc; - constructor(ast: ast.YulContinueStatement) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); } print(): Doc { diff --git a/src/slang-nodes/YulDefaultCase.ts b/src/slang-nodes/YulDefaultCase.ts index 0a23fe902..c48364a61 100644 --- a/src/slang-nodes/YulDefaultCase.ts +++ b/src/slang-nodes/YulDefaultCase.ts @@ -1,27 +1,23 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { YulBlock } from './YulBlock.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class YulDefaultCase implements SlangNode { +export class YulDefaultCase extends SlangNode { readonly kind = NonterminalKind.YulDefaultCase; - comments; - - loc; - body: YulBlock; constructor(ast: ast.YulDefaultCase, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.body = new YulBlock(ast.body, options); - updateMetadata(this.loc, this.comments, [this.body]); + this.updateMetadata([this.body]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulEqualAndColon.ts b/src/slang-nodes/YulEqualAndColon.ts index 44cf90ceb..eac4d384d 100644 --- a/src/slang-nodes/YulEqualAndColon.ts +++ b/src/slang-nodes/YulEqualAndColon.ts @@ -1,19 +1,14 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { Doc } from 'prettier'; -import type { SlangNode } from '../types.d.ts'; -export class YulEqualAndColon implements SlangNode { +export class YulEqualAndColon extends SlangNode { readonly kind = NonterminalKind.YulEqualAndColon; - comments; - - loc; - constructor(ast: ast.YulEqualAndColon) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); } print(): Doc { diff --git a/src/slang-nodes/YulExpression.ts b/src/slang-nodes/YulExpression.ts index 97ce6d910..0756ed016 100644 --- a/src/slang-nodes/YulExpression.ts +++ b/src/slang-nodes/YulExpression.ts @@ -1,5 +1,5 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { YulFunctionCallExpression } from './YulFunctionCallExpression.js'; import { YulLiteral } from './YulLiteral.js'; import { YulPath } from './YulPath.js'; @@ -7,19 +7,15 @@ import { YulPath } from './YulPath.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class YulExpression implements SlangNode { +export class YulExpression extends SlangNode { readonly kind = NonterminalKind.YulExpression; - comments; - - loc; - variant: YulFunctionCallExpression | YulLiteral | YulPath; constructor(ast: ast.YulExpression, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); switch (ast.variant.cst.kind) { case NonterminalKind.YulFunctionCallExpression: @@ -38,7 +34,7 @@ export class YulExpression implements SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - updateMetadata(this.loc, this.comments, [this.variant]); + this.updateMetadata([this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulForStatement.ts b/src/slang-nodes/YulForStatement.ts index 4f2706956..4663a0e08 100644 --- a/src/slang-nodes/YulForStatement.ts +++ b/src/slang-nodes/YulForStatement.ts @@ -1,23 +1,19 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { doc } from 'prettier'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { YulBlock } from './YulBlock.js'; import { YulExpression } from './YulExpression.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { join } = doc.builders; -export class YulForStatement implements SlangNode { +export class YulForStatement extends SlangNode { readonly kind = NonterminalKind.YulForStatement; - comments; - - loc; - initialization: YulBlock; condition: YulExpression; @@ -27,14 +23,14 @@ export class YulForStatement implements SlangNode { body: YulBlock; constructor(ast: ast.YulForStatement, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.initialization = new YulBlock(ast.initialization, options); this.condition = new YulExpression(ast.condition, options); this.iterator = new YulBlock(ast.iterator, options); this.body = new YulBlock(ast.body, options); - updateMetadata(this.loc, this.comments, [ + this.updateMetadata([ this.initialization, this.condition, this.iterator, diff --git a/src/slang-nodes/YulFunctionCallExpression.ts b/src/slang-nodes/YulFunctionCallExpression.ts index 97c34b7c9..5a50afadb 100644 --- a/src/slang-nodes/YulFunctionCallExpression.ts +++ b/src/slang-nodes/YulFunctionCallExpression.ts @@ -1,20 +1,16 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { YulExpression } from './YulExpression.js'; import { YulArguments } from './YulArguments.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class YulFunctionCallExpression implements SlangNode { +export class YulFunctionCallExpression extends SlangNode { readonly kind = NonterminalKind.YulFunctionCallExpression; - comments; - - loc; - operand: YulExpression; arguments: YulArguments; @@ -23,12 +19,12 @@ export class YulFunctionCallExpression implements SlangNode { ast: ast.YulFunctionCallExpression, options: ParserOptions ) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.operand = new YulExpression(ast.operand, options); this.arguments = new YulArguments(ast.arguments, options); - updateMetadata(this.loc, this.comments, [this.operand, this.arguments]); + this.updateMetadata([this.operand, this.arguments]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulFunctionDefinition.ts b/src/slang-nodes/YulFunctionDefinition.ts index bcafded04..78cda4f86 100644 --- a/src/slang-nodes/YulFunctionDefinition.ts +++ b/src/slang-nodes/YulFunctionDefinition.ts @@ -1,5 +1,5 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { YulIdentifier } from './YulIdentifier.js'; import { YulParametersDeclaration } from './YulParametersDeclaration.js'; import { YulReturnsDeclaration } from './YulReturnsDeclaration.js'; @@ -8,15 +8,11 @@ import { YulBlock } from './YulBlock.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class YulFunctionDefinition implements SlangNode { +export class YulFunctionDefinition extends SlangNode { readonly kind = NonterminalKind.YulFunctionDefinition; - comments; - - loc; - name: YulIdentifier; parameters: YulParametersDeclaration; @@ -26,7 +22,7 @@ export class YulFunctionDefinition implements SlangNode { body: YulBlock; constructor(ast: ast.YulFunctionDefinition, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.name = new YulIdentifier(ast.name); this.parameters = new YulParametersDeclaration(ast.parameters); @@ -35,11 +31,7 @@ export class YulFunctionDefinition implements SlangNode { } this.body = new YulBlock(ast.body, options); - updateMetadata(this.loc, this.comments, [ - this.parameters, - this.returns, - this.body - ]); + this.updateMetadata([this.parameters, this.returns, this.body]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulIdentifier.ts b/src/slang-nodes/YulIdentifier.ts index 2ffaa11f4..fac6a0d1a 100644 --- a/src/slang-nodes/YulIdentifier.ts +++ b/src/slang-nodes/YulIdentifier.ts @@ -1,21 +1,15 @@ import { TerminalKind, TerminalNode } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import type { Doc } from 'prettier'; -import type { Location, SlangNode } from '../types.d.ts'; -import type { Comment } from './types.d.ts'; -export class YulIdentifier implements SlangNode { +export class YulIdentifier extends SlangNode { readonly kind = TerminalKind.YulIdentifier; - comments: Comment[]; - - loc: Location; - value: string; constructor(ast: TerminalNode) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.value = ast.unparse(); } diff --git a/src/slang-nodes/YulIfStatement.ts b/src/slang-nodes/YulIfStatement.ts index 0a5ac1a32..6d92c4407 100644 --- a/src/slang-nodes/YulIfStatement.ts +++ b/src/slang-nodes/YulIfStatement.ts @@ -1,31 +1,27 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { YulExpression } from './YulExpression.js'; import { YulBlock } from './YulBlock.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class YulIfStatement implements SlangNode { +export class YulIfStatement extends SlangNode { readonly kind = NonterminalKind.YulIfStatement; - comments; - - loc; - condition: YulExpression; body: YulBlock; constructor(ast: ast.YulIfStatement, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.condition = new YulExpression(ast.condition, options); this.body = new YulBlock(ast.body, options); - updateMetadata(this.loc, this.comments, [this.condition, this.body]); + this.updateMetadata([this.condition, this.body]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulLabel.ts b/src/slang-nodes/YulLabel.ts index cb91305a1..12e12b1df 100644 --- a/src/slang-nodes/YulLabel.ts +++ b/src/slang-nodes/YulLabel.ts @@ -1,25 +1,21 @@ import { doc } from 'prettier'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { YulIdentifier } from './YulIdentifier.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc } from 'prettier'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { dedent, line } = doc.builders; -export class YulLabel implements SlangNode { +export class YulLabel extends SlangNode { readonly kind = NonterminalKind.YulLabel; - comments; - - loc; - label: YulIdentifier; constructor(ast: ast.YulLabel) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.label = new YulIdentifier(ast.label); } diff --git a/src/slang-nodes/YulLeaveStatement.ts b/src/slang-nodes/YulLeaveStatement.ts index abb4b37cd..eccf192b8 100644 --- a/src/slang-nodes/YulLeaveStatement.ts +++ b/src/slang-nodes/YulLeaveStatement.ts @@ -1,19 +1,14 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { Doc } from 'prettier'; -import type { SlangNode } from '../types.d.ts'; -export class YulLeaveStatement implements SlangNode { +export class YulLeaveStatement extends SlangNode { readonly kind = NonterminalKind.YulLeaveStatement; - comments; - - loc; - constructor(ast: ast.YulLeaveStatement) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); } print(): Doc { diff --git a/src/slang-nodes/YulLiteral.ts b/src/slang-nodes/YulLiteral.ts index 173d086ce..8ad27acfb 100644 --- a/src/slang-nodes/YulLiteral.ts +++ b/src/slang-nodes/YulLiteral.ts @@ -1,24 +1,20 @@ import { NonterminalKind, TerminalNode } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { HexStringLiteral } from './HexStringLiteral.js'; import { StringLiteral } from './StringLiteral.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class YulLiteral implements SlangNode { +export class YulLiteral extends SlangNode { readonly kind = NonterminalKind.YulLiteral; - comments; - - loc; - variant: HexStringLiteral | StringLiteral | string; constructor(ast: ast.YulLiteral, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); if (ast.variant instanceof TerminalNode) { this.variant = ast.variant.unparse(); @@ -41,11 +37,7 @@ export class YulLiteral implements SlangNode { } } - updateMetadata( - this.loc, - this.comments, - typeof this.variant === 'string' ? [] : [this.variant] - ); + this.updateMetadata(typeof this.variant === 'string' ? [] : [this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulParameters.ts b/src/slang-nodes/YulParameters.ts index 45c64012f..8492a6352 100644 --- a/src/slang-nodes/YulParameters.ts +++ b/src/slang-nodes/YulParameters.ts @@ -1,23 +1,19 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { printSeparatedList } from '../slang-printers/print-separated-list.js'; -import { getNodeMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { YulIdentifier } from './YulIdentifier.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc } from 'prettier'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class YulParameters implements SlangNode { +export class YulParameters extends SlangNode { readonly kind = NonterminalKind.YulParameters; - comments; - - loc; - items: YulIdentifier[]; constructor(ast: ast.YulParameters) { - [this.loc, this.comments] = getNodeMetadata(ast, true); + super(ast, true); this.items = ast.items.map((item) => new YulIdentifier(item)); } diff --git a/src/slang-nodes/YulParametersDeclaration.ts b/src/slang-nodes/YulParametersDeclaration.ts index cd36c5489..99a5949ee 100644 --- a/src/slang-nodes/YulParametersDeclaration.ts +++ b/src/slang-nodes/YulParametersDeclaration.ts @@ -1,26 +1,22 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { YulParameters } from './YulParameters.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc } from 'prettier'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class YulParametersDeclaration implements SlangNode { +export class YulParametersDeclaration extends SlangNode { readonly kind = NonterminalKind.YulParametersDeclaration; - comments; - - loc; - parameters: YulParameters; constructor(ast: ast.YulParametersDeclaration) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.parameters = new YulParameters(ast.parameters); - updateMetadata(this.loc, this.comments, [this.parameters]); + this.updateMetadata([this.parameters]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulPath.ts b/src/slang-nodes/YulPath.ts index db0555cbc..6719693f8 100644 --- a/src/slang-nodes/YulPath.ts +++ b/src/slang-nodes/YulPath.ts @@ -1,25 +1,21 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { doc } from 'prettier'; -import { getNodeMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { YulIdentifier } from './YulIdentifier.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc } from 'prettier'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { join } = doc.builders; -export class YulPath implements SlangNode { +export class YulPath extends SlangNode { readonly kind = NonterminalKind.YulPath; - comments; - - loc; - items: YulIdentifier[]; constructor(ast: ast.YulPath) { - [this.loc, this.comments] = getNodeMetadata(ast, true); + super(ast, true); this.items = ast.items.map((item) => new YulIdentifier(item)); } diff --git a/src/slang-nodes/YulPaths.ts b/src/slang-nodes/YulPaths.ts index c91890cc3..f7c0c0e38 100644 --- a/src/slang-nodes/YulPaths.ts +++ b/src/slang-nodes/YulPaths.ts @@ -1,29 +1,25 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { doc } from 'prettier'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { YulPath } from './YulPath.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc } from 'prettier'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { join } = doc.builders; -export class YulPaths implements SlangNode { +export class YulPaths extends SlangNode { readonly kind = NonterminalKind.YulPaths; - comments; - - loc; - items: YulPath[]; constructor(ast: ast.YulPaths) { - [this.loc, this.comments] = getNodeMetadata(ast, true); + super(ast, true); this.items = ast.items.map((item) => new YulPath(item)); - updateMetadata(this.loc, this.comments, [this.items]); + this.updateMetadata([this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulReturnsDeclaration.ts b/src/slang-nodes/YulReturnsDeclaration.ts index 17d5f6639..9e54a3dff 100644 --- a/src/slang-nodes/YulReturnsDeclaration.ts +++ b/src/slang-nodes/YulReturnsDeclaration.ts @@ -1,30 +1,26 @@ import { doc } from 'prettier'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { printSeparatedItem } from '../slang-printers/print-separated-item.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { YulVariableNames } from './YulVariableNames.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc } from 'prettier'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { line } = doc.builders; -export class YulReturnsDeclaration implements SlangNode { +export class YulReturnsDeclaration extends SlangNode { readonly kind = NonterminalKind.YulReturnsDeclaration; - comments; - - loc; - variables: YulVariableNames; constructor(ast: ast.YulReturnsDeclaration) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.variables = new YulVariableNames(ast.variables); - updateMetadata(this.loc, this.comments, [this.variables]); + this.updateMetadata([this.variables]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulStackAssignmentOperator.ts b/src/slang-nodes/YulStackAssignmentOperator.ts index f4525cd0d..7d91a2671 100644 --- a/src/slang-nodes/YulStackAssignmentOperator.ts +++ b/src/slang-nodes/YulStackAssignmentOperator.ts @@ -1,33 +1,25 @@ import { NonterminalKind, TerminalNode } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { YulEqualAndColon } from './YulEqualAndColon.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc } from 'prettier'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class YulStackAssignmentOperator implements SlangNode { +export class YulStackAssignmentOperator extends SlangNode { readonly kind = NonterminalKind.YulStackAssignmentOperator; - comments; - - loc; - variant: YulEqualAndColon | string; constructor(ast: ast.YulStackAssignmentOperator) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.variant = ast.variant instanceof TerminalNode ? ast.variant.unparse() : new YulEqualAndColon(ast.variant); - updateMetadata( - this.loc, - this.comments, - typeof this.variant === 'string' ? [] : [this.variant] - ); + this.updateMetadata(typeof this.variant === 'string' ? [] : [this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulStackAssignmentStatement.ts b/src/slang-nodes/YulStackAssignmentStatement.ts index f355fd738..b365ded24 100644 --- a/src/slang-nodes/YulStackAssignmentStatement.ts +++ b/src/slang-nodes/YulStackAssignmentStatement.ts @@ -1,34 +1,30 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { doc } from 'prettier'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { printSeparatedItem } from '../slang-printers/print-separated-item.js'; import { YulStackAssignmentOperator } from './YulStackAssignmentOperator.js'; import { YulIdentifier } from './YulIdentifier.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc } from 'prettier'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { line } = doc.builders; -export class YulStackAssignmentStatement implements SlangNode { +export class YulStackAssignmentStatement extends SlangNode { readonly kind = NonterminalKind.YulStackAssignmentStatement; - comments; - - loc; - assignment: YulStackAssignmentOperator; variable: YulIdentifier; constructor(ast: ast.YulStackAssignmentStatement) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.assignment = new YulStackAssignmentOperator(ast.assignment); this.variable = new YulIdentifier(ast.variable); - updateMetadata(this.loc, this.comments, [this.assignment]); + this.updateMetadata([this.assignment]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulStatement.ts b/src/slang-nodes/YulStatement.ts index 89985ea24..12198c270 100644 --- a/src/slang-nodes/YulStatement.ts +++ b/src/slang-nodes/YulStatement.ts @@ -1,5 +1,5 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { YulBlock } from './YulBlock.js'; import { YulFunctionDefinition } from './YulFunctionDefinition.js'; import { YulVariableDeclarationStatement } from './YulVariableDeclarationStatement.js'; @@ -17,15 +17,11 @@ import { YulExpression } from './YulExpression.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class YulStatement implements SlangNode { +export class YulStatement extends SlangNode { readonly kind = NonterminalKind.YulStatement; - comments; - - loc; - variant: | YulBlock | YulFunctionDefinition @@ -42,7 +38,7 @@ export class YulStatement implements SlangNode { | YulExpression; constructor(ast: ast.YulStatement, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); switch (ast.variant.cst.kind) { case NonterminalKind.YulBlock: @@ -117,7 +113,7 @@ export class YulStatement implements SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - updateMetadata(this.loc, this.comments, [this.variant]); + this.updateMetadata([this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulStatements.ts b/src/slang-nodes/YulStatements.ts index c82078d8c..11c392e10 100644 --- a/src/slang-nodes/YulStatements.ts +++ b/src/slang-nodes/YulStatements.ts @@ -3,31 +3,27 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { printSeparatedItem } from '../slang-printers/print-separated-item.js'; import { printComments } from '../slang-printers/print-comments.js'; import { printPreservingEmptyLines } from '../slang-printers/print-preserving-empty-lines.js'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { YulStatement } from './YulStatement.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { hardline } = doc.builders; -export class YulStatements implements SlangNode { +export class YulStatements extends SlangNode { readonly kind = NonterminalKind.YulStatements; - comments; - - loc; - items: YulStatement[]; constructor(ast: ast.YulStatements, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast, true); + super(ast, true); this.items = ast.items.map((item) => new YulStatement(item, options)); - updateMetadata(this.loc, this.comments, [this.items]); + this.updateMetadata([this.items]); } print( diff --git a/src/slang-nodes/YulSwitchCase.ts b/src/slang-nodes/YulSwitchCase.ts index 237e0e3d0..cedd2a3f5 100644 --- a/src/slang-nodes/YulSwitchCase.ts +++ b/src/slang-nodes/YulSwitchCase.ts @@ -1,24 +1,20 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { YulDefaultCase } from './YulDefaultCase.js'; import { YulValueCase } from './YulValueCase.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class YulSwitchCase implements SlangNode { +export class YulSwitchCase extends SlangNode { readonly kind = NonterminalKind.YulSwitchCase; - comments; - - loc; - variant: YulDefaultCase | YulValueCase; constructor(ast: ast.YulSwitchCase, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); switch (ast.variant.cst.kind) { case NonterminalKind.YulDefaultCase: @@ -37,7 +33,7 @@ export class YulSwitchCase implements SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - updateMetadata(this.loc, this.comments, [this.variant]); + this.updateMetadata([this.variant]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulSwitchCases.ts b/src/slang-nodes/YulSwitchCases.ts index 34fc25242..7ec5400d9 100644 --- a/src/slang-nodes/YulSwitchCases.ts +++ b/src/slang-nodes/YulSwitchCases.ts @@ -1,30 +1,26 @@ import { doc } from 'prettier'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { YulSwitchCase } from './YulSwitchCase.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { hardline, join } = doc.builders; -export class YulSwitchCases implements SlangNode { +export class YulSwitchCases extends SlangNode { readonly kind = NonterminalKind.YulSwitchCases; - comments; - - loc; - items: YulSwitchCase[]; constructor(ast: ast.YulSwitchCases, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast, true); + super(ast, true); this.items = ast.items.map((item) => new YulSwitchCase(item, options)); - updateMetadata(this.loc, this.comments, [this.items]); + this.updateMetadata([this.items]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulSwitchStatement.ts b/src/slang-nodes/YulSwitchStatement.ts index 52794cbd8..9f436ec57 100644 --- a/src/slang-nodes/YulSwitchStatement.ts +++ b/src/slang-nodes/YulSwitchStatement.ts @@ -1,34 +1,30 @@ import { doc } from 'prettier'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { YulExpression } from './YulExpression.js'; import { YulSwitchCases } from './YulSwitchCases.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { hardline } = doc.builders; -export class YulSwitchStatement implements SlangNode { +export class YulSwitchStatement extends SlangNode { readonly kind = NonterminalKind.YulSwitchStatement; - comments; - - loc; - expression: YulExpression; cases: YulSwitchCases; constructor(ast: ast.YulSwitchStatement, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.expression = new YulExpression(ast.expression, options); this.cases = new YulSwitchCases(ast.cases, options); - updateMetadata(this.loc, this.comments, [this.expression, this.cases]); + this.updateMetadata([this.expression, this.cases]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulValueCase.ts b/src/slang-nodes/YulValueCase.ts index 178265e32..27145e914 100644 --- a/src/slang-nodes/YulValueCase.ts +++ b/src/slang-nodes/YulValueCase.ts @@ -1,31 +1,27 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { YulLiteral } from './YulLiteral.js'; import { YulBlock } from './YulBlock.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class YulValueCase implements SlangNode { +export class YulValueCase extends SlangNode { readonly kind = NonterminalKind.YulValueCase; - comments; - - loc; - value: YulLiteral; body: YulBlock; constructor(ast: ast.YulValueCase, options: ParserOptions) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.value = new YulLiteral(ast.value, options); this.body = new YulBlock(ast.body, options); - updateMetadata(this.loc, this.comments, [this.value, this.body]); + this.updateMetadata([this.value, this.body]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulVariableAssignmentStatement.ts b/src/slang-nodes/YulVariableAssignmentStatement.ts index f86e538be..96d1cf5a6 100644 --- a/src/slang-nodes/YulVariableAssignmentStatement.ts +++ b/src/slang-nodes/YulVariableAssignmentStatement.ts @@ -1,6 +1,6 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { doc } from 'prettier'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { YulPaths } from './YulPaths.js'; import { YulAssignmentOperator } from './YulAssignmentOperator.js'; import { YulExpression } from './YulExpression.js'; @@ -8,17 +8,13 @@ import { YulExpression } from './YulExpression.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { join } = doc.builders; -export class YulVariableAssignmentStatement implements SlangNode { +export class YulVariableAssignmentStatement extends SlangNode { readonly kind = NonterminalKind.YulVariableAssignmentStatement; - comments; - - loc; - variables: YulPaths; assignment: YulAssignmentOperator; @@ -29,17 +25,13 @@ export class YulVariableAssignmentStatement implements SlangNode { ast: ast.YulVariableAssignmentStatement, options: ParserOptions ) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.variables = new YulPaths(ast.variables); this.assignment = new YulAssignmentOperator(ast.assignment); this.expression = new YulExpression(ast.expression, options); - updateMetadata(this.loc, this.comments, [ - this.variables, - this.assignment, - this.expression - ]); + this.updateMetadata([this.variables, this.assignment, this.expression]); } print( diff --git a/src/slang-nodes/YulVariableDeclarationStatement.ts b/src/slang-nodes/YulVariableDeclarationStatement.ts index f2cc3d680..0896c47c2 100644 --- a/src/slang-nodes/YulVariableDeclarationStatement.ts +++ b/src/slang-nodes/YulVariableDeclarationStatement.ts @@ -1,5 +1,5 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { joinExisting } from '../slang-utils/join-existing.js'; import { YulVariableDeclarationValue } from './YulVariableDeclarationValue.js'; import { YulVariableNames } from './YulVariableNames.js'; @@ -7,15 +7,11 @@ import { YulVariableNames } from './YulVariableNames.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class YulVariableDeclarationStatement implements SlangNode { +export class YulVariableDeclarationStatement extends SlangNode { readonly kind = NonterminalKind.YulVariableDeclarationStatement; - comments; - - loc; - variables: YulVariableNames; value?: YulVariableDeclarationValue; @@ -24,14 +20,14 @@ export class YulVariableDeclarationStatement implements SlangNode { ast: ast.YulVariableDeclarationStatement, options: ParserOptions ) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.variables = new YulVariableNames(ast.variables); if (ast.value) { this.value = new YulVariableDeclarationValue(ast.value, options); } - updateMetadata(this.loc, this.comments, [this.value]); + this.updateMetadata([this.value]); } print( diff --git a/src/slang-nodes/YulVariableDeclarationValue.ts b/src/slang-nodes/YulVariableDeclarationValue.ts index da6c758f5..3659a0219 100644 --- a/src/slang-nodes/YulVariableDeclarationValue.ts +++ b/src/slang-nodes/YulVariableDeclarationValue.ts @@ -1,20 +1,16 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { YulAssignmentOperator } from './YulAssignmentOperator.js'; import { YulExpression } from './YulExpression.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; -export class YulVariableDeclarationValue implements SlangNode { +export class YulVariableDeclarationValue extends SlangNode { readonly kind = NonterminalKind.YulVariableDeclarationValue; - comments; - - loc; - assignment: YulAssignmentOperator; expression: YulExpression; @@ -23,12 +19,12 @@ export class YulVariableDeclarationValue implements SlangNode { ast: ast.YulVariableDeclarationValue, options: ParserOptions ) { - [this.loc, this.comments] = getNodeMetadata(ast); + super(ast); this.assignment = new YulAssignmentOperator(ast.assignment); this.expression = new YulExpression(ast.expression, options); - updateMetadata(this.loc, this.comments, [this.assignment, this.expression]); + this.updateMetadata([this.assignment, this.expression]); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulVariableNames.ts b/src/slang-nodes/YulVariableNames.ts index 7f5932104..6b2ae7626 100644 --- a/src/slang-nodes/YulVariableNames.ts +++ b/src/slang-nodes/YulVariableNames.ts @@ -1,26 +1,22 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { doc } from 'prettier'; import { printSeparatedList } from '../slang-printers/print-separated-list.js'; -import { getNodeMetadata } from '../slang-utils/metadata.js'; +import { SlangNode } from './SlangNode.js'; import { YulIdentifier } from './YulIdentifier.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc } from 'prettier'; -import type { PrintFunction, SlangNode } from '../types.d.ts'; +import type { PrintFunction } from '../types.d.ts'; const { line } = doc.builders; -export class YulVariableNames implements SlangNode { +export class YulVariableNames extends SlangNode { readonly kind = NonterminalKind.YulVariableNames; - comments; - - loc; - items: YulIdentifier[]; constructor(ast: ast.YulVariableNames) { - [this.loc, this.comments] = getNodeMetadata(ast, true); + super(ast, true); this.items = ast.items.map((item) => new YulIdentifier(item)); } diff --git a/src/slang-utils/metadata.ts b/src/slang-utils/metadata.ts deleted file mode 100644 index 3ff051191..000000000 --- a/src/slang-utils/metadata.ts +++ /dev/null @@ -1,167 +0,0 @@ -import { TerminalKind, TerminalNode } from '@nomicfoundation/slang/cst'; -import { createKindCheckFunction } from './create-kind-check-function.js'; -import { isComment } from './is-comment.js'; -import { MultiLineComment } from '../slang-nodes/MultiLineComment.js'; -import { MultiLineNatSpecComment } from '../slang-nodes/MultiLineNatSpecComment.js'; -import { SingleLineComment } from '../slang-nodes/SingleLineComment.js'; -import { SingleLineNatSpecComment } from '../slang-nodes/SingleLineNatSpecComment.js'; - -import type { Node } from '@nomicfoundation/slang/cst'; -import type { Comment, StrictAstNode } from '../slang-nodes/types.d.ts'; -import type { AstLocation, SlangAstNode } from '../types.d.ts'; - -const isCommentOrWhiteSpace = createKindCheckFunction([ - TerminalKind.MultiLineComment, - TerminalKind.MultiLineNatSpecComment, - TerminalKind.SingleLineComment, - TerminalKind.SingleLineNatSpecComment, - TerminalKind.EndOfLine, - TerminalKind.Whitespace -]); - -const offsets = new Map(); -export function clearOffsets(): void { - offsets.clear(); -} - -function getLeadingOffset(children: Node[]): number { - let offset = 0; - for (const child of children) { - if (child.isNonterminalNode() || !isCommentOrWhiteSpace(child)) { - // The node's content starts when we find the first non-terminal token, - // or if we find a non-comment, non-whitespace token. - return offset; - } - offset += child.textLength.utf16; - } - return offset; -} - -export function getNodeMetadata( - ast: SlangAstNode | TerminalNode, - enclosePeripheralComments = false -): [AstLocation, Comment[]] { - if (ast instanceof TerminalNode) { - const offset = offsets.get(ast.id) || 0; - return [ - { - start: offset, - end: offset + ast.textLength.utf16, - leadingOffset: 0, - trailingOffset: 0 - }, - [] - ]; - } - const { cst: parent } = ast; - const children = parent.children().map(({ node }) => node); - - const initialOffset = offsets.get(parent.id) || 0; - let offset = initialOffset; - const comments: Comment[] = []; - - for (const child of children) { - const { id, kind, textLength } = child; - if (child.isNonterminalNode()) { - offsets.set(id, offset); - } else { - if (isComment(child)) { - offsets.set(id, offset); - } - switch (kind) { - // Since the fetching the comments and calculating offsets are both done - // as we iterate over the children and the comment also depends on the - // offset, it's hard to separate these responsibilities into different - // functions without doing the iteration twice. - case TerminalKind.MultiLineComment: - comments.push(new MultiLineComment(child)); - break; - case TerminalKind.MultiLineNatSpecComment: - comments.push(new MultiLineNatSpecComment(child)); - break; - case TerminalKind.SingleLineComment: - comments.push(new SingleLineComment(child)); - break; - case TerminalKind.SingleLineNatSpecComment: - comments.push(new SingleLineNatSpecComment(child)); - break; - case TerminalKind.Identifier: - case TerminalKind.YulIdentifier: - // Identifiers usually are user provided names for variables, - // functions, etc... - // Since a user can add comments to this section of the code as well, - // we need to track the offsets. - offsets.set(id, offset); - break; - } - } - - offset += textLength.utf16; - } - - const [leadingOffset, trailingOffset] = enclosePeripheralComments - ? [0, 0] - : [getLeadingOffset(children), getLeadingOffset(children.reverse())]; - - const loc = { - start: initialOffset + leadingOffset, - end: offset - trailingOffset, - leadingOffset, - trailingOffset - }; - - return [loc, comments]; -} - -function collectComments( - comments: Comment[], - node: StrictAstNode | StrictAstNode[] | undefined -): Comment[] { - if (node) { - if (Array.isArray(node)) { - return node.reduce(collectComments, comments); - } - if (node.comments.length > 0) { - comments.push(...node.comments.splice(0)); - } - } - return comments; -} - -export function updateMetadata( - loc: AstLocation, - comments: Comment[], - childNodes: (StrictAstNode | StrictAstNode[] | undefined)[] -): void { - // Collect comments - childNodes.reduce(collectComments, comments); - - // calculate correct loc object - if (loc.leadingOffset === 0) { - for (const childNode of childNodes) { - if (typeof childNode === 'undefined' || Array.isArray(childNode)) - continue; - const { leadingOffset, start } = childNode.loc; - - if (start - leadingOffset === loc.start) { - loc.leadingOffset = leadingOffset; - loc.start += leadingOffset; - break; - } - } - } - - if (loc.trailingOffset === 0) { - for (const childNode of childNodes.reverse()) { - if (typeof childNode === 'undefined' || Array.isArray(childNode)) - continue; - const { trailingOffset, end } = childNode.loc; - - if (end + trailingOffset === loc.end) { - loc.trailingOffset = trailingOffset; - loc.end -= trailingOffset; - break; - } - } - } -} diff --git a/src/slangPrinter.ts b/src/slangPrinter.ts index 524f20c5e..f068d8d77 100644 --- a/src/slangPrinter.ts +++ b/src/slangPrinter.ts @@ -29,6 +29,7 @@ function ignoreComments(path: AstPath): void { case 'kind': case 'loc': case 'print': + case 'updateMetadata': break; // The key `comments` will contain every comment for this node case 'comments': diff --git a/src/slangSolidityParser.ts b/src/slangSolidityParser.ts index cb40ce145..e52da506f 100644 --- a/src/slangSolidityParser.ts +++ b/src/slangSolidityParser.ts @@ -1,6 +1,6 @@ // https://prettier.io/docs/en/plugins.html#parsers import { SourceUnit as SlangSourceUnit } from '@nomicfoundation/slang/ast'; -import { clearOffsets } from './slang-utils/metadata.js'; +import { clearOffsets } from './slang-nodes/SlangNode.js'; import { createParser } from './slang-utils/create-parser.js'; import { SourceUnit } from './slang-nodes/SourceUnit.js'; diff --git a/src/types.d.ts b/src/types.d.ts index f87b6b64c..5193b7b15 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -1,7 +1,6 @@ -import type { NonterminalKind, TerminalKind } from '@nomicfoundation/slang/cst'; import type * as ast from '@nomicfoundation/slang/ast'; -import type { AstPath, Doc, ParserOptions } from 'prettier'; -import type { AstNode, Comment, StrictAstNode } from './slang-nodes/types.d.ts'; +import type { AstPath, Doc } from 'prettier'; +import type { AstNode } from './slang-nodes/types.d.ts'; // Adding our own options to prettier's `ParserOptions` interface. declare module 'prettier' { @@ -20,36 +19,6 @@ interface AstLocation extends Location { trailingOffset: number; } -interface BaseComment { - value: string; - loc: Location; - leading?: boolean; - trailing?: boolean; - printed?: boolean; - placement?: 'endOfLine' | 'ownLine' | 'remaining'; - precedingNode?: StrictAstNode; - enclosingNode?: StrictAstNode; - followingNode?: StrictAstNode; -} - -interface SlangNode { - kind: - | NonterminalKind - | typeof TerminalKind.Identifier - | typeof TerminalKind.YulIdentifier - | typeof TerminalKind.MultiLineComment - | typeof TerminalKind.MultiLineNatSpecComment - | typeof TerminalKind.SingleLineComment - | typeof TerminalKind.SingleLineNatSpecComment; - comments?: Comment[]; - loc: AstLocation | Location; - print( - path: AstPath, - print: (path: AstPath) => Doc, - options: ParserOptions - ): Doc; -} - type PrintFunction = (path: AstPath) => Doc; // This the union of all the types in the namespace `ast`. From 8b15135128a78539543e7e54974cfda4a2b283e6 Mon Sep 17 00:00:00 2001 From: Klaus Date: Tue, 8 Jul 2025 17:12:22 +0100 Subject: [PATCH 5/8] by using rest parameters on `updateMetadata` we don't have to build arrays manually. --- src/slang-nodes/AdditiveExpression.ts | 2 +- src/slang-nodes/AndExpression.ts | 2 +- src/slang-nodes/ArgumentsDeclaration.ts | 2 +- src/slang-nodes/ArrayExpression.ts | 2 +- src/slang-nodes/ArrayTypeName.ts | 2 +- src/slang-nodes/ArrayValues.ts | 2 +- src/slang-nodes/AssemblyFlags.ts | 2 +- src/slang-nodes/AssemblyFlagsDeclaration.ts | 2 +- src/slang-nodes/AssemblyStatement.ts | 2 +- src/slang-nodes/AssignmentExpression.ts | 2 +- src/slang-nodes/BitwiseAndExpression.ts | 2 +- src/slang-nodes/BitwiseOrExpression.ts | 2 +- src/slang-nodes/BitwiseXorExpression.ts | 2 +- src/slang-nodes/Block.ts | 2 +- src/slang-nodes/CallOptions.ts | 2 +- src/slang-nodes/CallOptionsExpression.ts | 2 +- src/slang-nodes/CatchClause.ts | 2 +- src/slang-nodes/CatchClauseError.ts | 2 +- src/slang-nodes/CatchClauses.ts | 2 +- src/slang-nodes/ConditionalExpression.ts | 4 ++-- src/slang-nodes/ConstantDefinition.ts | 2 +- src/slang-nodes/ConstructorAttribute.ts | 2 +- src/slang-nodes/ConstructorAttributes.ts | 2 +- src/slang-nodes/ConstructorDefinition.ts | 2 +- src/slang-nodes/ContractDefinition.ts | 2 +- src/slang-nodes/ContractMember.ts | 2 +- src/slang-nodes/ContractMembers.ts | 2 +- src/slang-nodes/ContractSpecifier.ts | 2 +- src/slang-nodes/ContractSpecifiers.ts | 2 +- src/slang-nodes/DecimalNumberExpression.ts | 2 +- src/slang-nodes/DoWhileStatement.ts | 2 +- src/slang-nodes/ElementaryType.ts | 2 +- src/slang-nodes/ElseBranch.ts | 2 +- src/slang-nodes/EmitStatement.ts | 2 +- src/slang-nodes/EnumDefinition.ts | 2 +- src/slang-nodes/EqualityExpression.ts | 2 +- src/slang-nodes/ErrorDefinition.ts | 2 +- src/slang-nodes/ErrorParameter.ts | 2 +- src/slang-nodes/ErrorParameters.ts | 2 +- src/slang-nodes/ErrorParametersDeclaration.ts | 2 +- src/slang-nodes/EventDefinition.ts | 2 +- src/slang-nodes/EventParameter.ts | 2 +- src/slang-nodes/EventParameters.ts | 2 +- src/slang-nodes/EventParametersDeclaration.ts | 2 +- src/slang-nodes/ExperimentalFeature.ts | 5 ++--- src/slang-nodes/ExperimentalPragma.ts | 2 +- src/slang-nodes/ExponentiationExpression.ts | 2 +- src/slang-nodes/Expression.ts | 5 ++--- src/slang-nodes/ExpressionStatement.ts | 2 +- src/slang-nodes/FallbackFunctionAttribute.ts | 2 +- src/slang-nodes/FallbackFunctionAttributes.ts | 2 +- src/slang-nodes/FallbackFunctionDefinition.ts | 4 ++-- src/slang-nodes/ForStatement.ts | 4 ++-- src/slang-nodes/ForStatementCondition.ts | 2 +- src/slang-nodes/ForStatementInitialization.ts | 2 +- src/slang-nodes/FunctionAttribute.ts | 2 +- src/slang-nodes/FunctionAttributes.ts | 2 +- src/slang-nodes/FunctionBody.ts | 2 +- src/slang-nodes/FunctionCallExpression.ts | 2 +- src/slang-nodes/FunctionDefinition.ts | 4 ++-- src/slang-nodes/FunctionType.ts | 2 +- src/slang-nodes/FunctionTypeAttributes.ts | 2 +- src/slang-nodes/HexNumberExpression.ts | 2 +- src/slang-nodes/HexStringLiterals.ts | 2 +- src/slang-nodes/IfStatement.ts | 2 +- src/slang-nodes/ImportClause.ts | 2 +- src/slang-nodes/ImportDeconstruction.ts | 2 +- src/slang-nodes/ImportDeconstructionSymbol.ts | 2 +- src/slang-nodes/ImportDeconstructionSymbols.ts | 2 +- src/slang-nodes/ImportDirective.ts | 2 +- src/slang-nodes/IndexAccessEnd.ts | 2 +- src/slang-nodes/IndexAccessExpression.ts | 2 +- src/slang-nodes/InequalityExpression.ts | 2 +- src/slang-nodes/InheritanceSpecifier.ts | 2 +- src/slang-nodes/InheritanceType.ts | 2 +- src/slang-nodes/InheritanceTypes.ts | 2 +- src/slang-nodes/InterfaceDefinition.ts | 2 +- src/slang-nodes/InterfaceMembers.ts | 2 +- src/slang-nodes/LibraryDefinition.ts | 2 +- src/slang-nodes/LibraryMembers.ts | 2 +- src/slang-nodes/MappingKey.ts | 2 +- src/slang-nodes/MappingKeyType.ts | 2 +- src/slang-nodes/MappingType.ts | 2 +- src/slang-nodes/MappingValue.ts | 2 +- src/slang-nodes/MemberAccessExpression.ts | 2 +- src/slang-nodes/ModifierAttribute.ts | 2 +- src/slang-nodes/ModifierAttributes.ts | 2 +- src/slang-nodes/ModifierDefinition.ts | 2 +- src/slang-nodes/ModifierInvocation.ts | 2 +- src/slang-nodes/MultiplicativeExpression.ts | 2 +- src/slang-nodes/NamedArgument.ts | 2 +- src/slang-nodes/NamedArgumentGroup.ts | 2 +- src/slang-nodes/NamedArguments.ts | 2 +- src/slang-nodes/NamedArgumentsDeclaration.ts | 2 +- src/slang-nodes/NamedImport.ts | 2 +- src/slang-nodes/NewExpression.ts | 2 +- src/slang-nodes/OrExpression.ts | 2 +- src/slang-nodes/OverridePaths.ts | 2 +- src/slang-nodes/OverridePathsDeclaration.ts | 2 +- src/slang-nodes/OverrideSpecifier.ts | 2 +- src/slang-nodes/Parameter.ts | 2 +- src/slang-nodes/Parameters.ts | 2 +- src/slang-nodes/ParametersDeclaration.ts | 2 +- src/slang-nodes/PathImport.ts | 2 +- src/slang-nodes/PositionalArguments.ts | 2 +- src/slang-nodes/PositionalArgumentsDeclaration.ts | 2 +- src/slang-nodes/PostfixExpression.ts | 2 +- src/slang-nodes/Pragma.ts | 2 +- src/slang-nodes/PragmaDirective.ts | 2 +- src/slang-nodes/PrefixExpression.ts | 2 +- src/slang-nodes/ReceiveFunctionAttribute.ts | 2 +- src/slang-nodes/ReceiveFunctionAttributes.ts | 2 +- src/slang-nodes/ReceiveFunctionDefinition.ts | 2 +- src/slang-nodes/ReturnStatement.ts | 2 +- src/slang-nodes/ReturnsDeclaration.ts | 2 +- src/slang-nodes/RevertStatement.ts | 2 +- src/slang-nodes/ShiftExpression.ts | 2 +- src/slang-nodes/SlangNode.ts | 2 +- src/slang-nodes/SourceUnit.ts | 2 +- src/slang-nodes/SourceUnitMember.ts | 2 +- src/slang-nodes/SourceUnitMembers.ts | 2 +- src/slang-nodes/StateVariableAttribute.ts | 2 +- src/slang-nodes/StateVariableAttributes.ts | 2 +- src/slang-nodes/StateVariableDefinition.ts | 2 +- src/slang-nodes/StateVariableDefinitionValue.ts | 2 +- src/slang-nodes/Statement.ts | 2 +- src/slang-nodes/Statements.ts | 2 +- src/slang-nodes/StorageLayoutSpecifier.ts | 2 +- src/slang-nodes/StringExpression.ts | 2 +- src/slang-nodes/StringLiterals.ts | 2 +- src/slang-nodes/StructDefinition.ts | 2 +- src/slang-nodes/StructMember.ts | 2 +- src/slang-nodes/StructMembers.ts | 2 +- src/slang-nodes/TryStatement.ts | 4 ++-- src/slang-nodes/TupleDeconstructionElement.ts | 2 +- src/slang-nodes/TupleDeconstructionElements.ts | 2 +- src/slang-nodes/TupleDeconstructionStatement.ts | 2 +- src/slang-nodes/TupleExpression.ts | 2 +- src/slang-nodes/TupleMember.ts | 2 +- src/slang-nodes/TupleValue.ts | 2 +- src/slang-nodes/TupleValues.ts | 2 +- src/slang-nodes/TypeExpression.ts | 2 +- src/slang-nodes/TypeName.ts | 2 +- src/slang-nodes/TypedTupleMember.ts | 2 +- src/slang-nodes/UncheckedBlock.ts | 2 +- src/slang-nodes/UnicodeStringLiterals.ts | 2 +- src/slang-nodes/UnnamedFunctionAttribute.ts | 2 +- src/slang-nodes/UnnamedFunctionAttributes.ts | 2 +- src/slang-nodes/UnnamedFunctionDefinition.ts | 2 +- src/slang-nodes/UntypedTupleMember.ts | 2 +- src/slang-nodes/UserDefinedValueTypeDefinition.ts | 2 +- src/slang-nodes/UsingAlias.ts | 2 +- src/slang-nodes/UsingClause.ts | 2 +- src/slang-nodes/UsingDeconstruction.ts | 2 +- src/slang-nodes/UsingDeconstructionSymbol.ts | 2 +- src/slang-nodes/UsingDeconstructionSymbols.ts | 2 +- src/slang-nodes/UsingDirective.ts | 2 +- src/slang-nodes/UsingTarget.ts | 2 +- src/slang-nodes/VariableDeclarationStatement.ts | 2 +- src/slang-nodes/VariableDeclarationType.ts | 2 +- src/slang-nodes/VariableDeclarationValue.ts | 2 +- src/slang-nodes/VersionExpression.ts | 2 +- src/slang-nodes/VersionExpressionSet.ts | 2 +- src/slang-nodes/VersionExpressionSets.ts | 2 +- src/slang-nodes/VersionLiteral.ts | 2 +- src/slang-nodes/VersionPragma.ts | 2 +- src/slang-nodes/VersionRange.ts | 2 +- src/slang-nodes/VersionTerm.ts | 2 +- src/slang-nodes/WhileStatement.ts | 2 +- src/slang-nodes/YulArguments.ts | 2 +- src/slang-nodes/YulAssignmentOperator.ts | 2 +- src/slang-nodes/YulBlock.ts | 2 +- src/slang-nodes/YulDefaultCase.ts | 2 +- src/slang-nodes/YulExpression.ts | 2 +- src/slang-nodes/YulForStatement.ts | 4 ++-- src/slang-nodes/YulFunctionCallExpression.ts | 2 +- src/slang-nodes/YulFunctionDefinition.ts | 2 +- src/slang-nodes/YulIfStatement.ts | 2 +- src/slang-nodes/YulLiteral.ts | 2 +- src/slang-nodes/YulParametersDeclaration.ts | 2 +- src/slang-nodes/YulPaths.ts | 2 +- src/slang-nodes/YulReturnsDeclaration.ts | 2 +- src/slang-nodes/YulStackAssignmentOperator.ts | 2 +- src/slang-nodes/YulStackAssignmentStatement.ts | 2 +- src/slang-nodes/YulStatement.ts | 2 +- src/slang-nodes/YulStatements.ts | 2 +- src/slang-nodes/YulSwitchCase.ts | 2 +- src/slang-nodes/YulSwitchCases.ts | 2 +- src/slang-nodes/YulSwitchStatement.ts | 2 +- src/slang-nodes/YulValueCase.ts | 2 +- src/slang-nodes/YulVariableAssignmentStatement.ts | 2 +- src/slang-nodes/YulVariableDeclarationStatement.ts | 2 +- src/slang-nodes/YulVariableDeclarationValue.ts | 2 +- src/slangPrinter.ts | 6 +++--- 194 files changed, 204 insertions(+), 206 deletions(-) diff --git a/src/slang-nodes/AdditiveExpression.ts b/src/slang-nodes/AdditiveExpression.ts index e934d3fd4..e31d346b3 100644 --- a/src/slang-nodes/AdditiveExpression.ts +++ b/src/slang-nodes/AdditiveExpression.ts @@ -41,7 +41,7 @@ export class AdditiveExpression extends SlangNode { this.operator = ast.operator.unparse(); this.rightOperand = new Expression(ast.rightOperand, options); - this.updateMetadata([this.leftOperand, this.rightOperand]); + this.updateMetadata(this.leftOperand, this.rightOperand); this.leftOperand = tryToHug(this.leftOperand); this.rightOperand = tryToHug(this.rightOperand); diff --git a/src/slang-nodes/AndExpression.ts b/src/slang-nodes/AndExpression.ts index db17e3be6..cdd916aee 100644 --- a/src/slang-nodes/AndExpression.ts +++ b/src/slang-nodes/AndExpression.ts @@ -24,7 +24,7 @@ export class AndExpression extends SlangNode { this.operator = ast.operator.unparse(); this.rightOperand = new Expression(ast.rightOperand, options); - this.updateMetadata([this.leftOperand, this.rightOperand]); + this.updateMetadata(this.leftOperand, this.rightOperand); } print( diff --git a/src/slang-nodes/ArgumentsDeclaration.ts b/src/slang-nodes/ArgumentsDeclaration.ts index efac80770..5c2967544 100644 --- a/src/slang-nodes/ArgumentsDeclaration.ts +++ b/src/slang-nodes/ArgumentsDeclaration.ts @@ -33,7 +33,7 @@ export class ArgumentsDeclaration extends SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - this.updateMetadata([this.variant]); + this.updateMetadata(this.variant); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ArrayExpression.ts b/src/slang-nodes/ArrayExpression.ts index 83db98ad1..0f7bb46f2 100644 --- a/src/slang-nodes/ArrayExpression.ts +++ b/src/slang-nodes/ArrayExpression.ts @@ -20,7 +20,7 @@ export class ArrayExpression extends SlangNode { this.items = new ArrayValues(ast.items, options); - this.updateMetadata([this.items]); + this.updateMetadata(this.items); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ArrayTypeName.ts b/src/slang-nodes/ArrayTypeName.ts index cd3611927..fb6fc2417 100644 --- a/src/slang-nodes/ArrayTypeName.ts +++ b/src/slang-nodes/ArrayTypeName.ts @@ -23,7 +23,7 @@ export class ArrayTypeName extends SlangNode { this.index = new Expression(ast.index, options); } - this.updateMetadata([this.operand, this.index]); + this.updateMetadata(this.operand, this.index); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ArrayValues.ts b/src/slang-nodes/ArrayValues.ts index a649792f2..b985034ab 100644 --- a/src/slang-nodes/ArrayValues.ts +++ b/src/slang-nodes/ArrayValues.ts @@ -18,7 +18,7 @@ export class ArrayValues extends SlangNode { this.items = ast.items.map((item) => new Expression(item, options)); - this.updateMetadata([this.items]); + this.updateMetadata(this.items); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/AssemblyFlags.ts b/src/slang-nodes/AssemblyFlags.ts index 57b83a9ad..3ca2c8013 100644 --- a/src/slang-nodes/AssemblyFlags.ts +++ b/src/slang-nodes/AssemblyFlags.ts @@ -18,7 +18,7 @@ export class AssemblyFlags extends SlangNode { this.items = ast.items.map((item) => new StringLiteral(item, options)); - this.updateMetadata([this.items]); + this.updateMetadata(this.items); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/AssemblyFlagsDeclaration.ts b/src/slang-nodes/AssemblyFlagsDeclaration.ts index 05aeae43f..4b2b382ac 100644 --- a/src/slang-nodes/AssemblyFlagsDeclaration.ts +++ b/src/slang-nodes/AssemblyFlagsDeclaration.ts @@ -20,7 +20,7 @@ export class AssemblyFlagsDeclaration extends SlangNode { this.flags = new AssemblyFlags(ast.flags, options); - this.updateMetadata([this.flags]); + this.updateMetadata(this.flags); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/AssemblyStatement.ts b/src/slang-nodes/AssemblyStatement.ts index 9d2b51de3..3ea9227d4 100644 --- a/src/slang-nodes/AssemblyStatement.ts +++ b/src/slang-nodes/AssemblyStatement.ts @@ -30,7 +30,7 @@ export class AssemblyStatement extends SlangNode { } this.body = new YulBlock(ast.body, options); - this.updateMetadata([this.label, this.flags, this.body]); + this.updateMetadata(this.label, this.flags, this.body); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/AssignmentExpression.ts b/src/slang-nodes/AssignmentExpression.ts index 3cf9d3ae7..aecb2ad64 100644 --- a/src/slang-nodes/AssignmentExpression.ts +++ b/src/slang-nodes/AssignmentExpression.ts @@ -27,7 +27,7 @@ export class AssignmentExpression extends SlangNode { this.operator = ast.operator.unparse(); this.rightOperand = new Expression(ast.rightOperand, options); - this.updateMetadata([this.leftOperand, this.rightOperand]); + this.updateMetadata(this.leftOperand, this.rightOperand); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/BitwiseAndExpression.ts b/src/slang-nodes/BitwiseAndExpression.ts index 52a16fd08..b2e721fc0 100644 --- a/src/slang-nodes/BitwiseAndExpression.ts +++ b/src/slang-nodes/BitwiseAndExpression.ts @@ -37,7 +37,7 @@ export class BitwiseAndExpression extends SlangNode { this.operator = ast.operator.unparse(); this.rightOperand = new Expression(ast.rightOperand, options); - this.updateMetadata([this.leftOperand, this.rightOperand]); + this.updateMetadata(this.leftOperand, this.rightOperand); this.leftOperand = tryToHug(this.leftOperand); this.rightOperand = tryToHug(this.rightOperand); diff --git a/src/slang-nodes/BitwiseOrExpression.ts b/src/slang-nodes/BitwiseOrExpression.ts index 9bcd39dfa..34b6ac9f2 100644 --- a/src/slang-nodes/BitwiseOrExpression.ts +++ b/src/slang-nodes/BitwiseOrExpression.ts @@ -47,7 +47,7 @@ export class BitwiseOrExpression extends SlangNode { this.operator = ast.operator.unparse(); this.rightOperand = new Expression(ast.rightOperand, options); - this.updateMetadata([this.leftOperand, this.rightOperand]); + this.updateMetadata(this.leftOperand, this.rightOperand); this.leftOperand = tryToHug(this.leftOperand); this.rightOperand = tryToHug(this.rightOperand); diff --git a/src/slang-nodes/BitwiseXorExpression.ts b/src/slang-nodes/BitwiseXorExpression.ts index c933b6620..443ce60c5 100644 --- a/src/slang-nodes/BitwiseXorExpression.ts +++ b/src/slang-nodes/BitwiseXorExpression.ts @@ -37,7 +37,7 @@ export class BitwiseXorExpression extends SlangNode { this.operator = ast.operator.unparse(); this.rightOperand = new Expression(ast.rightOperand, options); - this.updateMetadata([this.leftOperand, this.rightOperand]); + this.updateMetadata(this.leftOperand, this.rightOperand); this.leftOperand = tryToHug(this.leftOperand); this.rightOperand = tryToHug(this.rightOperand); diff --git a/src/slang-nodes/Block.ts b/src/slang-nodes/Block.ts index db748a50b..c7e72ddc9 100644 --- a/src/slang-nodes/Block.ts +++ b/src/slang-nodes/Block.ts @@ -17,7 +17,7 @@ export class Block extends SlangNode { this.statements = new Statements(ast.statements, options); - this.updateMetadata([this.statements]); + this.updateMetadata(this.statements); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/CallOptions.ts b/src/slang-nodes/CallOptions.ts index a701d736f..936af9da6 100644 --- a/src/slang-nodes/CallOptions.ts +++ b/src/slang-nodes/CallOptions.ts @@ -21,7 +21,7 @@ export class CallOptions extends SlangNode { this.items = ast.items.map((item) => new NamedArgument(item, options)); - this.updateMetadata([this.items]); + this.updateMetadata(this.items); } print( diff --git a/src/slang-nodes/CallOptionsExpression.ts b/src/slang-nodes/CallOptionsExpression.ts index 3b607f741..c13270aea 100644 --- a/src/slang-nodes/CallOptionsExpression.ts +++ b/src/slang-nodes/CallOptionsExpression.ts @@ -21,7 +21,7 @@ export class CallOptionsExpression extends SlangNode { this.operand = new Expression(ast.operand, options); this.options = new CallOptions(ast.options, options); - this.updateMetadata([this.operand, this.options]); + this.updateMetadata(this.operand, this.options); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/CatchClause.ts b/src/slang-nodes/CatchClause.ts index 47d0c32b9..caecbb096 100644 --- a/src/slang-nodes/CatchClause.ts +++ b/src/slang-nodes/CatchClause.ts @@ -23,7 +23,7 @@ export class CatchClause extends SlangNode { } this.body = new Block(ast.body, options); - this.updateMetadata([this.error, this.body]); + this.updateMetadata(this.error, this.body); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/CatchClauseError.ts b/src/slang-nodes/CatchClauseError.ts index 11b6d9b22..5646f2534 100644 --- a/src/slang-nodes/CatchClauseError.ts +++ b/src/slang-nodes/CatchClauseError.ts @@ -26,7 +26,7 @@ export class CatchClauseError extends SlangNode { } this.parameters = new ParametersDeclaration(ast.parameters, options); - this.updateMetadata([this.parameters]); + this.updateMetadata(this.parameters); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/CatchClauses.ts b/src/slang-nodes/CatchClauses.ts index 7ed690e98..dbac2e255 100644 --- a/src/slang-nodes/CatchClauses.ts +++ b/src/slang-nodes/CatchClauses.ts @@ -20,7 +20,7 @@ export class CatchClauses extends SlangNode { this.items = ast.items.map((item) => new CatchClause(item, options)); - this.updateMetadata([this.items]); + this.updateMetadata(this.items); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ConditionalExpression.ts b/src/slang-nodes/ConditionalExpression.ts index 4e5ca386d..102635b5b 100644 --- a/src/slang-nodes/ConditionalExpression.ts +++ b/src/slang-nodes/ConditionalExpression.ts @@ -124,11 +124,11 @@ export class ConditionalExpression extends SlangNode { this.trueExpression = new Expression(ast.trueExpression, options); this.falseExpression = new Expression(ast.falseExpression, options); - this.updateMetadata([ + this.updateMetadata( this.operand, this.trueExpression, this.falseExpression - ]); + ); if (options.experimentalTernaries) { // We can remove parentheses only because we are sure that the diff --git a/src/slang-nodes/ConstantDefinition.ts b/src/slang-nodes/ConstantDefinition.ts index cc30ccad2..529bd2eb5 100644 --- a/src/slang-nodes/ConstantDefinition.ts +++ b/src/slang-nodes/ConstantDefinition.ts @@ -25,7 +25,7 @@ export class ConstantDefinition extends SlangNode { this.name = new Identifier(ast.name); this.value = new Expression(ast.value, options); - this.updateMetadata([this.typeName, this.value]); + this.updateMetadata(this.typeName, this.value); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ConstructorAttribute.ts b/src/slang-nodes/ConstructorAttribute.ts index b0fdb8b7c..b050d45cf 100644 --- a/src/slang-nodes/ConstructorAttribute.ts +++ b/src/slang-nodes/ConstructorAttribute.ts @@ -20,7 +20,7 @@ export class ConstructorAttribute extends SlangNode { ? ast.variant.unparse() : new ModifierInvocation(ast.variant, options); - this.updateMetadata(typeof this.variant === 'string' ? [] : [this.variant]); + if (typeof this.variant !== 'string') this.updateMetadata(this.variant); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ConstructorAttributes.ts b/src/slang-nodes/ConstructorAttributes.ts index b2c6cc587..003b4dbe2 100644 --- a/src/slang-nodes/ConstructorAttributes.ts +++ b/src/slang-nodes/ConstructorAttributes.ts @@ -23,7 +23,7 @@ export class ConstructorAttributes extends SlangNode { (item) => new ConstructorAttribute(item, options) ); - this.updateMetadata([this.items]); + this.updateMetadata(this.items); this.items = this.items.sort(sortFunctionAttributes); } diff --git a/src/slang-nodes/ConstructorDefinition.ts b/src/slang-nodes/ConstructorDefinition.ts index 972ad9888..7bc9759e1 100644 --- a/src/slang-nodes/ConstructorDefinition.ts +++ b/src/slang-nodes/ConstructorDefinition.ts @@ -26,7 +26,7 @@ export class ConstructorDefinition extends SlangNode { this.attributes = new ConstructorAttributes(ast.attributes, options); this.body = new Block(ast.body, options); - this.updateMetadata([this.parameters, this.attributes, this.body]); + this.updateMetadata(this.parameters, this.attributes, this.body); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ContractDefinition.ts b/src/slang-nodes/ContractDefinition.ts index 8349b6ac2..363746997 100644 --- a/src/slang-nodes/ContractDefinition.ts +++ b/src/slang-nodes/ContractDefinition.ts @@ -32,7 +32,7 @@ export class ContractDefinition extends SlangNode { this.specifiers = new ContractSpecifiers(ast.specifiers, options); this.members = new ContractMembers(ast.members, options); - this.updateMetadata([this.specifiers, this.members]); + this.updateMetadata(this.specifiers, this.members); this.cleanModifierInvocationArguments(options); } diff --git a/src/slang-nodes/ContractMember.ts b/src/slang-nodes/ContractMember.ts index 748a461e8..b74ed3393 100644 --- a/src/slang-nodes/ContractMember.ts +++ b/src/slang-nodes/ContractMember.ts @@ -119,7 +119,7 @@ export class ContractMember extends SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - this.updateMetadata([this.variant]); + this.updateMetadata(this.variant); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ContractMembers.ts b/src/slang-nodes/ContractMembers.ts index 5c43eb090..cd82c186c 100644 --- a/src/slang-nodes/ContractMembers.ts +++ b/src/slang-nodes/ContractMembers.ts @@ -23,7 +23,7 @@ export class ContractMembers extends SlangNode { this.items = ast.items.map((item) => new ContractMember(item, options)); - this.updateMetadata([this.items]); + this.updateMetadata(this.items); } print( diff --git a/src/slang-nodes/ContractSpecifier.ts b/src/slang-nodes/ContractSpecifier.ts index 4042bc141..0b0030378 100644 --- a/src/slang-nodes/ContractSpecifier.ts +++ b/src/slang-nodes/ContractSpecifier.ts @@ -32,7 +32,7 @@ export class ContractSpecifier extends SlangNode { default: throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - this.updateMetadata([this.variant]); + this.updateMetadata(this.variant); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ContractSpecifiers.ts b/src/slang-nodes/ContractSpecifiers.ts index c3029b0bf..fc3cae149 100644 --- a/src/slang-nodes/ContractSpecifiers.ts +++ b/src/slang-nodes/ContractSpecifiers.ts @@ -22,7 +22,7 @@ export class ContractSpecifiers extends SlangNode { this.items = ast.items.map((item) => new ContractSpecifier(item, options)); - this.updateMetadata([this.items]); + this.updateMetadata(this.items); this.items = this.items.sort(sortContractSpecifiers); } diff --git a/src/slang-nodes/DecimalNumberExpression.ts b/src/slang-nodes/DecimalNumberExpression.ts index 8709092a4..8171c3dbd 100644 --- a/src/slang-nodes/DecimalNumberExpression.ts +++ b/src/slang-nodes/DecimalNumberExpression.ts @@ -22,7 +22,7 @@ export class DecimalNumberExpression extends SlangNode { this.unit = new NumberUnit(ast.unit); } - this.updateMetadata([this.unit]); + this.updateMetadata(this.unit); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/DoWhileStatement.ts b/src/slang-nodes/DoWhileStatement.ts index a35fe3810..2685f206b 100644 --- a/src/slang-nodes/DoWhileStatement.ts +++ b/src/slang-nodes/DoWhileStatement.ts @@ -25,7 +25,7 @@ export class DoWhileStatement extends SlangNode { this.body = new Statement(ast.body, options); this.condition = new Expression(ast.condition, options); - this.updateMetadata([this.body, this.condition]); + this.updateMetadata(this.body, this.condition); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ElementaryType.ts b/src/slang-nodes/ElementaryType.ts index f42ece711..1e28c45b1 100644 --- a/src/slang-nodes/ElementaryType.ts +++ b/src/slang-nodes/ElementaryType.ts @@ -19,7 +19,7 @@ export class ElementaryType extends SlangNode { ? ast.variant.unparse() : new AddressType(ast.variant); - this.updateMetadata(typeof this.variant === 'string' ? [] : [this.variant]); + if (typeof this.variant !== 'string') this.updateMetadata(this.variant); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ElseBranch.ts b/src/slang-nodes/ElseBranch.ts index 98277612c..dc657f05f 100644 --- a/src/slang-nodes/ElseBranch.ts +++ b/src/slang-nodes/ElseBranch.ts @@ -26,7 +26,7 @@ export class ElseBranch extends SlangNode { this.body = new Statement(ast.body, options); - this.updateMetadata([this.body]); + this.updateMetadata(this.body); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/EmitStatement.ts b/src/slang-nodes/EmitStatement.ts index 598530d93..6b3d217b0 100644 --- a/src/slang-nodes/EmitStatement.ts +++ b/src/slang-nodes/EmitStatement.ts @@ -21,7 +21,7 @@ export class EmitStatement extends SlangNode { this.event = new IdentifierPath(ast.event); this.arguments = new ArgumentsDeclaration(ast.arguments, options); - this.updateMetadata([this.event, this.arguments]); + this.updateMetadata(this.event, this.arguments); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/EnumDefinition.ts b/src/slang-nodes/EnumDefinition.ts index efa754281..7df5b8fe7 100644 --- a/src/slang-nodes/EnumDefinition.ts +++ b/src/slang-nodes/EnumDefinition.ts @@ -20,7 +20,7 @@ export class EnumDefinition extends SlangNode { this.name = new Identifier(ast.name); this.members = new EnumMembers(ast.members); - this.updateMetadata([this.members]); + this.updateMetadata(this.members); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/EqualityExpression.ts b/src/slang-nodes/EqualityExpression.ts index 6d03a9ac9..6dd6bf401 100644 --- a/src/slang-nodes/EqualityExpression.ts +++ b/src/slang-nodes/EqualityExpression.ts @@ -35,7 +35,7 @@ export class EqualityExpression extends SlangNode { this.operator = ast.operator.unparse(); this.rightOperand = new Expression(ast.rightOperand, options); - this.updateMetadata([this.leftOperand, this.rightOperand]); + this.updateMetadata(this.leftOperand, this.rightOperand); this.leftOperand = tryToHug(this.leftOperand); } diff --git a/src/slang-nodes/ErrorDefinition.ts b/src/slang-nodes/ErrorDefinition.ts index 92f5df12f..e1534cd3c 100644 --- a/src/slang-nodes/ErrorDefinition.ts +++ b/src/slang-nodes/ErrorDefinition.ts @@ -21,7 +21,7 @@ export class ErrorDefinition extends SlangNode { this.name = new Identifier(ast.name); this.members = new ErrorParametersDeclaration(ast.members, options); - this.updateMetadata([this.members]); + this.updateMetadata(this.members); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ErrorParameter.ts b/src/slang-nodes/ErrorParameter.ts index 8f9bfc820..1a3d42b45 100644 --- a/src/slang-nodes/ErrorParameter.ts +++ b/src/slang-nodes/ErrorParameter.ts @@ -24,7 +24,7 @@ export class ErrorParameter extends SlangNode { this.name = new Identifier(ast.name); } - this.updateMetadata([this.typeName]); + this.updateMetadata(this.typeName); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ErrorParameters.ts b/src/slang-nodes/ErrorParameters.ts index 44b0cb198..bbbdaf711 100644 --- a/src/slang-nodes/ErrorParameters.ts +++ b/src/slang-nodes/ErrorParameters.ts @@ -18,7 +18,7 @@ export class ErrorParameters extends SlangNode { this.items = ast.items.map((item) => new ErrorParameter(item, options)); - this.updateMetadata([this.items]); + this.updateMetadata(this.items); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ErrorParametersDeclaration.ts b/src/slang-nodes/ErrorParametersDeclaration.ts index b8846fdd6..39a0784fe 100644 --- a/src/slang-nodes/ErrorParametersDeclaration.ts +++ b/src/slang-nodes/ErrorParametersDeclaration.ts @@ -20,7 +20,7 @@ export class ErrorParametersDeclaration extends SlangNode { this.parameters = new ErrorParameters(ast.parameters, options); - this.updateMetadata([this.parameters]); + this.updateMetadata(this.parameters); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/EventDefinition.ts b/src/slang-nodes/EventDefinition.ts index 3ab004fe0..77837800e 100644 --- a/src/slang-nodes/EventDefinition.ts +++ b/src/slang-nodes/EventDefinition.ts @@ -24,7 +24,7 @@ export class EventDefinition extends SlangNode { this.parameters = new EventParametersDeclaration(ast.parameters, options); this.anonymousKeyword = ast.anonymousKeyword?.unparse(); - this.updateMetadata([this.parameters]); + this.updateMetadata(this.parameters); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/EventParameter.ts b/src/slang-nodes/EventParameter.ts index 5fbfffbfa..6af555234 100644 --- a/src/slang-nodes/EventParameter.ts +++ b/src/slang-nodes/EventParameter.ts @@ -27,7 +27,7 @@ export class EventParameter extends SlangNode { this.name = new Identifier(ast.name); } - this.updateMetadata([this.typeName]); + this.updateMetadata(this.typeName); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/EventParameters.ts b/src/slang-nodes/EventParameters.ts index e2d462acb..6c03aaba1 100644 --- a/src/slang-nodes/EventParameters.ts +++ b/src/slang-nodes/EventParameters.ts @@ -18,7 +18,7 @@ export class EventParameters extends SlangNode { this.items = ast.items.map((item) => new EventParameter(item, options)); - this.updateMetadata([this.items]); + this.updateMetadata(this.items); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/EventParametersDeclaration.ts b/src/slang-nodes/EventParametersDeclaration.ts index 680db1e42..f6fc717f0 100644 --- a/src/slang-nodes/EventParametersDeclaration.ts +++ b/src/slang-nodes/EventParametersDeclaration.ts @@ -20,7 +20,7 @@ export class EventParametersDeclaration extends SlangNode { this.parameters = new EventParameters(ast.parameters, options); - this.updateMetadata([this.parameters]); + this.updateMetadata(this.parameters); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ExperimentalFeature.ts b/src/slang-nodes/ExperimentalFeature.ts index 2d77fd8c2..fbf84674a 100644 --- a/src/slang-nodes/ExperimentalFeature.ts +++ b/src/slang-nodes/ExperimentalFeature.ts @@ -25,9 +25,8 @@ export class ExperimentalFeature extends SlangNode { ? new Identifier(ast.variant) : new StringLiteral(ast.variant, options); - this.updateMetadata( - this.variant.kind === TerminalKind.Identifier ? [] : [this.variant] - ); + if (this.variant.kind !== TerminalKind.Identifier) + this.updateMetadata(this.variant); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ExperimentalPragma.ts b/src/slang-nodes/ExperimentalPragma.ts index 20e6c6acf..5ba3a05f4 100644 --- a/src/slang-nodes/ExperimentalPragma.ts +++ b/src/slang-nodes/ExperimentalPragma.ts @@ -17,7 +17,7 @@ export class ExperimentalPragma extends SlangNode { this.feature = new ExperimentalFeature(ast.feature, options); - this.updateMetadata([this.feature]); + this.updateMetadata(this.feature); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ExponentiationExpression.ts b/src/slang-nodes/ExponentiationExpression.ts index c8ec727e3..9d8d82448 100644 --- a/src/slang-nodes/ExponentiationExpression.ts +++ b/src/slang-nodes/ExponentiationExpression.ts @@ -55,7 +55,7 @@ export class ExponentiationExpression extends SlangNode { this.operator = ast.operator.unparse(); this.rightOperand = new Expression(ast.rightOperand, options); - this.updateMetadata([this.leftOperand, this.rightOperand]); + this.updateMetadata(this.leftOperand, this.rightOperand); this.rightOperand = tryToHug(this.rightOperand); this.leftOperand = tryToHug(this.leftOperand); diff --git a/src/slang-nodes/Expression.ts b/src/slang-nodes/Expression.ts index d3d6f4740..008c52e44 100644 --- a/src/slang-nodes/Expression.ts +++ b/src/slang-nodes/Expression.ts @@ -240,9 +240,8 @@ export class Expression extends SlangNode { } } - this.updateMetadata( - this.variant.kind === TerminalKind.Identifier ? [] : [this.variant] - ); + if (this.variant.kind !== TerminalKind.Identifier) + this.updateMetadata(this.variant); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ExpressionStatement.ts b/src/slang-nodes/ExpressionStatement.ts index 8b4068ca8..bc3e17f25 100644 --- a/src/slang-nodes/ExpressionStatement.ts +++ b/src/slang-nodes/ExpressionStatement.ts @@ -17,7 +17,7 @@ export class ExpressionStatement extends SlangNode { this.expression = new Expression(ast.expression, options); - this.updateMetadata([this.expression]); + this.updateMetadata(this.expression); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/FallbackFunctionAttribute.ts b/src/slang-nodes/FallbackFunctionAttribute.ts index a18eab700..e346aef99 100644 --- a/src/slang-nodes/FallbackFunctionAttribute.ts +++ b/src/slang-nodes/FallbackFunctionAttribute.ts @@ -39,7 +39,7 @@ export class FallbackFunctionAttribute extends SlangNode { } } - this.updateMetadata(typeof this.variant === 'string' ? [] : [this.variant]); + if (typeof this.variant !== 'string') this.updateMetadata(this.variant); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/FallbackFunctionAttributes.ts b/src/slang-nodes/FallbackFunctionAttributes.ts index e40df692d..0f48bfdb6 100644 --- a/src/slang-nodes/FallbackFunctionAttributes.ts +++ b/src/slang-nodes/FallbackFunctionAttributes.ts @@ -26,7 +26,7 @@ export class FallbackFunctionAttributes extends SlangNode { (item) => new FallbackFunctionAttribute(item, options) ); - this.updateMetadata([this.items]); + this.updateMetadata(this.items); this.items = this.items.sort(sortFunctionAttributes); } diff --git a/src/slang-nodes/FallbackFunctionDefinition.ts b/src/slang-nodes/FallbackFunctionDefinition.ts index f07c8cfd5..4504370b5 100644 --- a/src/slang-nodes/FallbackFunctionDefinition.ts +++ b/src/slang-nodes/FallbackFunctionDefinition.ts @@ -35,12 +35,12 @@ export class FallbackFunctionDefinition extends SlangNode { } this.body = new FunctionBody(ast.body, options); - this.updateMetadata([ + this.updateMetadata( this.parameters, this.attributes, this.returns, this.body - ]); + ); this.cleanModifierInvocationArguments(); } diff --git a/src/slang-nodes/ForStatement.ts b/src/slang-nodes/ForStatement.ts index 59ee5ed02..26d3cb9ca 100644 --- a/src/slang-nodes/ForStatement.ts +++ b/src/slang-nodes/ForStatement.ts @@ -38,12 +38,12 @@ export class ForStatement extends SlangNode { } this.body = new Statement(ast.body, options); - this.updateMetadata([ + this.updateMetadata( this.initialization, this.condition, this.iterator, this.body - ]); + ); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ForStatementCondition.ts b/src/slang-nodes/ForStatementCondition.ts index 9f6c5d5a8..4aae16e23 100644 --- a/src/slang-nodes/ForStatementCondition.ts +++ b/src/slang-nodes/ForStatementCondition.ts @@ -20,7 +20,7 @@ export class ForStatementCondition extends SlangNode { ? ast.variant.unparse() : new ExpressionStatement(ast.variant, options); - this.updateMetadata(typeof this.variant === 'string' ? [] : [this.variant]); + if (typeof this.variant !== 'string') this.updateMetadata(this.variant); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ForStatementInitialization.ts b/src/slang-nodes/ForStatementInitialization.ts index 6bf221c1d..95a7a879d 100644 --- a/src/slang-nodes/ForStatementInitialization.ts +++ b/src/slang-nodes/ForStatementInitialization.ts @@ -51,7 +51,7 @@ export class ForStatementInitialization extends SlangNode { } } - this.updateMetadata(typeof this.variant === 'string' ? [] : [this.variant]); + if (typeof this.variant !== 'string') this.updateMetadata(this.variant); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/FunctionAttribute.ts b/src/slang-nodes/FunctionAttribute.ts index 6e9dd21bc..55769bb44 100644 --- a/src/slang-nodes/FunctionAttribute.ts +++ b/src/slang-nodes/FunctionAttribute.ts @@ -36,7 +36,7 @@ export class FunctionAttribute extends SlangNode { } } - this.updateMetadata(typeof this.variant === 'string' ? [] : [this.variant]); + if (typeof this.variant !== 'string') this.updateMetadata(this.variant); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/FunctionAttributes.ts b/src/slang-nodes/FunctionAttributes.ts index 60285c1ea..6ecac12b4 100644 --- a/src/slang-nodes/FunctionAttributes.ts +++ b/src/slang-nodes/FunctionAttributes.ts @@ -21,7 +21,7 @@ export class FunctionAttributes extends SlangNode { this.items = ast.items.map((item) => new FunctionAttribute(item, options)); - this.updateMetadata([this.items]); + this.updateMetadata(this.items); this.items = this.items.sort(sortFunctionAttributes); } diff --git a/src/slang-nodes/FunctionBody.ts b/src/slang-nodes/FunctionBody.ts index f4c25d8b9..9ab675215 100644 --- a/src/slang-nodes/FunctionBody.ts +++ b/src/slang-nodes/FunctionBody.ts @@ -20,7 +20,7 @@ export class FunctionBody extends SlangNode { ? ast.variant.unparse() : new Block(ast.variant, options); - this.updateMetadata(typeof this.variant === 'string' ? [] : [this.variant]); + if (typeof this.variant !== 'string') this.updateMetadata(this.variant); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/FunctionCallExpression.ts b/src/slang-nodes/FunctionCallExpression.ts index 922e9ca9d..7facaa062 100644 --- a/src/slang-nodes/FunctionCallExpression.ts +++ b/src/slang-nodes/FunctionCallExpression.ts @@ -28,7 +28,7 @@ export class FunctionCallExpression extends SlangNode { this.operand = new Expression(ast.operand, options); this.arguments = new ArgumentsDeclaration(ast.arguments, options); - this.updateMetadata([this.operand, this.arguments]); + this.updateMetadata(this.operand, this.arguments); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/FunctionDefinition.ts b/src/slang-nodes/FunctionDefinition.ts index 5e7c46a8b..077e79d82 100644 --- a/src/slang-nodes/FunctionDefinition.ts +++ b/src/slang-nodes/FunctionDefinition.ts @@ -37,13 +37,13 @@ export class FunctionDefinition extends SlangNode { } this.body = new FunctionBody(ast.body, options); - this.updateMetadata([ + this.updateMetadata( this.name, this.parameters, this.attributes, this.returns, this.body - ]); + ); // Older versions of Solidity defined a constructor as a function having // the same name as the contract. diff --git a/src/slang-nodes/FunctionType.ts b/src/slang-nodes/FunctionType.ts index 3e72314b1..5480767e0 100644 --- a/src/slang-nodes/FunctionType.ts +++ b/src/slang-nodes/FunctionType.ts @@ -28,7 +28,7 @@ export class FunctionType extends SlangNode { this.returns = new ReturnsDeclaration(ast.returns, options); } - this.updateMetadata([this.parameters, this.attributes, this.returns]); + this.updateMetadata(this.parameters, this.attributes, this.returns); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/FunctionTypeAttributes.ts b/src/slang-nodes/FunctionTypeAttributes.ts index f3613b186..06a17acfe 100644 --- a/src/slang-nodes/FunctionTypeAttributes.ts +++ b/src/slang-nodes/FunctionTypeAttributes.ts @@ -20,7 +20,7 @@ export class FunctionTypeAttributes extends SlangNode { this.items = ast.items.map((item) => new FunctionTypeAttribute(item)); - this.updateMetadata([this.items]); + this.updateMetadata(this.items); this.items = this.items.sort(sortFunctionAttributes); } diff --git a/src/slang-nodes/HexNumberExpression.ts b/src/slang-nodes/HexNumberExpression.ts index b28033f66..24fd646b6 100644 --- a/src/slang-nodes/HexNumberExpression.ts +++ b/src/slang-nodes/HexNumberExpression.ts @@ -22,7 +22,7 @@ export class HexNumberExpression extends SlangNode { this.unit = new NumberUnit(ast.unit); } - this.updateMetadata([this.unit]); + this.updateMetadata(this.unit); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/HexStringLiterals.ts b/src/slang-nodes/HexStringLiterals.ts index 01c9ee145..1b6fefed9 100644 --- a/src/slang-nodes/HexStringLiterals.ts +++ b/src/slang-nodes/HexStringLiterals.ts @@ -20,7 +20,7 @@ export class HexStringLiterals extends SlangNode { this.items = ast.items.map((item) => new HexStringLiteral(item, options)); - this.updateMetadata([this.items]); + this.updateMetadata(this.items); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/IfStatement.ts b/src/slang-nodes/IfStatement.ts index 9d84a54fa..b6eb164a3 100644 --- a/src/slang-nodes/IfStatement.ts +++ b/src/slang-nodes/IfStatement.ts @@ -32,7 +32,7 @@ export class IfStatement extends SlangNode { this.elseBranch = new ElseBranch(ast.elseBranch, options); } - this.updateMetadata([this.condition, this.body, this.elseBranch]); + this.updateMetadata(this.condition, this.body, this.elseBranch); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ImportClause.ts b/src/slang-nodes/ImportClause.ts index 819e2fb56..945229810 100644 --- a/src/slang-nodes/ImportClause.ts +++ b/src/slang-nodes/ImportClause.ts @@ -34,7 +34,7 @@ export class ImportClause extends SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - this.updateMetadata([this.variant]); + this.updateMetadata(this.variant); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ImportDeconstruction.ts b/src/slang-nodes/ImportDeconstruction.ts index 8047056e7..c8a6ff140 100644 --- a/src/slang-nodes/ImportDeconstruction.ts +++ b/src/slang-nodes/ImportDeconstruction.ts @@ -21,7 +21,7 @@ export class ImportDeconstruction extends SlangNode { this.symbols = new ImportDeconstructionSymbols(ast.symbols); this.path = new StringLiteral(ast.path, options); - this.updateMetadata([this.symbols, this.path]); + this.updateMetadata(this.symbols, this.path); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ImportDeconstructionSymbol.ts b/src/slang-nodes/ImportDeconstructionSymbol.ts index ea04f8eb8..250a28c1d 100644 --- a/src/slang-nodes/ImportDeconstructionSymbol.ts +++ b/src/slang-nodes/ImportDeconstructionSymbol.ts @@ -22,7 +22,7 @@ export class ImportDeconstructionSymbol extends SlangNode { this.alias = new ImportAlias(ast.alias); } - this.updateMetadata([this.alias]); + this.updateMetadata(this.alias); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ImportDeconstructionSymbols.ts b/src/slang-nodes/ImportDeconstructionSymbols.ts index c51a67751..a5ebf0f7b 100644 --- a/src/slang-nodes/ImportDeconstructionSymbols.ts +++ b/src/slang-nodes/ImportDeconstructionSymbols.ts @@ -22,7 +22,7 @@ export class ImportDeconstructionSymbols extends SlangNode { this.items = ast.items.map((item) => new ImportDeconstructionSymbol(item)); - this.updateMetadata([this.items]); + this.updateMetadata(this.items); } print( diff --git a/src/slang-nodes/ImportDirective.ts b/src/slang-nodes/ImportDirective.ts index 798214248..1ae6051b3 100644 --- a/src/slang-nodes/ImportDirective.ts +++ b/src/slang-nodes/ImportDirective.ts @@ -17,7 +17,7 @@ export class ImportDirective extends SlangNode { this.clause = new ImportClause(ast.clause, options); - this.updateMetadata([this.clause]); + this.updateMetadata(this.clause); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/IndexAccessEnd.ts b/src/slang-nodes/IndexAccessEnd.ts index 333511599..a90194910 100644 --- a/src/slang-nodes/IndexAccessEnd.ts +++ b/src/slang-nodes/IndexAccessEnd.ts @@ -19,7 +19,7 @@ export class IndexAccessEnd extends SlangNode { this.end = new Expression(ast.end, options); } - this.updateMetadata([this.end]); + this.updateMetadata(this.end); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/IndexAccessExpression.ts b/src/slang-nodes/IndexAccessExpression.ts index 13ca3ee5b..4efc5a4dc 100644 --- a/src/slang-nodes/IndexAccessExpression.ts +++ b/src/slang-nodes/IndexAccessExpression.ts @@ -33,7 +33,7 @@ export class IndexAccessExpression extends SlangNode { this.end = new IndexAccessEnd(ast.end, options); } - this.updateMetadata([this.operand, this.start, this.end]); + this.updateMetadata(this.operand, this.start, this.end); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/InequalityExpression.ts b/src/slang-nodes/InequalityExpression.ts index 03e751244..5af48cc66 100644 --- a/src/slang-nodes/InequalityExpression.ts +++ b/src/slang-nodes/InequalityExpression.ts @@ -33,7 +33,7 @@ export class InequalityExpression extends SlangNode { this.operator = ast.operator.unparse(); this.rightOperand = new Expression(ast.rightOperand, options); - this.updateMetadata([this.leftOperand, this.rightOperand]); + this.updateMetadata(this.leftOperand, this.rightOperand); } print( diff --git a/src/slang-nodes/InheritanceSpecifier.ts b/src/slang-nodes/InheritanceSpecifier.ts index 2c51432b5..48bf09f8d 100644 --- a/src/slang-nodes/InheritanceSpecifier.ts +++ b/src/slang-nodes/InheritanceSpecifier.ts @@ -17,7 +17,7 @@ export class InheritanceSpecifier extends SlangNode { this.types = new InheritanceTypes(ast.types, options); - this.updateMetadata([this.types]); + this.updateMetadata(this.types); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/InheritanceType.ts b/src/slang-nodes/InheritanceType.ts index 93ee8aa8c..e66839012 100644 --- a/src/slang-nodes/InheritanceType.ts +++ b/src/slang-nodes/InheritanceType.ts @@ -23,7 +23,7 @@ export class InheritanceType extends SlangNode { this.arguments = new ArgumentsDeclaration(ast.arguments, options); } - this.updateMetadata([this.typeName, this.arguments]); + this.updateMetadata(this.typeName, this.arguments); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/InheritanceTypes.ts b/src/slang-nodes/InheritanceTypes.ts index ea1339cf7..e9b04e66d 100644 --- a/src/slang-nodes/InheritanceTypes.ts +++ b/src/slang-nodes/InheritanceTypes.ts @@ -21,7 +21,7 @@ export class InheritanceTypes extends SlangNode { this.items = ast.items.map((item) => new InheritanceType(item, options)); - this.updateMetadata([this.items]); + this.updateMetadata(this.items); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/InterfaceDefinition.ts b/src/slang-nodes/InterfaceDefinition.ts index 4a4857ee3..547668125 100644 --- a/src/slang-nodes/InterfaceDefinition.ts +++ b/src/slang-nodes/InterfaceDefinition.ts @@ -30,7 +30,7 @@ export class InterfaceDefinition extends SlangNode { } this.members = new InterfaceMembers(ast.members, options); - this.updateMetadata([this.inheritance, this.members]); + this.updateMetadata(this.inheritance, this.members); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/InterfaceMembers.ts b/src/slang-nodes/InterfaceMembers.ts index 384a9763e..6ee398a26 100644 --- a/src/slang-nodes/InterfaceMembers.ts +++ b/src/slang-nodes/InterfaceMembers.ts @@ -22,7 +22,7 @@ export class InterfaceMembers extends SlangNode { this.items = ast.items.map((item) => new ContractMember(item, options)); - this.updateMetadata([this.items]); + this.updateMetadata(this.items); } print( diff --git a/src/slang-nodes/LibraryDefinition.ts b/src/slang-nodes/LibraryDefinition.ts index 53c09a94a..01fff5014 100644 --- a/src/slang-nodes/LibraryDefinition.ts +++ b/src/slang-nodes/LibraryDefinition.ts @@ -24,7 +24,7 @@ export class LibraryDefinition extends SlangNode { this.name = new Identifier(ast.name); this.members = new LibraryMembers(ast.members, options); - this.updateMetadata([this.members]); + this.updateMetadata(this.members); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/LibraryMembers.ts b/src/slang-nodes/LibraryMembers.ts index ce888a472..92ccfd0ed 100644 --- a/src/slang-nodes/LibraryMembers.ts +++ b/src/slang-nodes/LibraryMembers.ts @@ -22,7 +22,7 @@ export class LibraryMembers extends SlangNode { this.items = ast.items.map((item) => new ContractMember(item, options)); - this.updateMetadata([this.items]); + this.updateMetadata(this.items); } print( diff --git a/src/slang-nodes/MappingKey.ts b/src/slang-nodes/MappingKey.ts index a07786c67..3963d6e7a 100644 --- a/src/slang-nodes/MappingKey.ts +++ b/src/slang-nodes/MappingKey.ts @@ -23,7 +23,7 @@ export class MappingKey extends SlangNode { this.name = new Identifier(ast.name); } - this.updateMetadata([this.keyType]); + this.updateMetadata(this.keyType); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/MappingKeyType.ts b/src/slang-nodes/MappingKeyType.ts index 675795238..c2b25067e 100644 --- a/src/slang-nodes/MappingKeyType.ts +++ b/src/slang-nodes/MappingKeyType.ts @@ -26,7 +26,7 @@ export class MappingKeyType extends SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - this.updateMetadata([this.variant]); + this.updateMetadata(this.variant); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/MappingType.ts b/src/slang-nodes/MappingType.ts index 78b14e06d..3a95e54f0 100644 --- a/src/slang-nodes/MappingType.ts +++ b/src/slang-nodes/MappingType.ts @@ -21,7 +21,7 @@ export class MappingType extends SlangNode { this.keyType = new MappingKey(ast.keyType); this.valueType = new MappingValue(ast.valueType, options); - this.updateMetadata([this.keyType, this.valueType]); + this.updateMetadata(this.keyType, this.valueType); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/MappingValue.ts b/src/slang-nodes/MappingValue.ts index dd5a99fcf..a5cf3b11c 100644 --- a/src/slang-nodes/MappingValue.ts +++ b/src/slang-nodes/MappingValue.ts @@ -24,7 +24,7 @@ export class MappingValue extends SlangNode { this.name = new Identifier(ast.name); } - this.updateMetadata([this.typeName]); + this.updateMetadata(this.typeName); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/MemberAccessExpression.ts b/src/slang-nodes/MemberAccessExpression.ts index 2a0e7dbcd..f71e1782c 100644 --- a/src/slang-nodes/MemberAccessExpression.ts +++ b/src/slang-nodes/MemberAccessExpression.ts @@ -127,7 +127,7 @@ export class MemberAccessExpression extends SlangNode { this.operand = new Expression(ast.operand, options); this.member = new Identifier(ast.member); - this.updateMetadata([this.operand]); + this.updateMetadata(this.operand); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ModifierAttribute.ts b/src/slang-nodes/ModifierAttribute.ts index 21ff7a633..e49c3e2e4 100644 --- a/src/slang-nodes/ModifierAttribute.ts +++ b/src/slang-nodes/ModifierAttribute.ts @@ -19,7 +19,7 @@ export class ModifierAttribute extends SlangNode { ? ast.variant.unparse() : new OverrideSpecifier(ast.variant); - this.updateMetadata(typeof this.variant === 'string' ? [] : [this.variant]); + if (typeof this.variant !== 'string') this.updateMetadata(this.variant); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ModifierAttributes.ts b/src/slang-nodes/ModifierAttributes.ts index ef8ca5fc2..6340fdb4d 100644 --- a/src/slang-nodes/ModifierAttributes.ts +++ b/src/slang-nodes/ModifierAttributes.ts @@ -20,7 +20,7 @@ export class ModifierAttributes extends SlangNode { this.items = ast.items.map((item) => new ModifierAttribute(item)); - this.updateMetadata([this.items]); + this.updateMetadata(this.items); this.items = this.items.sort(sortFunctionAttributes); } diff --git a/src/slang-nodes/ModifierDefinition.ts b/src/slang-nodes/ModifierDefinition.ts index f450d8793..dc290a8eb 100644 --- a/src/slang-nodes/ModifierDefinition.ts +++ b/src/slang-nodes/ModifierDefinition.ts @@ -33,7 +33,7 @@ export class ModifierDefinition extends SlangNode { this.attributes = new ModifierAttributes(ast.attributes); this.body = new FunctionBody(ast.body, options); - this.updateMetadata([this.parameters, this.attributes, this.body]); + this.updateMetadata(this.parameters, this.attributes, this.body); if (!this.parameters) { const parametersOffset = diff --git a/src/slang-nodes/ModifierInvocation.ts b/src/slang-nodes/ModifierInvocation.ts index acbb193ae..b5404623b 100644 --- a/src/slang-nodes/ModifierInvocation.ts +++ b/src/slang-nodes/ModifierInvocation.ts @@ -23,7 +23,7 @@ export class ModifierInvocation extends SlangNode { this.arguments = new ArgumentsDeclaration(ast.arguments, options); } - this.updateMetadata([this.name, this.arguments]); + this.updateMetadata(this.name, this.arguments); } cleanModifierInvocationArguments(): void { diff --git a/src/slang-nodes/MultiplicativeExpression.ts b/src/slang-nodes/MultiplicativeExpression.ts index c074b25e6..6c31ccfa8 100644 --- a/src/slang-nodes/MultiplicativeExpression.ts +++ b/src/slang-nodes/MultiplicativeExpression.ts @@ -47,7 +47,7 @@ export class MultiplicativeExpression extends SlangNode { this.operator = ast.operator.unparse(); this.rightOperand = new Expression(ast.rightOperand, options); - this.updateMetadata([this.leftOperand, this.rightOperand]); + this.updateMetadata(this.leftOperand, this.rightOperand); switch (this.operator) { case '*': diff --git a/src/slang-nodes/NamedArgument.ts b/src/slang-nodes/NamedArgument.ts index 7d3d7d485..3d00709f8 100644 --- a/src/slang-nodes/NamedArgument.ts +++ b/src/slang-nodes/NamedArgument.ts @@ -21,7 +21,7 @@ export class NamedArgument extends SlangNode { this.name = new Identifier(ast.name); this.value = new Expression(ast.value, options); - this.updateMetadata([this.value]); + this.updateMetadata(this.value); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/NamedArgumentGroup.ts b/src/slang-nodes/NamedArgumentGroup.ts index d515bc468..a2631867e 100644 --- a/src/slang-nodes/NamedArgumentGroup.ts +++ b/src/slang-nodes/NamedArgumentGroup.ts @@ -17,7 +17,7 @@ export class NamedArgumentGroup extends SlangNode { this.arguments = new NamedArguments(ast.arguments, options); - this.updateMetadata([this.arguments]); + this.updateMetadata(this.arguments); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/NamedArguments.ts b/src/slang-nodes/NamedArguments.ts index afd153195..521f40ece 100644 --- a/src/slang-nodes/NamedArguments.ts +++ b/src/slang-nodes/NamedArguments.ts @@ -21,7 +21,7 @@ export class NamedArguments extends SlangNode { this.items = ast.items.map((item) => new NamedArgument(item, options)); - this.updateMetadata([this.items]); + this.updateMetadata(this.items); } print( diff --git a/src/slang-nodes/NamedArgumentsDeclaration.ts b/src/slang-nodes/NamedArgumentsDeclaration.ts index c12dd32b3..ca321b7b3 100644 --- a/src/slang-nodes/NamedArgumentsDeclaration.ts +++ b/src/slang-nodes/NamedArgumentsDeclaration.ts @@ -22,7 +22,7 @@ export class NamedArgumentsDeclaration extends SlangNode { this.arguments = new NamedArgumentGroup(ast.arguments, options); } - this.updateMetadata([this.arguments]); + this.updateMetadata(this.arguments); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/NamedImport.ts b/src/slang-nodes/NamedImport.ts index 885052e44..9c91b1d9b 100644 --- a/src/slang-nodes/NamedImport.ts +++ b/src/slang-nodes/NamedImport.ts @@ -21,7 +21,7 @@ export class NamedImport extends SlangNode { this.alias = new ImportAlias(ast.alias); this.path = new StringLiteral(ast.path, options); - this.updateMetadata([this.alias, this.path]); + this.updateMetadata(this.alias, this.path); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/NewExpression.ts b/src/slang-nodes/NewExpression.ts index c9f2c961c..0c40af11d 100644 --- a/src/slang-nodes/NewExpression.ts +++ b/src/slang-nodes/NewExpression.ts @@ -17,7 +17,7 @@ export class NewExpression extends SlangNode { this.typeName = new TypeName(ast.typeName, options); - this.updateMetadata([this.typeName]); + this.updateMetadata(this.typeName); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/OrExpression.ts b/src/slang-nodes/OrExpression.ts index d50205241..432e876c0 100644 --- a/src/slang-nodes/OrExpression.ts +++ b/src/slang-nodes/OrExpression.ts @@ -27,7 +27,7 @@ export class OrExpression extends SlangNode { this.operator = ast.operator.unparse(); this.rightOperand = new Expression(ast.rightOperand, options); - this.updateMetadata([this.leftOperand, this.rightOperand]); + this.updateMetadata(this.leftOperand, this.rightOperand); this.leftOperand = tryToHug(this.leftOperand); this.rightOperand = tryToHug(this.rightOperand); diff --git a/src/slang-nodes/OverridePaths.ts b/src/slang-nodes/OverridePaths.ts index 844ef0f48..48caf88a6 100644 --- a/src/slang-nodes/OverridePaths.ts +++ b/src/slang-nodes/OverridePaths.ts @@ -17,7 +17,7 @@ export class OverridePaths extends SlangNode { this.items = ast.items.map((item) => new IdentifierPath(item)); - this.updateMetadata([this.items]); + this.updateMetadata(this.items); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/OverridePathsDeclaration.ts b/src/slang-nodes/OverridePathsDeclaration.ts index eb15ccb99..8335f117f 100644 --- a/src/slang-nodes/OverridePathsDeclaration.ts +++ b/src/slang-nodes/OverridePathsDeclaration.ts @@ -16,7 +16,7 @@ export class OverridePathsDeclaration extends SlangNode { this.paths = new OverridePaths(ast.paths); - this.updateMetadata([this.paths]); + this.updateMetadata(this.paths); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/OverrideSpecifier.ts b/src/slang-nodes/OverrideSpecifier.ts index 154c58af0..fe6971762 100644 --- a/src/slang-nodes/OverrideSpecifier.ts +++ b/src/slang-nodes/OverrideSpecifier.ts @@ -18,7 +18,7 @@ export class OverrideSpecifier extends SlangNode { this.overridden = new OverridePathsDeclaration(ast.overridden); } - this.updateMetadata([this.overridden]); + this.updateMetadata(this.overridden); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/Parameter.ts b/src/slang-nodes/Parameter.ts index 5ed2910a1..51d4548fe 100644 --- a/src/slang-nodes/Parameter.ts +++ b/src/slang-nodes/Parameter.ts @@ -33,7 +33,7 @@ export class Parameter extends SlangNode { this.name = new Identifier(ast.name); } - this.updateMetadata([this.typeName, this.storageLocation]); + this.updateMetadata(this.typeName, this.storageLocation); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/Parameters.ts b/src/slang-nodes/Parameters.ts index 28f44284f..9d95fabd7 100644 --- a/src/slang-nodes/Parameters.ts +++ b/src/slang-nodes/Parameters.ts @@ -20,7 +20,7 @@ export class Parameters extends SlangNode { this.items = ast.items.map((item) => new Parameter(item, options)); - this.updateMetadata([this.items]); + this.updateMetadata(this.items); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ParametersDeclaration.ts b/src/slang-nodes/ParametersDeclaration.ts index f7794366d..433289d5b 100644 --- a/src/slang-nodes/ParametersDeclaration.ts +++ b/src/slang-nodes/ParametersDeclaration.ts @@ -17,7 +17,7 @@ export class ParametersDeclaration extends SlangNode { this.parameters = new Parameters(ast.parameters, options); - this.updateMetadata([this.parameters]); + this.updateMetadata(this.parameters); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/PathImport.ts b/src/slang-nodes/PathImport.ts index 0dd8c029d..bd4442dbe 100644 --- a/src/slang-nodes/PathImport.ts +++ b/src/slang-nodes/PathImport.ts @@ -23,7 +23,7 @@ export class PathImport extends SlangNode { this.alias = new ImportAlias(ast.alias); } - this.updateMetadata([this.path, this.alias]); + this.updateMetadata(this.path, this.alias); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/PositionalArguments.ts b/src/slang-nodes/PositionalArguments.ts index a29614c07..51a198e73 100644 --- a/src/slang-nodes/PositionalArguments.ts +++ b/src/slang-nodes/PositionalArguments.ts @@ -20,7 +20,7 @@ export class PositionalArguments extends SlangNode { this.items = ast.items.map((item) => new Expression(item, options)); - this.updateMetadata([this.items]); + this.updateMetadata(this.items); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/PositionalArgumentsDeclaration.ts b/src/slang-nodes/PositionalArgumentsDeclaration.ts index d9edad812..89a605ede 100644 --- a/src/slang-nodes/PositionalArgumentsDeclaration.ts +++ b/src/slang-nodes/PositionalArgumentsDeclaration.ts @@ -23,7 +23,7 @@ export class PositionalArgumentsDeclaration extends SlangNode { this.arguments = new PositionalArguments(ast.arguments, options); - this.updateMetadata([this.arguments]); + this.updateMetadata(this.arguments); // We need to check the comments at this point because they will be removed // from this node into the root node. diff --git a/src/slang-nodes/PostfixExpression.ts b/src/slang-nodes/PostfixExpression.ts index 099445545..a6dfcad49 100644 --- a/src/slang-nodes/PostfixExpression.ts +++ b/src/slang-nodes/PostfixExpression.ts @@ -20,7 +20,7 @@ export class PostfixExpression extends SlangNode { this.operand = new Expression(ast.operand, options); this.operator = ast.operator.unparse(); - this.updateMetadata([this.operand]); + this.updateMetadata(this.operand); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/Pragma.ts b/src/slang-nodes/Pragma.ts index 8620c736f..00f8ed5b4 100644 --- a/src/slang-nodes/Pragma.ts +++ b/src/slang-nodes/Pragma.ts @@ -34,7 +34,7 @@ export class Pragma extends SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - this.updateMetadata([this.variant]); + this.updateMetadata(this.variant); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/PragmaDirective.ts b/src/slang-nodes/PragmaDirective.ts index 3f438ca94..071411bb8 100644 --- a/src/slang-nodes/PragmaDirective.ts +++ b/src/slang-nodes/PragmaDirective.ts @@ -17,7 +17,7 @@ export class PragmaDirective extends SlangNode { this.pragma = new Pragma(ast.pragma, options); - this.updateMetadata([this.pragma]); + this.updateMetadata(this.pragma); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/PrefixExpression.ts b/src/slang-nodes/PrefixExpression.ts index 23660892d..6e278f3ae 100644 --- a/src/slang-nodes/PrefixExpression.ts +++ b/src/slang-nodes/PrefixExpression.ts @@ -20,7 +20,7 @@ export class PrefixExpression extends SlangNode { this.operator = ast.operator.unparse(); this.operand = new Expression(ast.operand, options); - this.updateMetadata([this.operand]); + this.updateMetadata(this.operand); if (this.operator === 'delete') { this.operator = `${this.operator} `; diff --git a/src/slang-nodes/ReceiveFunctionAttribute.ts b/src/slang-nodes/ReceiveFunctionAttribute.ts index 558dc626a..5c6138663 100644 --- a/src/slang-nodes/ReceiveFunctionAttribute.ts +++ b/src/slang-nodes/ReceiveFunctionAttribute.ts @@ -39,7 +39,7 @@ export class ReceiveFunctionAttribute extends SlangNode { } } - this.updateMetadata(typeof this.variant === 'string' ? [] : [this.variant]); + if (typeof this.variant !== 'string') this.updateMetadata(this.variant); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ReceiveFunctionAttributes.ts b/src/slang-nodes/ReceiveFunctionAttributes.ts index e562a3629..7ec5c13a4 100644 --- a/src/slang-nodes/ReceiveFunctionAttributes.ts +++ b/src/slang-nodes/ReceiveFunctionAttributes.ts @@ -26,7 +26,7 @@ export class ReceiveFunctionAttributes extends SlangNode { (item) => new ReceiveFunctionAttribute(item, options) ); - this.updateMetadata([this.items]); + this.updateMetadata(this.items); this.items = this.items.sort(sortFunctionAttributes); } diff --git a/src/slang-nodes/ReceiveFunctionDefinition.ts b/src/slang-nodes/ReceiveFunctionDefinition.ts index 7bf6e223b..b3637aaf4 100644 --- a/src/slang-nodes/ReceiveFunctionDefinition.ts +++ b/src/slang-nodes/ReceiveFunctionDefinition.ts @@ -29,7 +29,7 @@ export class ReceiveFunctionDefinition extends SlangNode { this.attributes = new ReceiveFunctionAttributes(ast.attributes, options); this.body = new FunctionBody(ast.body, options); - this.updateMetadata([this.parameters, this.attributes, this.body]); + this.updateMetadata(this.parameters, this.attributes, this.body); this.cleanModifierInvocationArguments(); } diff --git a/src/slang-nodes/ReturnStatement.ts b/src/slang-nodes/ReturnStatement.ts index 3725d6826..8523d0f4f 100644 --- a/src/slang-nodes/ReturnStatement.ts +++ b/src/slang-nodes/ReturnStatement.ts @@ -39,7 +39,7 @@ export class ReturnStatement extends SlangNode { this.expression = new Expression(ast.expression, options); } - this.updateMetadata([this.expression]); + this.updateMetadata(this.expression); } print( diff --git a/src/slang-nodes/ReturnsDeclaration.ts b/src/slang-nodes/ReturnsDeclaration.ts index 029dc089b..939609dc9 100644 --- a/src/slang-nodes/ReturnsDeclaration.ts +++ b/src/slang-nodes/ReturnsDeclaration.ts @@ -20,7 +20,7 @@ export class ReturnsDeclaration extends SlangNode { this.variables = new ParametersDeclaration(ast.variables, options); - this.updateMetadata([this.variables]); + this.updateMetadata(this.variables); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/RevertStatement.ts b/src/slang-nodes/RevertStatement.ts index a98f8c0bf..d845a518e 100644 --- a/src/slang-nodes/RevertStatement.ts +++ b/src/slang-nodes/RevertStatement.ts @@ -24,7 +24,7 @@ export class RevertStatement extends SlangNode { } this.arguments = new ArgumentsDeclaration(ast.arguments, options); - this.updateMetadata([this.error, this.arguments]); + this.updateMetadata(this.error, this.arguments); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/ShiftExpression.ts b/src/slang-nodes/ShiftExpression.ts index d989e5165..4292fd367 100644 --- a/src/slang-nodes/ShiftExpression.ts +++ b/src/slang-nodes/ShiftExpression.ts @@ -49,7 +49,7 @@ export class ShiftExpression extends SlangNode { this.operator = ast.operator.unparse(); this.rightOperand = new Expression(ast.rightOperand, options); - this.updateMetadata([this.leftOperand, this.rightOperand]); + this.updateMetadata(this.leftOperand, this.rightOperand); this.leftOperand = tryToHugLeftOperand(this.leftOperand); this.rightOperand = tryToHugRightOperand(this.rightOperand); diff --git a/src/slang-nodes/SlangNode.ts b/src/slang-nodes/SlangNode.ts index df381e199..172d99d5f 100644 --- a/src/slang-nodes/SlangNode.ts +++ b/src/slang-nodes/SlangNode.ts @@ -125,7 +125,7 @@ export class SlangNode { } updateMetadata( - childNodes: (StrictAstNode | StrictAstNode[] | undefined)[] + ...childNodes: (StrictAstNode | StrictAstNode[] | undefined)[] ): void { const { comments, loc } = this; // Collect comments diff --git a/src/slang-nodes/SourceUnit.ts b/src/slang-nodes/SourceUnit.ts index e3c0d4464..56a3e5f55 100644 --- a/src/slang-nodes/SourceUnit.ts +++ b/src/slang-nodes/SourceUnit.ts @@ -20,7 +20,7 @@ export class SourceUnit extends SlangNode { this.members = new SourceUnitMembers(ast.members, options); - this.updateMetadata([this.members]); + this.updateMetadata(this.members); // Because of comments being extracted like a russian doll, the order needs // to be fixed at the end. diff --git a/src/slang-nodes/SourceUnitMember.ts b/src/slang-nodes/SourceUnitMember.ts index c78686171..9a61b639e 100644 --- a/src/slang-nodes/SourceUnitMember.ts +++ b/src/slang-nodes/SourceUnitMember.ts @@ -119,7 +119,7 @@ export class SourceUnitMember extends SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - this.updateMetadata([this.variant]); + this.updateMetadata(this.variant); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/SourceUnitMembers.ts b/src/slang-nodes/SourceUnitMembers.ts index 770986342..6f60c9e42 100644 --- a/src/slang-nodes/SourceUnitMembers.ts +++ b/src/slang-nodes/SourceUnitMembers.ts @@ -18,7 +18,7 @@ export class SourceUnitMembers extends SlangNode { this.items = ast.items.map((item) => new SourceUnitMember(item, options)); - this.updateMetadata([this.items]); + this.updateMetadata(this.items); } print( diff --git a/src/slang-nodes/StateVariableAttribute.ts b/src/slang-nodes/StateVariableAttribute.ts index 96fe115d6..b25a90968 100644 --- a/src/slang-nodes/StateVariableAttribute.ts +++ b/src/slang-nodes/StateVariableAttribute.ts @@ -19,7 +19,7 @@ export class StateVariableAttribute extends SlangNode { ? ast.variant.unparse() : new OverrideSpecifier(ast.variant); - this.updateMetadata(typeof this.variant === 'string' ? [] : [this.variant]); + if (typeof this.variant !== 'string') this.updateMetadata(this.variant); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/StateVariableAttributes.ts b/src/slang-nodes/StateVariableAttributes.ts index e7a422a32..a79f5a380 100644 --- a/src/slang-nodes/StateVariableAttributes.ts +++ b/src/slang-nodes/StateVariableAttributes.ts @@ -20,7 +20,7 @@ export class StateVariableAttributes extends SlangNode { this.items = ast.items.map((item) => new StateVariableAttribute(item)); - this.updateMetadata([this.items]); + this.updateMetadata(this.items); this.items = this.items.sort(sortFunctionAttributes); } diff --git a/src/slang-nodes/StateVariableDefinition.ts b/src/slang-nodes/StateVariableDefinition.ts index 7e055aef1..a8b406716 100644 --- a/src/slang-nodes/StateVariableDefinition.ts +++ b/src/slang-nodes/StateVariableDefinition.ts @@ -37,7 +37,7 @@ export class StateVariableDefinition extends SlangNode { this.value = new StateVariableDefinitionValue(ast.value, options); } - this.updateMetadata([this.typeName, this.attributes, this.value]); + this.updateMetadata(this.typeName, this.attributes, this.value); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/StateVariableDefinitionValue.ts b/src/slang-nodes/StateVariableDefinitionValue.ts index 33ab94790..77ef4c41f 100644 --- a/src/slang-nodes/StateVariableDefinitionValue.ts +++ b/src/slang-nodes/StateVariableDefinitionValue.ts @@ -23,7 +23,7 @@ export class StateVariableDefinitionValue extends SlangNode { this.value = new Expression(ast.value, options); - this.updateMetadata([this.value]); + this.updateMetadata(this.value); } print( diff --git a/src/slang-nodes/Statement.ts b/src/slang-nodes/Statement.ts index 4e6a6031f..293dbdc00 100644 --- a/src/slang-nodes/Statement.ts +++ b/src/slang-nodes/Statement.ts @@ -142,7 +142,7 @@ export class Statement extends SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - this.updateMetadata([this.variant]); + this.updateMetadata(this.variant); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/Statements.ts b/src/slang-nodes/Statements.ts index 5ff28c8b7..0c32e3c18 100644 --- a/src/slang-nodes/Statements.ts +++ b/src/slang-nodes/Statements.ts @@ -23,7 +23,7 @@ export class Statements extends SlangNode { this.items = ast.items.map((item) => new Statement(item, options)); - this.updateMetadata([this.items]); + this.updateMetadata(this.items); } print( diff --git a/src/slang-nodes/StorageLayoutSpecifier.ts b/src/slang-nodes/StorageLayoutSpecifier.ts index 2869d042e..5dda52a3f 100644 --- a/src/slang-nodes/StorageLayoutSpecifier.ts +++ b/src/slang-nodes/StorageLayoutSpecifier.ts @@ -24,7 +24,7 @@ export class StorageLayoutSpecifier extends SlangNode { this.expression = new Expression(ast.expression, options); - this.updateMetadata([this.expression]); + this.updateMetadata(this.expression); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/StringExpression.ts b/src/slang-nodes/StringExpression.ts index eb87f6af6..fb4563d0c 100644 --- a/src/slang-nodes/StringExpression.ts +++ b/src/slang-nodes/StringExpression.ts @@ -59,7 +59,7 @@ export class StringExpression extends SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - this.updateMetadata([this.variant]); + this.updateMetadata(this.variant); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/StringLiterals.ts b/src/slang-nodes/StringLiterals.ts index 1c108e4fe..a99d3ca48 100644 --- a/src/slang-nodes/StringLiterals.ts +++ b/src/slang-nodes/StringLiterals.ts @@ -20,7 +20,7 @@ export class StringLiterals extends SlangNode { this.items = ast.items.map((item) => new StringLiteral(item, options)); - this.updateMetadata([this.items]); + this.updateMetadata(this.items); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/StructDefinition.ts b/src/slang-nodes/StructDefinition.ts index 84f17f36d..3ad3a4c00 100644 --- a/src/slang-nodes/StructDefinition.ts +++ b/src/slang-nodes/StructDefinition.ts @@ -21,7 +21,7 @@ export class StructDefinition extends SlangNode { this.name = new Identifier(ast.name); this.members = new StructMembers(ast.members, options); - this.updateMetadata([this.members]); + this.updateMetadata(this.members); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/StructMember.ts b/src/slang-nodes/StructMember.ts index 891ba59f4..a6e5e5f91 100644 --- a/src/slang-nodes/StructMember.ts +++ b/src/slang-nodes/StructMember.ts @@ -21,7 +21,7 @@ export class StructMember extends SlangNode { this.typeName = new TypeName(ast.typeName, options); this.name = new Identifier(ast.name); - this.updateMetadata([this.typeName]); + this.updateMetadata(this.typeName); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/StructMembers.ts b/src/slang-nodes/StructMembers.ts index 7891b407a..2d8a8060c 100644 --- a/src/slang-nodes/StructMembers.ts +++ b/src/slang-nodes/StructMembers.ts @@ -21,7 +21,7 @@ export class StructMembers extends SlangNode { this.items = ast.items.map((item) => new StructMember(item, options)); - this.updateMetadata([this.items]); + this.updateMetadata(this.items); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/TryStatement.ts b/src/slang-nodes/TryStatement.ts index 0276aa809..cd7671587 100644 --- a/src/slang-nodes/TryStatement.ts +++ b/src/slang-nodes/TryStatement.ts @@ -36,12 +36,12 @@ export class TryStatement extends SlangNode { this.body = new Block(ast.body, options); this.catchClauses = new CatchClauses(ast.catchClauses, options); - this.updateMetadata([ + this.updateMetadata( this.expression, this.returns, this.body, this.catchClauses - ]); + ); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/TupleDeconstructionElement.ts b/src/slang-nodes/TupleDeconstructionElement.ts index 414604228..615baca72 100644 --- a/src/slang-nodes/TupleDeconstructionElement.ts +++ b/src/slang-nodes/TupleDeconstructionElement.ts @@ -22,7 +22,7 @@ export class TupleDeconstructionElement extends SlangNode { this.member = new TupleMember(ast.member, options); } - this.updateMetadata([this.member]); + this.updateMetadata(this.member); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/TupleDeconstructionElements.ts b/src/slang-nodes/TupleDeconstructionElements.ts index 121cdd514..674f62a4f 100644 --- a/src/slang-nodes/TupleDeconstructionElements.ts +++ b/src/slang-nodes/TupleDeconstructionElements.ts @@ -23,7 +23,7 @@ export class TupleDeconstructionElements extends SlangNode { (item) => new TupleDeconstructionElement(item, options) ); - this.updateMetadata([this.items]); + this.updateMetadata(this.items); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/TupleDeconstructionStatement.ts b/src/slang-nodes/TupleDeconstructionStatement.ts index 72c389e2b..74e167602 100644 --- a/src/slang-nodes/TupleDeconstructionStatement.ts +++ b/src/slang-nodes/TupleDeconstructionStatement.ts @@ -30,7 +30,7 @@ export class TupleDeconstructionStatement extends SlangNode { this.elements = new TupleDeconstructionElements(ast.elements, options); this.expression = new Expression(ast.expression, options); - this.updateMetadata([this.elements, this.expression]); + this.updateMetadata(this.elements, this.expression); } print( diff --git a/src/slang-nodes/TupleExpression.ts b/src/slang-nodes/TupleExpression.ts index 60bb96852..d3c75a086 100644 --- a/src/slang-nodes/TupleExpression.ts +++ b/src/slang-nodes/TupleExpression.ts @@ -17,7 +17,7 @@ export class TupleExpression extends SlangNode { this.items = new TupleValues(ast.items, options); - this.updateMetadata([this.items]); + this.updateMetadata(this.items); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/TupleMember.ts b/src/slang-nodes/TupleMember.ts index 0670a793b..31f84a284 100644 --- a/src/slang-nodes/TupleMember.ts +++ b/src/slang-nodes/TupleMember.ts @@ -32,7 +32,7 @@ export class TupleMember extends SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - this.updateMetadata([this.variant]); + this.updateMetadata(this.variant); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/TupleValue.ts b/src/slang-nodes/TupleValue.ts index 840e941f2..bb4acbd2a 100644 --- a/src/slang-nodes/TupleValue.ts +++ b/src/slang-nodes/TupleValue.ts @@ -19,7 +19,7 @@ export class TupleValue extends SlangNode { this.expression = new Expression(ast.expression, options); } - this.updateMetadata([this.expression]); + this.updateMetadata(this.expression); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/TupleValues.ts b/src/slang-nodes/TupleValues.ts index 2955cb4d0..686dca1b0 100644 --- a/src/slang-nodes/TupleValues.ts +++ b/src/slang-nodes/TupleValues.ts @@ -20,7 +20,7 @@ export class TupleValues extends SlangNode { this.items = ast.items.map((item) => new TupleValue(item, options)); - this.updateMetadata([this.items]); + this.updateMetadata(this.items); } getSingleExpression(): Expression | undefined { diff --git a/src/slang-nodes/TypeExpression.ts b/src/slang-nodes/TypeExpression.ts index 1e7804148..80b76dcbc 100644 --- a/src/slang-nodes/TypeExpression.ts +++ b/src/slang-nodes/TypeExpression.ts @@ -17,7 +17,7 @@ export class TypeExpression extends SlangNode { this.typeName = new TypeName(ast.typeName, options); - this.updateMetadata([this.typeName]); + this.updateMetadata(this.typeName); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/TypeName.ts b/src/slang-nodes/TypeName.ts index 6e162c2e0..75aa619f4 100644 --- a/src/slang-nodes/TypeName.ts +++ b/src/slang-nodes/TypeName.ts @@ -50,7 +50,7 @@ export class TypeName extends SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - this.updateMetadata([this.variant]); + this.updateMetadata(this.variant); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/TypedTupleMember.ts b/src/slang-nodes/TypedTupleMember.ts index c2f5b1e3e..e4fb97085 100644 --- a/src/slang-nodes/TypedTupleMember.ts +++ b/src/slang-nodes/TypedTupleMember.ts @@ -28,7 +28,7 @@ export class TypedTupleMember extends SlangNode { } this.name = new Identifier(ast.name); - this.updateMetadata([this.typeName, this.storageLocation]); + this.updateMetadata(this.typeName, this.storageLocation); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/UncheckedBlock.ts b/src/slang-nodes/UncheckedBlock.ts index 76f554ee3..3f8fee8e0 100644 --- a/src/slang-nodes/UncheckedBlock.ts +++ b/src/slang-nodes/UncheckedBlock.ts @@ -17,7 +17,7 @@ export class UncheckedBlock extends SlangNode { this.block = new Block(ast.block, options); - this.updateMetadata([this.block]); + this.updateMetadata(this.block); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/UnicodeStringLiterals.ts b/src/slang-nodes/UnicodeStringLiterals.ts index c637c01f1..025957424 100644 --- a/src/slang-nodes/UnicodeStringLiterals.ts +++ b/src/slang-nodes/UnicodeStringLiterals.ts @@ -22,7 +22,7 @@ export class UnicodeStringLiterals extends SlangNode { (item) => new UnicodeStringLiteral(item, options) ); - this.updateMetadata([this.items]); + this.updateMetadata(this.items); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/UnnamedFunctionAttribute.ts b/src/slang-nodes/UnnamedFunctionAttribute.ts index cf4048539..d25bbc7de 100644 --- a/src/slang-nodes/UnnamedFunctionAttribute.ts +++ b/src/slang-nodes/UnnamedFunctionAttribute.ts @@ -23,7 +23,7 @@ export class UnnamedFunctionAttribute extends SlangNode { ? ast.variant.unparse() : new ModifierInvocation(ast.variant, options); - this.updateMetadata(typeof this.variant === 'string' ? [] : [this.variant]); + if (typeof this.variant !== 'string') this.updateMetadata(this.variant); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/UnnamedFunctionAttributes.ts b/src/slang-nodes/UnnamedFunctionAttributes.ts index 136976598..82f45d924 100644 --- a/src/slang-nodes/UnnamedFunctionAttributes.ts +++ b/src/slang-nodes/UnnamedFunctionAttributes.ts @@ -26,7 +26,7 @@ export class UnnamedFunctionAttributes extends SlangNode { (item) => new UnnamedFunctionAttribute(item, options) ); - this.updateMetadata([this.items]); + this.updateMetadata(this.items); this.items = this.items.sort(sortFunctionAttributes); } diff --git a/src/slang-nodes/UnnamedFunctionDefinition.ts b/src/slang-nodes/UnnamedFunctionDefinition.ts index 9e35ca8b3..ca235104f 100644 --- a/src/slang-nodes/UnnamedFunctionDefinition.ts +++ b/src/slang-nodes/UnnamedFunctionDefinition.ts @@ -29,7 +29,7 @@ export class UnnamedFunctionDefinition extends SlangNode { this.attributes = new UnnamedFunctionAttributes(ast.attributes, options); this.body = new FunctionBody(ast.body, options); - this.updateMetadata([this.parameters, this.attributes, this.body]); + this.updateMetadata(this.parameters, this.attributes, this.body); this.cleanModifierInvocationArguments(); } diff --git a/src/slang-nodes/UntypedTupleMember.ts b/src/slang-nodes/UntypedTupleMember.ts index 16c3b63a6..fbd12dec1 100644 --- a/src/slang-nodes/UntypedTupleMember.ts +++ b/src/slang-nodes/UntypedTupleMember.ts @@ -23,7 +23,7 @@ export class UntypedTupleMember extends SlangNode { } this.name = new Identifier(ast.name); - this.updateMetadata([this.storageLocation]); + this.updateMetadata(this.storageLocation); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/UserDefinedValueTypeDefinition.ts b/src/slang-nodes/UserDefinedValueTypeDefinition.ts index abaa3d2cd..3bdd73c08 100644 --- a/src/slang-nodes/UserDefinedValueTypeDefinition.ts +++ b/src/slang-nodes/UserDefinedValueTypeDefinition.ts @@ -20,7 +20,7 @@ export class UserDefinedValueTypeDefinition extends SlangNode { this.name = new Identifier(ast.name); this.valueType = new ElementaryType(ast.valueType); - this.updateMetadata([this.valueType]); + this.updateMetadata(this.valueType); } print( diff --git a/src/slang-nodes/UsingAlias.ts b/src/slang-nodes/UsingAlias.ts index b19c274a7..f1823b6c4 100644 --- a/src/slang-nodes/UsingAlias.ts +++ b/src/slang-nodes/UsingAlias.ts @@ -16,7 +16,7 @@ export class UsingAlias extends SlangNode { this.operator = new UsingOperator(ast.operator); - this.updateMetadata([this.operator]); + this.updateMetadata(this.operator); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/UsingClause.ts b/src/slang-nodes/UsingClause.ts index a47a879a0..17ffc5c75 100644 --- a/src/slang-nodes/UsingClause.ts +++ b/src/slang-nodes/UsingClause.ts @@ -28,7 +28,7 @@ export class UsingClause extends SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - this.updateMetadata([this.variant]); + this.updateMetadata(this.variant); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/UsingDeconstruction.ts b/src/slang-nodes/UsingDeconstruction.ts index 854495015..940290fc1 100644 --- a/src/slang-nodes/UsingDeconstruction.ts +++ b/src/slang-nodes/UsingDeconstruction.ts @@ -16,7 +16,7 @@ export class UsingDeconstruction extends SlangNode { this.symbols = new UsingDeconstructionSymbols(ast.symbols); - this.updateMetadata([this.symbols]); + this.updateMetadata(this.symbols); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/UsingDeconstructionSymbol.ts b/src/slang-nodes/UsingDeconstructionSymbol.ts index 01d4da28c..6158ee528 100644 --- a/src/slang-nodes/UsingDeconstructionSymbol.ts +++ b/src/slang-nodes/UsingDeconstructionSymbol.ts @@ -22,7 +22,7 @@ export class UsingDeconstructionSymbol extends SlangNode { this.alias = new UsingAlias(ast.alias); } - this.updateMetadata([this.name, this.alias]); + this.updateMetadata(this.name, this.alias); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/UsingDeconstructionSymbols.ts b/src/slang-nodes/UsingDeconstructionSymbols.ts index 48e2a70f5..b73d9d3f5 100644 --- a/src/slang-nodes/UsingDeconstructionSymbols.ts +++ b/src/slang-nodes/UsingDeconstructionSymbols.ts @@ -21,7 +21,7 @@ export class UsingDeconstructionSymbols extends SlangNode { this.items = ast.items.map((item) => new UsingDeconstructionSymbol(item)); - this.updateMetadata([this.items]); + this.updateMetadata(this.items); } print( diff --git a/src/slang-nodes/UsingDirective.ts b/src/slang-nodes/UsingDirective.ts index 7108ccd6f..2d8a5c737 100644 --- a/src/slang-nodes/UsingDirective.ts +++ b/src/slang-nodes/UsingDirective.ts @@ -25,7 +25,7 @@ export class UsingDirective extends SlangNode { this.target = new UsingTarget(ast.target, options); this.globalKeyword = ast.globalKeyword?.unparse(); - this.updateMetadata([this.clause, this.target]); + this.updateMetadata(this.clause, this.target); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/UsingTarget.ts b/src/slang-nodes/UsingTarget.ts index 4e221aef7..77acd9c0a 100644 --- a/src/slang-nodes/UsingTarget.ts +++ b/src/slang-nodes/UsingTarget.ts @@ -20,7 +20,7 @@ export class UsingTarget extends SlangNode { ? ast.variant.unparse() : new TypeName(ast.variant, options); - this.updateMetadata(typeof this.variant === 'string' ? [] : [this.variant]); + if (typeof this.variant !== 'string') this.updateMetadata(this.variant); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/VariableDeclarationStatement.ts b/src/slang-nodes/VariableDeclarationStatement.ts index 487c7df38..4312cc45f 100644 --- a/src/slang-nodes/VariableDeclarationStatement.ts +++ b/src/slang-nodes/VariableDeclarationStatement.ts @@ -39,7 +39,7 @@ export class VariableDeclarationStatement extends SlangNode { this.value = new VariableDeclarationValue(ast.value, options); } - this.updateMetadata([this.variableType, this.storageLocation, this.value]); + this.updateMetadata(this.variableType, this.storageLocation, this.value); } print( diff --git a/src/slang-nodes/VariableDeclarationType.ts b/src/slang-nodes/VariableDeclarationType.ts index 9f3aa6ec4..7e1f04bb0 100644 --- a/src/slang-nodes/VariableDeclarationType.ts +++ b/src/slang-nodes/VariableDeclarationType.ts @@ -23,7 +23,7 @@ export class VariableDeclarationType extends SlangNode { ? ast.variant.unparse() : new TypeName(ast.variant, options); - this.updateMetadata(typeof this.variant === 'string' ? [] : [this.variant]); + if (typeof this.variant !== 'string') this.updateMetadata(this.variant); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/VariableDeclarationValue.ts b/src/slang-nodes/VariableDeclarationValue.ts index 4c560ecfe..860a529dd 100644 --- a/src/slang-nodes/VariableDeclarationValue.ts +++ b/src/slang-nodes/VariableDeclarationValue.ts @@ -20,7 +20,7 @@ export class VariableDeclarationValue extends SlangNode { this.expression = new Expression(ast.expression, options); - this.updateMetadata([this.expression]); + this.updateMetadata(this.expression); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/VersionExpression.ts b/src/slang-nodes/VersionExpression.ts index 132b91f99..3c87be7ae 100644 --- a/src/slang-nodes/VersionExpression.ts +++ b/src/slang-nodes/VersionExpression.ts @@ -26,7 +26,7 @@ export class VersionExpression extends SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - this.updateMetadata([this.variant]); + this.updateMetadata(this.variant); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/VersionExpressionSet.ts b/src/slang-nodes/VersionExpressionSet.ts index 4b9b26526..b8a6dc275 100644 --- a/src/slang-nodes/VersionExpressionSet.ts +++ b/src/slang-nodes/VersionExpressionSet.ts @@ -19,7 +19,7 @@ export class VersionExpressionSet extends SlangNode { this.items = ast.items.map((item) => new VersionExpression(item)); - this.updateMetadata([this.items]); + this.updateMetadata(this.items); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/VersionExpressionSets.ts b/src/slang-nodes/VersionExpressionSets.ts index 8cea1e3e1..1b880571b 100644 --- a/src/slang-nodes/VersionExpressionSets.ts +++ b/src/slang-nodes/VersionExpressionSets.ts @@ -19,7 +19,7 @@ export class VersionExpressionSets extends SlangNode { this.items = ast.items.map((item) => new VersionExpressionSet(item)); - this.updateMetadata([this.items]); + this.updateMetadata(this.items); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/VersionLiteral.ts b/src/slang-nodes/VersionLiteral.ts index fc7408c6f..2a47b818c 100644 --- a/src/slang-nodes/VersionLiteral.ts +++ b/src/slang-nodes/VersionLiteral.ts @@ -19,7 +19,7 @@ export class VersionLiteral extends SlangNode { ? ast.variant.unparse() : new SimpleVersionLiteral(ast.variant); - this.updateMetadata(typeof this.variant === 'string' ? [] : [this.variant]); + if (typeof this.variant !== 'string') this.updateMetadata(this.variant); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/VersionPragma.ts b/src/slang-nodes/VersionPragma.ts index da9779752..3f7fecf86 100644 --- a/src/slang-nodes/VersionPragma.ts +++ b/src/slang-nodes/VersionPragma.ts @@ -16,7 +16,7 @@ export class VersionPragma extends SlangNode { this.sets = new VersionExpressionSets(ast.sets); - this.updateMetadata([this.sets]); + this.updateMetadata(this.sets); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/VersionRange.ts b/src/slang-nodes/VersionRange.ts index 2e6ee9748..968a69007 100644 --- a/src/slang-nodes/VersionRange.ts +++ b/src/slang-nodes/VersionRange.ts @@ -19,7 +19,7 @@ export class VersionRange extends SlangNode { this.start = new VersionLiteral(ast.start); this.end = new VersionLiteral(ast.end); - this.updateMetadata([this.start, this.end]); + this.updateMetadata(this.start, this.end); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/VersionTerm.ts b/src/slang-nodes/VersionTerm.ts index 5b9bfbcc1..bdba3ee88 100644 --- a/src/slang-nodes/VersionTerm.ts +++ b/src/slang-nodes/VersionTerm.ts @@ -22,7 +22,7 @@ export class VersionTerm extends SlangNode { } this.literal = new VersionLiteral(ast.literal); - this.updateMetadata([this.operator, this.literal]); + this.updateMetadata(this.operator, this.literal); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/WhileStatement.ts b/src/slang-nodes/WhileStatement.ts index daf6ff13e..f303b5ce1 100644 --- a/src/slang-nodes/WhileStatement.ts +++ b/src/slang-nodes/WhileStatement.ts @@ -25,7 +25,7 @@ export class WhileStatement extends SlangNode { this.condition = new Expression(ast.condition, options); this.body = new Statement(ast.body, options); - this.updateMetadata([this.condition, this.body]); + this.updateMetadata(this.condition, this.body); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulArguments.ts b/src/slang-nodes/YulArguments.ts index c01877271..69a6539d5 100644 --- a/src/slang-nodes/YulArguments.ts +++ b/src/slang-nodes/YulArguments.ts @@ -18,7 +18,7 @@ export class YulArguments extends SlangNode { this.items = ast.items.map((item) => new YulExpression(item, options)); - this.updateMetadata([this.items]); + this.updateMetadata(this.items); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulAssignmentOperator.ts b/src/slang-nodes/YulAssignmentOperator.ts index 37cca137a..ac6be165a 100644 --- a/src/slang-nodes/YulAssignmentOperator.ts +++ b/src/slang-nodes/YulAssignmentOperator.ts @@ -19,7 +19,7 @@ export class YulAssignmentOperator extends SlangNode { ? ast.variant.unparse() : new YulColonAndEqual(ast.variant); - this.updateMetadata(typeof this.variant === 'string' ? [] : [this.variant]); + if (typeof this.variant !== 'string') this.updateMetadata(this.variant); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulBlock.ts b/src/slang-nodes/YulBlock.ts index 26dabc517..c8dfdf147 100644 --- a/src/slang-nodes/YulBlock.ts +++ b/src/slang-nodes/YulBlock.ts @@ -17,7 +17,7 @@ export class YulBlock extends SlangNode { this.statements = new YulStatements(ast.statements, options); - this.updateMetadata([this.statements]); + this.updateMetadata(this.statements); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulDefaultCase.ts b/src/slang-nodes/YulDefaultCase.ts index c48364a61..0ba6a9389 100644 --- a/src/slang-nodes/YulDefaultCase.ts +++ b/src/slang-nodes/YulDefaultCase.ts @@ -17,7 +17,7 @@ export class YulDefaultCase extends SlangNode { this.body = new YulBlock(ast.body, options); - this.updateMetadata([this.body]); + this.updateMetadata(this.body); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulExpression.ts b/src/slang-nodes/YulExpression.ts index 0756ed016..55dceb456 100644 --- a/src/slang-nodes/YulExpression.ts +++ b/src/slang-nodes/YulExpression.ts @@ -34,7 +34,7 @@ export class YulExpression extends SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - this.updateMetadata([this.variant]); + this.updateMetadata(this.variant); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulForStatement.ts b/src/slang-nodes/YulForStatement.ts index 4663a0e08..1bd85479a 100644 --- a/src/slang-nodes/YulForStatement.ts +++ b/src/slang-nodes/YulForStatement.ts @@ -30,12 +30,12 @@ export class YulForStatement extends SlangNode { this.iterator = new YulBlock(ast.iterator, options); this.body = new YulBlock(ast.body, options); - this.updateMetadata([ + this.updateMetadata( this.initialization, this.condition, this.iterator, this.body - ]); + ); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulFunctionCallExpression.ts b/src/slang-nodes/YulFunctionCallExpression.ts index 5a50afadb..43dc99a8d 100644 --- a/src/slang-nodes/YulFunctionCallExpression.ts +++ b/src/slang-nodes/YulFunctionCallExpression.ts @@ -24,7 +24,7 @@ export class YulFunctionCallExpression extends SlangNode { this.operand = new YulExpression(ast.operand, options); this.arguments = new YulArguments(ast.arguments, options); - this.updateMetadata([this.operand, this.arguments]); + this.updateMetadata(this.operand, this.arguments); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulFunctionDefinition.ts b/src/slang-nodes/YulFunctionDefinition.ts index 78cda4f86..dbc381e94 100644 --- a/src/slang-nodes/YulFunctionDefinition.ts +++ b/src/slang-nodes/YulFunctionDefinition.ts @@ -31,7 +31,7 @@ export class YulFunctionDefinition extends SlangNode { } this.body = new YulBlock(ast.body, options); - this.updateMetadata([this.parameters, this.returns, this.body]); + this.updateMetadata(this.parameters, this.returns, this.body); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulIfStatement.ts b/src/slang-nodes/YulIfStatement.ts index 6d92c4407..3b73da5b9 100644 --- a/src/slang-nodes/YulIfStatement.ts +++ b/src/slang-nodes/YulIfStatement.ts @@ -21,7 +21,7 @@ export class YulIfStatement extends SlangNode { this.condition = new YulExpression(ast.condition, options); this.body = new YulBlock(ast.body, options); - this.updateMetadata([this.condition, this.body]); + this.updateMetadata(this.condition, this.body); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulLiteral.ts b/src/slang-nodes/YulLiteral.ts index 8ad27acfb..eeb03505d 100644 --- a/src/slang-nodes/YulLiteral.ts +++ b/src/slang-nodes/YulLiteral.ts @@ -37,7 +37,7 @@ export class YulLiteral extends SlangNode { } } - this.updateMetadata(typeof this.variant === 'string' ? [] : [this.variant]); + if (typeof this.variant !== 'string') this.updateMetadata(this.variant); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulParametersDeclaration.ts b/src/slang-nodes/YulParametersDeclaration.ts index 99a5949ee..1f283930f 100644 --- a/src/slang-nodes/YulParametersDeclaration.ts +++ b/src/slang-nodes/YulParametersDeclaration.ts @@ -16,7 +16,7 @@ export class YulParametersDeclaration extends SlangNode { this.parameters = new YulParameters(ast.parameters); - this.updateMetadata([this.parameters]); + this.updateMetadata(this.parameters); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulPaths.ts b/src/slang-nodes/YulPaths.ts index f7c0c0e38..22161d5a7 100644 --- a/src/slang-nodes/YulPaths.ts +++ b/src/slang-nodes/YulPaths.ts @@ -19,7 +19,7 @@ export class YulPaths extends SlangNode { this.items = ast.items.map((item) => new YulPath(item)); - this.updateMetadata([this.items]); + this.updateMetadata(this.items); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulReturnsDeclaration.ts b/src/slang-nodes/YulReturnsDeclaration.ts index 9e54a3dff..69351ef2e 100644 --- a/src/slang-nodes/YulReturnsDeclaration.ts +++ b/src/slang-nodes/YulReturnsDeclaration.ts @@ -20,7 +20,7 @@ export class YulReturnsDeclaration extends SlangNode { this.variables = new YulVariableNames(ast.variables); - this.updateMetadata([this.variables]); + this.updateMetadata(this.variables); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulStackAssignmentOperator.ts b/src/slang-nodes/YulStackAssignmentOperator.ts index 7d91a2671..b14b28065 100644 --- a/src/slang-nodes/YulStackAssignmentOperator.ts +++ b/src/slang-nodes/YulStackAssignmentOperator.ts @@ -19,7 +19,7 @@ export class YulStackAssignmentOperator extends SlangNode { ? ast.variant.unparse() : new YulEqualAndColon(ast.variant); - this.updateMetadata(typeof this.variant === 'string' ? [] : [this.variant]); + if (typeof this.variant !== 'string') this.updateMetadata(this.variant); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulStackAssignmentStatement.ts b/src/slang-nodes/YulStackAssignmentStatement.ts index b365ded24..4715854a5 100644 --- a/src/slang-nodes/YulStackAssignmentStatement.ts +++ b/src/slang-nodes/YulStackAssignmentStatement.ts @@ -24,7 +24,7 @@ export class YulStackAssignmentStatement extends SlangNode { this.assignment = new YulStackAssignmentOperator(ast.assignment); this.variable = new YulIdentifier(ast.variable); - this.updateMetadata([this.assignment]); + this.updateMetadata(this.assignment); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulStatement.ts b/src/slang-nodes/YulStatement.ts index 12198c270..100a406b1 100644 --- a/src/slang-nodes/YulStatement.ts +++ b/src/slang-nodes/YulStatement.ts @@ -113,7 +113,7 @@ export class YulStatement extends SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - this.updateMetadata([this.variant]); + this.updateMetadata(this.variant); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulStatements.ts b/src/slang-nodes/YulStatements.ts index 11c392e10..516a0485e 100644 --- a/src/slang-nodes/YulStatements.ts +++ b/src/slang-nodes/YulStatements.ts @@ -23,7 +23,7 @@ export class YulStatements extends SlangNode { this.items = ast.items.map((item) => new YulStatement(item, options)); - this.updateMetadata([this.items]); + this.updateMetadata(this.items); } print( diff --git a/src/slang-nodes/YulSwitchCase.ts b/src/slang-nodes/YulSwitchCase.ts index cedd2a3f5..f881c7093 100644 --- a/src/slang-nodes/YulSwitchCase.ts +++ b/src/slang-nodes/YulSwitchCase.ts @@ -33,7 +33,7 @@ export class YulSwitchCase extends SlangNode { throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } - this.updateMetadata([this.variant]); + this.updateMetadata(this.variant); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulSwitchCases.ts b/src/slang-nodes/YulSwitchCases.ts index 7ec5400d9..b5510c929 100644 --- a/src/slang-nodes/YulSwitchCases.ts +++ b/src/slang-nodes/YulSwitchCases.ts @@ -20,7 +20,7 @@ export class YulSwitchCases extends SlangNode { this.items = ast.items.map((item) => new YulSwitchCase(item, options)); - this.updateMetadata([this.items]); + this.updateMetadata(this.items); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulSwitchStatement.ts b/src/slang-nodes/YulSwitchStatement.ts index 9f436ec57..0cb4686e3 100644 --- a/src/slang-nodes/YulSwitchStatement.ts +++ b/src/slang-nodes/YulSwitchStatement.ts @@ -24,7 +24,7 @@ export class YulSwitchStatement extends SlangNode { this.expression = new YulExpression(ast.expression, options); this.cases = new YulSwitchCases(ast.cases, options); - this.updateMetadata([this.expression, this.cases]); + this.updateMetadata(this.expression, this.cases); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulValueCase.ts b/src/slang-nodes/YulValueCase.ts index 27145e914..536832178 100644 --- a/src/slang-nodes/YulValueCase.ts +++ b/src/slang-nodes/YulValueCase.ts @@ -21,7 +21,7 @@ export class YulValueCase extends SlangNode { this.value = new YulLiteral(ast.value, options); this.body = new YulBlock(ast.body, options); - this.updateMetadata([this.value, this.body]); + this.updateMetadata(this.value, this.body); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slang-nodes/YulVariableAssignmentStatement.ts b/src/slang-nodes/YulVariableAssignmentStatement.ts index 96d1cf5a6..1ca5c0771 100644 --- a/src/slang-nodes/YulVariableAssignmentStatement.ts +++ b/src/slang-nodes/YulVariableAssignmentStatement.ts @@ -31,7 +31,7 @@ export class YulVariableAssignmentStatement extends SlangNode { this.assignment = new YulAssignmentOperator(ast.assignment); this.expression = new YulExpression(ast.expression, options); - this.updateMetadata([this.variables, this.assignment, this.expression]); + this.updateMetadata(this.variables, this.assignment, this.expression); } print( diff --git a/src/slang-nodes/YulVariableDeclarationStatement.ts b/src/slang-nodes/YulVariableDeclarationStatement.ts index 0896c47c2..78f830cb2 100644 --- a/src/slang-nodes/YulVariableDeclarationStatement.ts +++ b/src/slang-nodes/YulVariableDeclarationStatement.ts @@ -27,7 +27,7 @@ export class YulVariableDeclarationStatement extends SlangNode { this.value = new YulVariableDeclarationValue(ast.value, options); } - this.updateMetadata([this.value]); + this.updateMetadata(this.value); } print( diff --git a/src/slang-nodes/YulVariableDeclarationValue.ts b/src/slang-nodes/YulVariableDeclarationValue.ts index 3659a0219..008005481 100644 --- a/src/slang-nodes/YulVariableDeclarationValue.ts +++ b/src/slang-nodes/YulVariableDeclarationValue.ts @@ -24,7 +24,7 @@ export class YulVariableDeclarationValue extends SlangNode { this.assignment = new YulAssignmentOperator(ast.assignment); this.expression = new YulExpression(ast.expression, options); - this.updateMetadata([this.assignment, this.expression]); + this.updateMetadata(this.assignment, this.expression); } print(path: AstPath, print: PrintFunction): Doc { diff --git a/src/slangPrinter.ts b/src/slangPrinter.ts index f068d8d77..11de3e62a 100644 --- a/src/slangPrinter.ts +++ b/src/slangPrinter.ts @@ -24,14 +24,14 @@ function ignoreComments(path: AstPath): void { let key: keyof StrictAstNode; for (key in node) { switch (key) { - // We ignore `kind`, `loc`, and comments since these are added by the - // parser + // We ignore `kind`, `loc`, and `comments` since these are added by the + // parser. `updateMetadata` is an internal function. case 'kind': case 'loc': case 'print': case 'updateMetadata': break; - // The key `comments` will contain every comment for this node + // The key `comments` will contain every comment for this node. case 'comments': path.each((commentPath) => (commentPath.node.printed = true), key); break; From 1a59312621bb259f6bc7074519e5bdf241321f1d Mon Sep 17 00:00:00 2001 From: Klaus Date: Thu, 10 Jul 2025 22:39:58 +0100 Subject: [PATCH 6/8] reordering the imports --- src/slang-nodes/AddressType.ts | 2 +- src/slang-nodes/AssemblyStatement.ts | 2 +- src/slang-nodes/CommentNode.ts | 3 +-- src/slang-nodes/DecimalNumberExpression.ts | 2 +- src/slang-nodes/ErrorParameter.ts | 2 +- src/slang-nodes/EventParameter.ts | 2 +- src/slang-nodes/HexNumberExpression.ts | 2 +- src/slang-nodes/IfStatement.ts | 2 +- src/slang-nodes/MappingKey.ts | 2 +- src/slang-nodes/MappingValue.ts | 2 +- src/slang-nodes/OverridePaths.ts | 2 +- src/slang-nodes/Parameter.ts | 2 +- src/slang-nodes/PositionalArgumentsDeclaration.ts | 2 +- src/slang-nodes/RevertStatement.ts | 2 +- src/slang-nodes/StateVariableAttributes.ts | 2 +- src/slang-nodes/TryStatement.ts | 2 +- src/slang-nodes/TypedTupleMember.ts | 2 +- src/slang-nodes/UntypedTupleMember.ts | 2 +- src/slang-nodes/UsingDirective.ts | 2 +- src/slang-nodes/YulStackAssignmentStatement.ts | 2 +- src/slang-nodes/YulVariableDeclarationStatement.ts | 2 +- 21 files changed, 21 insertions(+), 22 deletions(-) diff --git a/src/slang-nodes/AddressType.ts b/src/slang-nodes/AddressType.ts index 0fe6472f4..735bb13cb 100644 --- a/src/slang-nodes/AddressType.ts +++ b/src/slang-nodes/AddressType.ts @@ -1,6 +1,6 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { SlangNode } from './SlangNode.js'; import { joinExisting } from '../slang-utils/join-existing.js'; +import { SlangNode } from './SlangNode.js'; import type * as ast from '@nomicfoundation/slang/ast'; import type { Doc } from 'prettier'; diff --git a/src/slang-nodes/AssemblyStatement.ts b/src/slang-nodes/AssemblyStatement.ts index 3ea9227d4..9a3535fdb 100644 --- a/src/slang-nodes/AssemblyStatement.ts +++ b/src/slang-nodes/AssemblyStatement.ts @@ -1,6 +1,6 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { SlangNode } from './SlangNode.js'; import { joinExisting } from '../slang-utils/join-existing.js'; +import { SlangNode } from './SlangNode.js'; import { StringLiteral } from './StringLiteral.js'; import { AssemblyFlagsDeclaration } from './AssemblyFlagsDeclaration.js'; import { YulBlock } from './YulBlock.js'; diff --git a/src/slang-nodes/CommentNode.ts b/src/slang-nodes/CommentNode.ts index aa40720e3..bb274020c 100644 --- a/src/slang-nodes/CommentNode.ts +++ b/src/slang-nodes/CommentNode.ts @@ -1,5 +1,4 @@ -import { TerminalNode } from '@nomicfoundation/slang/cst'; - +import type { TerminalNode } from '@nomicfoundation/slang/cst'; import type { Location } from '../types.d.ts'; import type { StrictAstNode } from './types.d.ts'; diff --git a/src/slang-nodes/DecimalNumberExpression.ts b/src/slang-nodes/DecimalNumberExpression.ts index 8171c3dbd..211fb2bee 100644 --- a/src/slang-nodes/DecimalNumberExpression.ts +++ b/src/slang-nodes/DecimalNumberExpression.ts @@ -1,6 +1,6 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { SlangNode } from './SlangNode.js'; import { joinExisting } from '../slang-utils/join-existing.js'; +import { SlangNode } from './SlangNode.js'; import { NumberUnit } from './NumberUnit.js'; import type * as ast from '@nomicfoundation/slang/ast'; diff --git a/src/slang-nodes/ErrorParameter.ts b/src/slang-nodes/ErrorParameter.ts index 1a3d42b45..4f65a94f4 100644 --- a/src/slang-nodes/ErrorParameter.ts +++ b/src/slang-nodes/ErrorParameter.ts @@ -1,6 +1,6 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { SlangNode } from './SlangNode.js'; import { joinExisting } from '../slang-utils/join-existing.js'; +import { SlangNode } from './SlangNode.js'; import { TypeName } from './TypeName.js'; import { Identifier } from './Identifier.js'; diff --git a/src/slang-nodes/EventParameter.ts b/src/slang-nodes/EventParameter.ts index 6af555234..43b917691 100644 --- a/src/slang-nodes/EventParameter.ts +++ b/src/slang-nodes/EventParameter.ts @@ -1,6 +1,6 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { SlangNode } from './SlangNode.js'; import { joinExisting } from '../slang-utils/join-existing.js'; +import { SlangNode } from './SlangNode.js'; import { TypeName } from './TypeName.js'; import { Identifier } from './Identifier.js'; diff --git a/src/slang-nodes/HexNumberExpression.ts b/src/slang-nodes/HexNumberExpression.ts index 24fd646b6..1308f9c5f 100644 --- a/src/slang-nodes/HexNumberExpression.ts +++ b/src/slang-nodes/HexNumberExpression.ts @@ -1,6 +1,6 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { SlangNode } from './SlangNode.js'; import { joinExisting } from '../slang-utils/join-existing.js'; +import { SlangNode } from './SlangNode.js'; import { NumberUnit } from './NumberUnit.js'; import type * as ast from '@nomicfoundation/slang/ast'; diff --git a/src/slang-nodes/IfStatement.ts b/src/slang-nodes/IfStatement.ts index b6eb164a3..ddbf54446 100644 --- a/src/slang-nodes/IfStatement.ts +++ b/src/slang-nodes/IfStatement.ts @@ -1,8 +1,8 @@ import { doc } from 'prettier'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { printSeparatedItem } from '../slang-printers/print-separated-item.js'; -import { SlangNode } from './SlangNode.js'; import { isBlockComment } from '../slang-utils/is-comment.js'; +import { SlangNode } from './SlangNode.js'; import { Expression } from './Expression.js'; import { Statement } from './Statement.js'; import { ElseBranch } from './ElseBranch.js'; diff --git a/src/slang-nodes/MappingKey.ts b/src/slang-nodes/MappingKey.ts index 3963d6e7a..6b35477d2 100644 --- a/src/slang-nodes/MappingKey.ts +++ b/src/slang-nodes/MappingKey.ts @@ -1,6 +1,6 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { SlangNode } from './SlangNode.js'; import { joinExisting } from '../slang-utils/join-existing.js'; +import { SlangNode } from './SlangNode.js'; import { MappingKeyType } from './MappingKeyType.js'; import { Identifier } from './Identifier.js'; diff --git a/src/slang-nodes/MappingValue.ts b/src/slang-nodes/MappingValue.ts index a5cf3b11c..5b266d5d5 100644 --- a/src/slang-nodes/MappingValue.ts +++ b/src/slang-nodes/MappingValue.ts @@ -1,6 +1,6 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { SlangNode } from './SlangNode.js'; import { joinExisting } from '../slang-utils/join-existing.js'; +import { SlangNode } from './SlangNode.js'; import { TypeName } from './TypeName.js'; import { Identifier } from './Identifier.js'; diff --git a/src/slang-nodes/OverridePaths.ts b/src/slang-nodes/OverridePaths.ts index 48caf88a6..3feb11dd1 100644 --- a/src/slang-nodes/OverridePaths.ts +++ b/src/slang-nodes/OverridePaths.ts @@ -1,6 +1,6 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { SlangNode } from './SlangNode.js'; import { printSeparatedList } from '../slang-printers/print-separated-list.js'; +import { SlangNode } from './SlangNode.js'; import { IdentifierPath } from './IdentifierPath.js'; import type * as ast from '@nomicfoundation/slang/ast'; diff --git a/src/slang-nodes/Parameter.ts b/src/slang-nodes/Parameter.ts index 51d4548fe..45b693048 100644 --- a/src/slang-nodes/Parameter.ts +++ b/src/slang-nodes/Parameter.ts @@ -1,7 +1,7 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { doc } from 'prettier'; -import { SlangNode } from './SlangNode.js'; import { joinExisting } from '../slang-utils/join-existing.js'; +import { SlangNode } from './SlangNode.js'; import { TypeName } from './TypeName.js'; import { StorageLocation } from './StorageLocation.js'; import { Identifier } from './Identifier.js'; diff --git a/src/slang-nodes/PositionalArgumentsDeclaration.ts b/src/slang-nodes/PositionalArgumentsDeclaration.ts index 89a605ede..01f7871b3 100644 --- a/src/slang-nodes/PositionalArgumentsDeclaration.ts +++ b/src/slang-nodes/PositionalArgumentsDeclaration.ts @@ -1,6 +1,6 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { SlangNode } from './SlangNode.js'; import { isBlockComment } from '../slang-utils/is-comment.js'; +import { SlangNode } from './SlangNode.js'; import { PositionalArguments } from './PositionalArguments.js'; import type * as ast from '@nomicfoundation/slang/ast'; diff --git a/src/slang-nodes/RevertStatement.ts b/src/slang-nodes/RevertStatement.ts index d845a518e..3beadb315 100644 --- a/src/slang-nodes/RevertStatement.ts +++ b/src/slang-nodes/RevertStatement.ts @@ -1,6 +1,6 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { SlangNode } from './SlangNode.js'; import { joinExisting } from '../slang-utils/join-existing.js'; +import { SlangNode } from './SlangNode.js'; import { IdentifierPath } from './IdentifierPath.js'; import { ArgumentsDeclaration } from './ArgumentsDeclaration.js'; diff --git a/src/slang-nodes/StateVariableAttributes.ts b/src/slang-nodes/StateVariableAttributes.ts index a79f5a380..f59439def 100644 --- a/src/slang-nodes/StateVariableAttributes.ts +++ b/src/slang-nodes/StateVariableAttributes.ts @@ -1,7 +1,7 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { doc } from 'prettier'; -import { SlangNode } from './SlangNode.js'; import { sortFunctionAttributes } from '../slang-utils/sort-function-attributes.js'; +import { SlangNode } from './SlangNode.js'; import { StateVariableAttribute } from './StateVariableAttribute.js'; import type * as ast from '@nomicfoundation/slang/ast'; diff --git a/src/slang-nodes/TryStatement.ts b/src/slang-nodes/TryStatement.ts index cd7671587..cbc00714f 100644 --- a/src/slang-nodes/TryStatement.ts +++ b/src/slang-nodes/TryStatement.ts @@ -1,8 +1,8 @@ import { doc } from 'prettier'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { printSeparatedItem } from '../slang-printers/print-separated-item.js'; -import { SlangNode } from './SlangNode.js'; import { joinExisting } from '../slang-utils/join-existing.js'; +import { SlangNode } from './SlangNode.js'; import { Expression } from './Expression.js'; import { ReturnsDeclaration } from './ReturnsDeclaration.js'; import { Block } from './Block.js'; diff --git a/src/slang-nodes/TypedTupleMember.ts b/src/slang-nodes/TypedTupleMember.ts index e4fb97085..691f05445 100644 --- a/src/slang-nodes/TypedTupleMember.ts +++ b/src/slang-nodes/TypedTupleMember.ts @@ -1,6 +1,6 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { SlangNode } from './SlangNode.js'; import { joinExisting } from '../slang-utils/join-existing.js'; +import { SlangNode } from './SlangNode.js'; import { TypeName } from './TypeName.js'; import { StorageLocation } from './StorageLocation.js'; import { Identifier } from './Identifier.js'; diff --git a/src/slang-nodes/UntypedTupleMember.ts b/src/slang-nodes/UntypedTupleMember.ts index fbd12dec1..bdd157831 100644 --- a/src/slang-nodes/UntypedTupleMember.ts +++ b/src/slang-nodes/UntypedTupleMember.ts @@ -1,6 +1,6 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { SlangNode } from './SlangNode.js'; import { joinExisting } from '../slang-utils/join-existing.js'; +import { SlangNode } from './SlangNode.js'; import { StorageLocation } from './StorageLocation.js'; import { Identifier } from './Identifier.js'; diff --git a/src/slang-nodes/UsingDirective.ts b/src/slang-nodes/UsingDirective.ts index 2d8a5c737..6201516d0 100644 --- a/src/slang-nodes/UsingDirective.ts +++ b/src/slang-nodes/UsingDirective.ts @@ -1,6 +1,6 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { SlangNode } from './SlangNode.js'; import { joinExisting } from '../slang-utils/join-existing.js'; +import { SlangNode } from './SlangNode.js'; import { UsingClause } from './UsingClause.js'; import { UsingTarget } from './UsingTarget.js'; diff --git a/src/slang-nodes/YulStackAssignmentStatement.ts b/src/slang-nodes/YulStackAssignmentStatement.ts index 4715854a5..1b0cd4cc1 100644 --- a/src/slang-nodes/YulStackAssignmentStatement.ts +++ b/src/slang-nodes/YulStackAssignmentStatement.ts @@ -1,7 +1,7 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { doc } from 'prettier'; -import { SlangNode } from './SlangNode.js'; import { printSeparatedItem } from '../slang-printers/print-separated-item.js'; +import { SlangNode } from './SlangNode.js'; import { YulStackAssignmentOperator } from './YulStackAssignmentOperator.js'; import { YulIdentifier } from './YulIdentifier.js'; diff --git a/src/slang-nodes/YulVariableDeclarationStatement.ts b/src/slang-nodes/YulVariableDeclarationStatement.ts index 78f830cb2..ab449abb2 100644 --- a/src/slang-nodes/YulVariableDeclarationStatement.ts +++ b/src/slang-nodes/YulVariableDeclarationStatement.ts @@ -1,6 +1,6 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { SlangNode } from './SlangNode.js'; import { joinExisting } from '../slang-utils/join-existing.js'; +import { SlangNode } from './SlangNode.js'; import { YulVariableDeclarationValue } from './YulVariableDeclarationValue.js'; import { YulVariableNames } from './YulVariableNames.js'; From 9b5eaa1d59131c27ccd22adafe4594b2fe82ca66 Mon Sep 17 00:00:00 2001 From: Klaus Date: Fri, 11 Jul 2025 07:03:56 +0100 Subject: [PATCH 7/8] avoiding an extra iteration over all children --- src/slang-nodes/SlangNode.ts | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/slang-nodes/SlangNode.ts b/src/slang-nodes/SlangNode.ts index 172d99d5f..c98a81b96 100644 --- a/src/slang-nodes/SlangNode.ts +++ b/src/slang-nodes/SlangNode.ts @@ -5,7 +5,7 @@ import { MultiLineNatSpecComment } from '../slang-nodes/MultiLineNatSpecComment. import { SingleLineComment } from '../slang-nodes/SingleLineComment.js'; import { SingleLineNatSpecComment } from '../slang-nodes/SingleLineNatSpecComment.js'; -import type { Node } from '@nomicfoundation/slang/cst'; +import type { Edge } from '@nomicfoundation/slang/cst'; import type { Comment, StrictAstNode } from '../slang-nodes/types.d.ts'; import type { AstLocation, SlangAstNode } from '../types.d.ts'; @@ -23,15 +23,15 @@ export function clearOffsets(): void { offsets.clear(); } -function getLeadingOffset(children: Node[]): number { +function getLeadingOffset(children: Edge[]): number { let offset = 0; - for (const child of children) { - if (child.isNonterminalNode() || !isCommentOrWhiteSpace(child)) { + for (const { node } of children) { + if (node.isNonterminalNode() || !isCommentOrWhiteSpace(node)) { // The node's content starts when we find the first non-terminal token, // or if we find a non-comment, non-whitespace token. return offset; } - offset += child.textLength.utf16; + offset += node.textLength.utf16; } return offset; } @@ -71,14 +71,14 @@ export class SlangNode { return; } const parent = ast.cst; - const children = parent.children().map((child) => child.node); + const children = parent.children(); const initialOffset = offsets.get(parent.id) || 0; let offset = initialOffset; - for (const child of children) { - const { id, kind, textLength } = child; - if (child.isNonterminalNode()) { + for (const { node } of children) { + const { id, kind, textLength } = node; + if (node.isNonterminalNode()) { offsets.set(id, offset); } else { switch (kind) { @@ -87,16 +87,16 @@ export class SlangNode { // offset, it's hard to separate these responsibilities into different // functions without doing the iteration twice. case TerminalKind.MultiLineComment: - this.comments.push(new MultiLineComment(child, offset)); + this.comments.push(new MultiLineComment(node, offset)); break; case TerminalKind.MultiLineNatSpecComment: - this.comments.push(new MultiLineNatSpecComment(child, offset)); + this.comments.push(new MultiLineNatSpecComment(node, offset)); break; case TerminalKind.SingleLineComment: - this.comments.push(new SingleLineComment(child, offset)); + this.comments.push(new SingleLineComment(node, offset)); break; case TerminalKind.SingleLineNatSpecComment: - this.comments.push(new SingleLineNatSpecComment(child, offset)); + this.comments.push(new SingleLineNatSpecComment(node, offset)); break; case TerminalKind.Identifier: case TerminalKind.YulIdentifier: From cae69e73f8432a4822642ec36ec848a872b34d54 Mon Sep 17 00:00:00 2001 From: Klaus Date: Sat, 12 Jul 2025 08:00:08 +0100 Subject: [PATCH 8/8] using a reverse iterator instead of reversing the array --- src/slang-nodes/SlangNode.ts | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/slang-nodes/SlangNode.ts b/src/slang-nodes/SlangNode.ts index c98a81b96..4a9d936cf 100644 --- a/src/slang-nodes/SlangNode.ts +++ b/src/slang-nodes/SlangNode.ts @@ -23,7 +23,21 @@ export function clearOffsets(): void { offsets.clear(); } -function getLeadingOffset(children: Edge[]): number { +function reversedIterator(children: T[]): Iterable { + return { + [Symbol.iterator](): Iterator { + let index = children.length; + return { + next: function (): IteratorResult { + index--; + return { done: index < 0, value: children[index] }; + } + }; + } + }; +} + +function getOffset(children: Edge[] | Iterable): number { let offset = 0; for (const { node } of children) { if (node.isNonterminalNode() || !isCommentOrWhiteSpace(node)) { @@ -114,7 +128,7 @@ export class SlangNode { const [leadingOffset, trailingOffset] = enclosePeripheralComments ? [0, 0] - : [getLeadingOffset(children), getLeadingOffset(children.reverse())]; + : [getOffset(children), getOffset(reversedIterator(children))]; this.loc = { start: initialOffset + leadingOffset, @@ -147,7 +161,7 @@ export class SlangNode { } if (loc.trailingOffset === 0) { - for (const childNode of childNodes.reverse()) { + for (const childNode of reversedIterator(childNodes)) { if (typeof childNode === 'undefined' || Array.isArray(childNode)) continue; const { trailingOffset, end } = childNode.loc;