diff --git a/src/slang-comments/handlers/handle-source-unit-members-comments.ts b/src/slang-comments/handlers/handle-source-unit-members-comments.ts index 7b38df78a..d892ed9de 100644 --- a/src/slang-comments/handlers/handle-source-unit-members-comments.ts +++ b/src/slang-comments/handlers/handle-source-unit-members-comments.ts @@ -2,7 +2,7 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import addCollectionFirstComment from './add-collection-first-comment.js'; import addCollectionLastComment from './add-collection-last-comment.js'; -import type { HandlerParams } from './types.js'; +import type { HandlerParams } from './types.d.ts'; export default function handleSourceUnitMembersComments({ precedingNode, diff --git a/src/slang-nodes/ArgumentsDeclaration.ts b/src/slang-nodes/ArgumentsDeclaration.ts index ce6eb22ca..34b5f288a 100644 --- a/src/slang-nodes/ArgumentsDeclaration.ts +++ b/src/slang-nodes/ArgumentsDeclaration.ts @@ -1,12 +1,11 @@ import * as ast from '@nomicfoundation/slang/ast'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { SlangNode } from './SlangNode.js'; +import { PolymorphicNode } from './PolymorphicNode.js'; import { PositionalArgumentsDeclaration } from './PositionalArgumentsDeclaration.js'; import { NamedArgumentsDeclaration } from './NamedArgumentsDeclaration.js'; -import type { AstPath, Doc, ParserOptions } from 'prettier'; +import type { ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction } from '../types.d.ts'; function createNonterminalVariant( variant: ast.ArgumentsDeclaration['variant'], @@ -22,7 +21,7 @@ function createNonterminalVariant( return exhaustiveCheck; } -export class ArgumentsDeclaration extends SlangNode { +export class ArgumentsDeclaration extends PolymorphicNode { readonly kind = NonterminalKind.ArgumentsDeclaration; variant: PositionalArgumentsDeclaration | NamedArgumentsDeclaration; @@ -34,8 +33,4 @@ export class ArgumentsDeclaration extends SlangNode { this.updateMetadata(this.variant); } - - print(path: AstPath, print: PrintFunction): Doc { - return path.call(print, 'variant'); - } } diff --git a/src/slang-nodes/ConstructorAttribute.ts b/src/slang-nodes/ConstructorAttribute.ts index f73f08f4b..c65382dc6 100644 --- a/src/slang-nodes/ConstructorAttribute.ts +++ b/src/slang-nodes/ConstructorAttribute.ts @@ -2,16 +2,15 @@ import { NonterminalKind, TerminalNode as SlangTerminalNode } from '@nomicfoundation/slang/cst'; -import { SlangNode } from './SlangNode.js'; +import { PolymorphicNode } from './PolymorphicNode.js'; import { ModifierInvocation } from './ModifierInvocation.js'; import { TerminalNode } from './TerminalNode.js'; import type * as ast from '@nomicfoundation/slang/ast'; -import type { AstPath, Doc, ParserOptions } from 'prettier'; +import type { ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction } from '../types.d.ts'; -export class ConstructorAttribute extends SlangNode { +export class ConstructorAttribute extends PolymorphicNode { readonly kind = NonterminalKind.ConstructorAttribute; variant: ModifierInvocation | TerminalNode; @@ -28,8 +27,4 @@ export class ConstructorAttribute extends SlangNode { this.updateMetadata(this.variant); } - - print(path: AstPath, print: PrintFunction): Doc { - return path.call(print, 'variant'); - } } diff --git a/src/slang-nodes/ContractDefinition.ts b/src/slang-nodes/ContractDefinition.ts index 084b3a0a1..862a356bf 100644 --- a/src/slang-nodes/ContractDefinition.ts +++ b/src/slang-nodes/ContractDefinition.ts @@ -41,12 +41,12 @@ export class ContractDefinition extends SlangNode { // Older versions of Solidity defined a constructor as a function having // the same name as the contract. if (!satisfies(options.compiler, '>=0.5.0')) { - for (const { variant: member } of this.members.items) { + for (const { variant } of this.members.items) { if ( - member.kind === NonterminalKind.FunctionDefinition && - member.name.variant.value !== this.name.value + variant.kind === NonterminalKind.FunctionDefinition && + variant.name.variant.value !== this.name.value ) { - member.cleanModifierInvocationArguments(); + variant.cleanModifierInvocationArguments(); } } } diff --git a/src/slang-nodes/ContractMember.ts b/src/slang-nodes/ContractMember.ts index fa41a309c..1661cef24 100644 --- a/src/slang-nodes/ContractMember.ts +++ b/src/slang-nodes/ContractMember.ts @@ -1,6 +1,6 @@ import * as ast from '@nomicfoundation/slang/ast'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { SlangNode } from './SlangNode.js'; +import { PolymorphicNode } from './PolymorphicNode.js'; import { UsingDirective } from './UsingDirective.js'; import { FunctionDefinition } from './FunctionDefinition.js'; import { ConstructorDefinition } from './ConstructorDefinition.js'; @@ -15,9 +15,8 @@ import { StateVariableDefinition } from './StateVariableDefinition.js'; import { ErrorDefinition } from './ErrorDefinition.js'; import { UserDefinedValueTypeDefinition } from './UserDefinedValueTypeDefinition.js'; -import type { AstPath, Doc, ParserOptions } from 'prettier'; +import type { ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction } from '../types.d.ts'; function createNonterminalVariant( variant: ast.ContractMember['variant'], @@ -66,7 +65,7 @@ function createNonterminalVariant( return exhaustiveCheck; } -export class ContractMember extends SlangNode { +export class ContractMember extends PolymorphicNode { readonly kind = NonterminalKind.ContractMember; variant: @@ -91,8 +90,4 @@ export class ContractMember extends SlangNode { this.updateMetadata(this.variant); } - - print(path: AstPath, print: PrintFunction): Doc { - return path.call(print, 'variant'); - } } diff --git a/src/slang-nodes/ContractSpecifier.ts b/src/slang-nodes/ContractSpecifier.ts index a46015215..a3c6d28d4 100644 --- a/src/slang-nodes/ContractSpecifier.ts +++ b/src/slang-nodes/ContractSpecifier.ts @@ -1,12 +1,11 @@ import * as ast from '@nomicfoundation/slang/ast'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { SlangNode } from './SlangNode.js'; +import { PolymorphicNode } from './PolymorphicNode.js'; import { InheritanceSpecifier } from './InheritanceSpecifier.js'; import { StorageLayoutSpecifier } from './StorageLayoutSpecifier.js'; -import type { AstPath, Doc, ParserOptions } from 'prettier'; +import type { ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction } from '../types.d.ts'; function createNonterminalVariant( variant: ast.ContractSpecifier['variant'], @@ -22,7 +21,7 @@ function createNonterminalVariant( return exhaustiveCheck; } -export class ContractSpecifier extends SlangNode { +export class ContractSpecifier extends PolymorphicNode { readonly kind = NonterminalKind.ContractSpecifier; variant: InheritanceSpecifier | StorageLayoutSpecifier; @@ -34,8 +33,4 @@ export class ContractSpecifier extends SlangNode { this.updateMetadata(this.variant); } - - print(path: AstPath, print: PrintFunction): Doc { - return path.call(print, 'variant'); - } } diff --git a/src/slang-nodes/ElementaryType.ts b/src/slang-nodes/ElementaryType.ts index 4c5e6557d..d75ade091 100644 --- a/src/slang-nodes/ElementaryType.ts +++ b/src/slang-nodes/ElementaryType.ts @@ -2,15 +2,13 @@ import { NonterminalKind, TerminalNode as SlangTerminalNode } from '@nomicfoundation/slang/cst'; -import { SlangNode } from './SlangNode.js'; +import { PolymorphicNode } from './PolymorphicNode.js'; import { AddressType } from './AddressType.js'; import { TerminalNode } from './TerminalNode.js'; import type * as ast from '@nomicfoundation/slang/ast'; -import type { AstPath, Doc } from 'prettier'; -import type { PrintFunction } from '../types.d.ts'; -export class ElementaryType extends SlangNode { +export class ElementaryType extends PolymorphicNode { readonly kind = NonterminalKind.ElementaryType; variant: AddressType | TerminalNode; @@ -27,8 +25,4 @@ export class ElementaryType extends SlangNode { this.updateMetadata(this.variant); } - - print(path: AstPath, print: PrintFunction): Doc { - return path.call(print, 'variant'); - } } diff --git a/src/slang-nodes/ExperimentalFeature.ts b/src/slang-nodes/ExperimentalFeature.ts index 7364b0cc3..e37807de7 100644 --- a/src/slang-nodes/ExperimentalFeature.ts +++ b/src/slang-nodes/ExperimentalFeature.ts @@ -2,16 +2,15 @@ import { NonterminalKind, TerminalNode as SlangTerminalNode } from '@nomicfoundation/slang/cst'; -import { SlangNode } from './SlangNode.js'; +import { PolymorphicNode } from './PolymorphicNode.js'; import { StringLiteral } from './StringLiteral.js'; import { TerminalNode } from './TerminalNode.js'; import type * as ast from '@nomicfoundation/slang/ast'; -import type { AstPath, Doc, ParserOptions } from 'prettier'; +import type { ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction } from '../types.d.ts'; -export class ExperimentalFeature extends SlangNode { +export class ExperimentalFeature extends PolymorphicNode { readonly kind = NonterminalKind.ExperimentalFeature; variant: StringLiteral | TerminalNode; @@ -28,8 +27,4 @@ export class ExperimentalFeature extends SlangNode { this.updateMetadata(this.variant); } - - print(path: AstPath, print: PrintFunction): Doc { - return path.call(print, 'variant'); - } } diff --git a/src/slang-nodes/Expression.ts b/src/slang-nodes/Expression.ts index 9a36fd982..f59fe5e21 100644 --- a/src/slang-nodes/Expression.ts +++ b/src/slang-nodes/Expression.ts @@ -3,7 +3,7 @@ import { NonterminalKind, TerminalNode as SlangTerminalNode } from '@nomicfoundation/slang/cst'; -import { SlangNode } from './SlangNode.js'; +import { PolymorphicNode } from './PolymorphicNode.js'; import { AssignmentExpression } from './AssignmentExpression.js'; import { ConditionalExpression } from './ConditionalExpression.js'; import { OrExpression } from './OrExpression.js'; @@ -33,9 +33,8 @@ import { StringExpression } from './StringExpression.js'; import { ElementaryType } from './ElementaryType.js'; import { TerminalNode } from './TerminalNode.js'; -import type { AstPath, Doc, ParserOptions } from 'prettier'; +import type { ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction } from '../types.d.ts'; function createNonterminalVariant( variant: Exclude, @@ -126,7 +125,7 @@ function createNonterminalVariant( return exhaustiveCheck; } -export class Expression extends SlangNode { +export class Expression extends PolymorphicNode { readonly kind = NonterminalKind.Expression; variant: @@ -171,8 +170,4 @@ export class Expression extends SlangNode { this.updateMetadata(this.variant); } - - print(path: AstPath, print: PrintFunction): Doc { - return path.call(print, 'variant'); - } } diff --git a/src/slang-nodes/FallbackFunctionAttribute.ts b/src/slang-nodes/FallbackFunctionAttribute.ts index 4fb270f3a..40d89314a 100644 --- a/src/slang-nodes/FallbackFunctionAttribute.ts +++ b/src/slang-nodes/FallbackFunctionAttribute.ts @@ -3,14 +3,13 @@ import { NonterminalKind, TerminalNode as SlangTerminalNode } from '@nomicfoundation/slang/cst'; -import { SlangNode } from './SlangNode.js'; +import { PolymorphicNode } from './PolymorphicNode.js'; import { ModifierInvocation } from './ModifierInvocation.js'; import { OverrideSpecifier } from './OverrideSpecifier.js'; import { TerminalNode } from './TerminalNode.js'; -import type { AstPath, Doc, ParserOptions } from 'prettier'; +import type { ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction } from '../types.d.ts'; function createNonterminalVariant( variant: Exclude, @@ -26,7 +25,7 @@ function createNonterminalVariant( return exhaustiveCheck; } -export class FallbackFunctionAttribute extends SlangNode { +export class FallbackFunctionAttribute extends PolymorphicNode { readonly kind = NonterminalKind.FallbackFunctionAttribute; variant: ModifierInvocation | OverrideSpecifier | TerminalNode; @@ -46,8 +45,4 @@ export class FallbackFunctionAttribute extends SlangNode { this.updateMetadata(this.variant); } - - print(path: AstPath, print: PrintFunction): Doc { - return path.call(print, 'variant'); - } } diff --git a/src/slang-nodes/ForStatementCondition.ts b/src/slang-nodes/ForStatementCondition.ts index 94c01c5f4..852a57bfc 100644 --- a/src/slang-nodes/ForStatementCondition.ts +++ b/src/slang-nodes/ForStatementCondition.ts @@ -2,16 +2,15 @@ import { NonterminalKind, TerminalNode as SlangTerminalNode } from '@nomicfoundation/slang/cst'; -import { SlangNode } from './SlangNode.js'; +import { PolymorphicNode } from './PolymorphicNode.js'; import { ExpressionStatement } from './ExpressionStatement.js'; +import { TerminalNode } from './TerminalNode.js'; import type * as ast from '@nomicfoundation/slang/ast'; -import type { AstPath, Doc, ParserOptions } from 'prettier'; +import type { ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction } from '../types.d.ts'; -import { TerminalNode } from './TerminalNode.js'; -export class ForStatementCondition extends SlangNode { +export class ForStatementCondition extends PolymorphicNode { readonly kind = NonterminalKind.ForStatementCondition; variant: ExpressionStatement | TerminalNode; @@ -28,8 +27,4 @@ export class ForStatementCondition extends SlangNode { this.updateMetadata(this.variant); } - - print(path: AstPath, print: PrintFunction): Doc { - return path.call(print, 'variant'); - } } diff --git a/src/slang-nodes/ForStatementInitialization.ts b/src/slang-nodes/ForStatementInitialization.ts index db6ad487e..a1f88c986 100644 --- a/src/slang-nodes/ForStatementInitialization.ts +++ b/src/slang-nodes/ForStatementInitialization.ts @@ -3,15 +3,14 @@ import { NonterminalKind, TerminalNode as SlangTerminalNode } from '@nomicfoundation/slang/cst'; -import { SlangNode } from './SlangNode.js'; +import { PolymorphicNode } from './PolymorphicNode.js'; import { ExpressionStatement } from './ExpressionStatement.js'; import { VariableDeclarationStatement } from './VariableDeclarationStatement.js'; import { TupleDeconstructionStatement } from './TupleDeconstructionStatement.js'; import { TerminalNode } from './TerminalNode.js'; -import type { AstPath, Doc, ParserOptions } from 'prettier'; +import type { ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction } from '../types.d.ts'; function createNonterminalVariant( variant: Exclude< @@ -33,7 +32,7 @@ function createNonterminalVariant( return exhaustiveCheck; } -export class ForStatementInitialization extends SlangNode { +export class ForStatementInitialization extends PolymorphicNode { readonly kind = NonterminalKind.ForStatementInitialization; variant: @@ -57,8 +56,4 @@ export class ForStatementInitialization extends SlangNode { this.updateMetadata(this.variant); } - - print(path: AstPath, print: PrintFunction): Doc { - return path.call(print, 'variant'); - } } diff --git a/src/slang-nodes/FunctionAttribute.ts b/src/slang-nodes/FunctionAttribute.ts index 5290d968b..c42c7337b 100644 --- a/src/slang-nodes/FunctionAttribute.ts +++ b/src/slang-nodes/FunctionAttribute.ts @@ -3,14 +3,13 @@ import { NonterminalKind, TerminalNode as SlangTerminalNode } from '@nomicfoundation/slang/cst'; -import { SlangNode } from './SlangNode.js'; +import { PolymorphicNode } from './PolymorphicNode.js'; import { ModifierInvocation } from './ModifierInvocation.js'; import { OverrideSpecifier } from './OverrideSpecifier.js'; import { TerminalNode } from './TerminalNode.js'; -import type { AstPath, Doc, ParserOptions } from 'prettier'; +import type { ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction } from '../types.d.ts'; function createNonterminalVariant( variant: Exclude, @@ -26,7 +25,7 @@ function createNonterminalVariant( return exhaustiveCheck; } -export class FunctionAttribute extends SlangNode { +export class FunctionAttribute extends PolymorphicNode { readonly kind = NonterminalKind.FunctionAttribute; variant: ModifierInvocation | OverrideSpecifier | TerminalNode; @@ -43,8 +42,4 @@ export class FunctionAttribute extends SlangNode { this.updateMetadata(this.variant); } - - print(path: AstPath, print: PrintFunction): Doc { - return path.call(print, 'variant'); - } } diff --git a/src/slang-nodes/FunctionBody.ts b/src/slang-nodes/FunctionBody.ts index 658b88502..7a297fdcc 100644 --- a/src/slang-nodes/FunctionBody.ts +++ b/src/slang-nodes/FunctionBody.ts @@ -2,16 +2,15 @@ import { NonterminalKind, TerminalNode as SlangTerminalNode } from '@nomicfoundation/slang/cst'; -import { SlangNode } from './SlangNode.js'; +import { PolymorphicNode } from './PolymorphicNode.js'; import { Block } from './Block.js'; import { TerminalNode } from './TerminalNode.js'; import type * as ast from '@nomicfoundation/slang/ast'; -import type { AstPath, Doc, ParserOptions } from 'prettier'; +import type { ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction } from '../types.d.ts'; -export class FunctionBody extends SlangNode { +export class FunctionBody extends PolymorphicNode { readonly kind = NonterminalKind.FunctionBody; variant: Block | TerminalNode; @@ -28,8 +27,4 @@ export class FunctionBody extends SlangNode { this.updateMetadata(this.variant); } - - print(path: AstPath, print: PrintFunction): Doc { - return path.call(print, 'variant'); - } } diff --git a/src/slang-nodes/FunctionName.ts b/src/slang-nodes/FunctionName.ts index 6c559aaaf..b3f9620e3 100644 --- a/src/slang-nodes/FunctionName.ts +++ b/src/slang-nodes/FunctionName.ts @@ -1,12 +1,10 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { SlangNode } from './SlangNode.js'; +import { PolymorphicNode } from './PolymorphicNode.js'; import { TerminalNode } from './TerminalNode.js'; import type * as ast from '@nomicfoundation/slang/ast'; -import type { AstPath, Doc } from 'prettier'; -import type { PrintFunction } from '../types.d.ts'; -export class FunctionName extends SlangNode { +export class FunctionName extends PolymorphicNode { readonly kind = NonterminalKind.FunctionName; variant: TerminalNode; @@ -16,8 +14,4 @@ export class FunctionName extends SlangNode { this.variant = new TerminalNode(ast.variant); } - - print(path: AstPath, print: PrintFunction): Doc { - return path.call(print, 'variant'); - } } diff --git a/src/slang-nodes/FunctionTypeAttribute.ts b/src/slang-nodes/FunctionTypeAttribute.ts index 61ac4a32d..a13cf97cf 100644 --- a/src/slang-nodes/FunctionTypeAttribute.ts +++ b/src/slang-nodes/FunctionTypeAttribute.ts @@ -1,12 +1,10 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { SlangNode } from './SlangNode.js'; +import { PolymorphicNode } from './PolymorphicNode.js'; import { TerminalNode } from './TerminalNode.js'; import type * as ast from '@nomicfoundation/slang/ast'; -import type { AstPath, Doc } from 'prettier'; -import type { PrintFunction } from '../types.d.ts'; -export class FunctionTypeAttribute extends SlangNode { +export class FunctionTypeAttribute extends PolymorphicNode { readonly kind = NonterminalKind.FunctionTypeAttribute; variant: TerminalNode; @@ -16,8 +14,4 @@ export class FunctionTypeAttribute extends SlangNode { this.variant = new TerminalNode(ast.variant); } - - print(path: AstPath, print: PrintFunction): Doc { - return path.call(print, 'variant'); - } } diff --git a/src/slang-nodes/ImportClause.ts b/src/slang-nodes/ImportClause.ts index b0bfaa645..3c721dc53 100644 --- a/src/slang-nodes/ImportClause.ts +++ b/src/slang-nodes/ImportClause.ts @@ -1,13 +1,12 @@ import * as ast from '@nomicfoundation/slang/ast'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { SlangNode } from './SlangNode.js'; +import { PolymorphicNode } from './PolymorphicNode.js'; import { PathImport } from './PathImport.js'; import { NamedImport } from './NamedImport.js'; import { ImportDeconstruction } from './ImportDeconstruction.js'; -import type { AstPath, Doc, ParserOptions } from 'prettier'; +import type { ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction } from '../types.d.ts'; function createNonterminalVariant( variant: ast.ImportClause['variant'], @@ -26,7 +25,7 @@ function createNonterminalVariant( return exhaustiveCheck; } -export class ImportClause extends SlangNode { +export class ImportClause extends PolymorphicNode { readonly kind = NonterminalKind.ImportClause; variant: PathImport | NamedImport | ImportDeconstruction; @@ -38,8 +37,4 @@ export class ImportClause extends SlangNode { this.updateMetadata(this.variant); } - - print(path: AstPath, print: PrintFunction): Doc { - return path.call(print, 'variant'); - } } diff --git a/src/slang-nodes/MappingKeyType.ts b/src/slang-nodes/MappingKeyType.ts index 7096eaf2f..5f8474f24 100644 --- a/src/slang-nodes/MappingKeyType.ts +++ b/src/slang-nodes/MappingKeyType.ts @@ -1,12 +1,9 @@ import * as ast from '@nomicfoundation/slang/ast'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { SlangNode } from './SlangNode.js'; +import { PolymorphicNode } from './PolymorphicNode.js'; import { ElementaryType } from './ElementaryType.js'; import { IdentifierPath } from './IdentifierPath.js'; -import type { AstPath, Doc } from 'prettier'; -import type { PrintFunction } from '../types.d.ts'; - function createNonterminalVariant( variant: ast.MappingKeyType['variant'] ): MappingKeyType['variant'] { @@ -20,7 +17,7 @@ function createNonterminalVariant( return exhaustiveCheck; } -export class MappingKeyType extends SlangNode { +export class MappingKeyType extends PolymorphicNode { readonly kind = NonterminalKind.MappingKeyType; variant: ElementaryType | IdentifierPath; @@ -32,8 +29,4 @@ export class MappingKeyType extends SlangNode { this.updateMetadata(this.variant); } - - print(path: AstPath, print: PrintFunction): Doc { - return path.call(print, 'variant'); - } } diff --git a/src/slang-nodes/ModifierAttribute.ts b/src/slang-nodes/ModifierAttribute.ts index 23fcde6ac..9f2dbfa72 100644 --- a/src/slang-nodes/ModifierAttribute.ts +++ b/src/slang-nodes/ModifierAttribute.ts @@ -2,15 +2,13 @@ import { NonterminalKind, TerminalNode as SlangTerminalNode } from '@nomicfoundation/slang/cst'; -import { SlangNode } from './SlangNode.js'; +import { PolymorphicNode } from './PolymorphicNode.js'; import { OverrideSpecifier } from './OverrideSpecifier.js'; import { TerminalNode } from './TerminalNode.js'; import type * as ast from '@nomicfoundation/slang/ast'; -import type { AstPath, Doc } from 'prettier'; -import type { PrintFunction } from '../types.d.ts'; -export class ModifierAttribute extends SlangNode { +export class ModifierAttribute extends PolymorphicNode { readonly kind = NonterminalKind.ModifierAttribute; variant: OverrideSpecifier | TerminalNode; @@ -27,8 +25,4 @@ export class ModifierAttribute extends SlangNode { this.updateMetadata(this.variant); } - - print(path: AstPath, print: PrintFunction): Doc { - return path.call(print, 'variant'); - } } diff --git a/src/slang-nodes/PolymorphicNode.ts b/src/slang-nodes/PolymorphicNode.ts new file mode 100644 index 000000000..2ff2cbbcf --- /dev/null +++ b/src/slang-nodes/PolymorphicNode.ts @@ -0,0 +1,17 @@ +import { SlangNode } from './SlangNode.js'; + +import type { AstPath, Doc } from 'prettier'; +import type { PrintFunction, SlangAstNode } from '../types.d.ts'; +import type { StrictPolymorphicNode } from './types.d.ts'; + +export abstract class PolymorphicNode extends SlangNode { + abstract variant: StrictPolymorphicNode['variant']; + + constructor(ast: SlangAstNode) { + super(ast); + } + + print(path: AstPath, print: PrintFunction): Doc { + return path.call(print, 'variant'); + } +} diff --git a/src/slang-nodes/Pragma.ts b/src/slang-nodes/Pragma.ts index efb6a940c..1206e2bbd 100644 --- a/src/slang-nodes/Pragma.ts +++ b/src/slang-nodes/Pragma.ts @@ -1,13 +1,12 @@ import * as ast from '@nomicfoundation/slang/ast'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { SlangNode } from './SlangNode.js'; +import { PolymorphicNode } from './PolymorphicNode.js'; import { AbicoderPragma } from './AbicoderPragma.js'; import { ExperimentalPragma } from './ExperimentalPragma.js'; import { VersionPragma } from './VersionPragma.js'; -import type { AstPath, Doc, ParserOptions } from 'prettier'; +import type { ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction } from '../types.d.ts'; function createNonterminalVariant( variant: ast.Pragma['variant'], @@ -26,7 +25,7 @@ function createNonterminalVariant( return exhaustiveCheck; } -export class Pragma extends SlangNode { +export class Pragma extends PolymorphicNode { readonly kind = NonterminalKind.Pragma; variant: AbicoderPragma | ExperimentalPragma | VersionPragma; @@ -38,8 +37,4 @@ export class Pragma extends SlangNode { this.updateMetadata(this.variant); } - - print(path: AstPath, print: PrintFunction): Doc { - return path.call(print, 'variant'); - } } diff --git a/src/slang-nodes/ReceiveFunctionAttribute.ts b/src/slang-nodes/ReceiveFunctionAttribute.ts index 4a7e4ee8d..74a52cff1 100644 --- a/src/slang-nodes/ReceiveFunctionAttribute.ts +++ b/src/slang-nodes/ReceiveFunctionAttribute.ts @@ -3,14 +3,13 @@ import { NonterminalKind, TerminalNode as SlangTerminalNode } from '@nomicfoundation/slang/cst'; -import { SlangNode } from './SlangNode.js'; +import { PolymorphicNode } from './PolymorphicNode.js'; import { ModifierInvocation } from './ModifierInvocation.js'; import { OverrideSpecifier } from './OverrideSpecifier.js'; import { TerminalNode } from './TerminalNode.js'; -import type { AstPath, Doc, ParserOptions } from 'prettier'; +import type { ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction } from '../types.d.ts'; function createNonterminalVariant( variant: Exclude, @@ -26,7 +25,7 @@ function createNonterminalVariant( return exhaustiveCheck; } -export class ReceiveFunctionAttribute extends SlangNode { +export class ReceiveFunctionAttribute extends PolymorphicNode { readonly kind = NonterminalKind.ReceiveFunctionAttribute; variant: ModifierInvocation | OverrideSpecifier | TerminalNode; @@ -46,8 +45,4 @@ export class ReceiveFunctionAttribute extends SlangNode { this.updateMetadata(this.variant); } - - print(path: AstPath, print: PrintFunction): Doc { - return path.call(print, 'variant'); - } } diff --git a/src/slang-nodes/SourceUnitMember.ts b/src/slang-nodes/SourceUnitMember.ts index cb9d349bf..683238e34 100644 --- a/src/slang-nodes/SourceUnitMember.ts +++ b/src/slang-nodes/SourceUnitMember.ts @@ -1,6 +1,6 @@ import * as ast from '@nomicfoundation/slang/ast'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { SlangNode } from './SlangNode.js'; +import { PolymorphicNode } from './PolymorphicNode.js'; import { PragmaDirective } from './PragmaDirective.js'; import { ImportDirective } from './ImportDirective.js'; import { ContractDefinition } from './ContractDefinition.js'; @@ -15,9 +15,8 @@ import { UserDefinedValueTypeDefinition } from './UserDefinedValueTypeDefinition import { UsingDirective } from './UsingDirective.js'; import { EventDefinition } from './EventDefinition.js'; -import type { AstPath, Doc, ParserOptions } from 'prettier'; +import type { ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction } from '../types.d.ts'; function createNonterminalVariant( variant: ast.SourceUnitMember['variant'], @@ -66,7 +65,7 @@ function createNonterminalVariant( return exhaustiveCheck; } -export class SourceUnitMember extends SlangNode { +export class SourceUnitMember extends PolymorphicNode { readonly kind = NonterminalKind.SourceUnitMember; variant: @@ -91,8 +90,4 @@ export class SourceUnitMember extends SlangNode { this.updateMetadata(this.variant); } - - print(path: AstPath, print: PrintFunction): Doc { - return path.call(print, 'variant'); - } } diff --git a/src/slang-nodes/StateVariableAttribute.ts b/src/slang-nodes/StateVariableAttribute.ts index e45131655..6ddf3295c 100644 --- a/src/slang-nodes/StateVariableAttribute.ts +++ b/src/slang-nodes/StateVariableAttribute.ts @@ -2,15 +2,13 @@ import { NonterminalKind, TerminalNode as SlangTerminalNode } from '@nomicfoundation/slang/cst'; -import { SlangNode } from './SlangNode.js'; +import { PolymorphicNode } from './PolymorphicNode.js'; import { OverrideSpecifier } from './OverrideSpecifier.js'; import { TerminalNode } from './TerminalNode.js'; import type * as ast from '@nomicfoundation/slang/ast'; -import type { AstPath, Doc } from 'prettier'; -import type { PrintFunction } from '../types.d.ts'; -export class StateVariableAttribute extends SlangNode { +export class StateVariableAttribute extends PolymorphicNode { readonly kind = NonterminalKind.StateVariableAttribute; variant: OverrideSpecifier | TerminalNode; @@ -27,8 +25,4 @@ export class StateVariableAttribute extends SlangNode { this.updateMetadata(this.variant); } - - print(path: AstPath, print: PrintFunction): Doc { - return path.call(print, 'variant'); - } } diff --git a/src/slang-nodes/Statement.ts b/src/slang-nodes/Statement.ts index 3b5916222..3b3a6d72d 100644 --- a/src/slang-nodes/Statement.ts +++ b/src/slang-nodes/Statement.ts @@ -1,6 +1,6 @@ import * as ast from '@nomicfoundation/slang/ast'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { SlangNode } from './SlangNode.js'; +import { PolymorphicNode } from './PolymorphicNode.js'; import { ExpressionStatement } from './ExpressionStatement.js'; import { VariableDeclarationStatement } from './VariableDeclarationStatement.js'; import { TupleDeconstructionStatement } from './TupleDeconstructionStatement.js'; @@ -19,9 +19,8 @@ import { AssemblyStatement } from './AssemblyStatement.js'; import { Block } from './Block.js'; import { UncheckedBlock } from './UncheckedBlock.js'; -import type { AstPath, Doc, ParserOptions } from 'prettier'; +import type { ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction } from '../types.d.ts'; function createNonterminalVariant( variant: ast.Statement['variant'], @@ -82,7 +81,7 @@ function createNonterminalVariant( return exhaustiveCheck; } -export class Statement extends SlangNode { +export class Statement extends PolymorphicNode { readonly kind = NonterminalKind.Statement; variant: @@ -111,8 +110,4 @@ export class Statement extends SlangNode { this.updateMetadata(this.variant); } - - print(path: AstPath, print: PrintFunction): Doc { - return path.call(print, 'variant'); - } } diff --git a/src/slang-nodes/StringExpression.ts b/src/slang-nodes/StringExpression.ts index c7edb758d..5b074af51 100644 --- a/src/slang-nodes/StringExpression.ts +++ b/src/slang-nodes/StringExpression.ts @@ -1,15 +1,14 @@ import * as ast from '@nomicfoundation/slang/ast'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { SlangNode } from './SlangNode.js'; +import { PolymorphicNode } from './PolymorphicNode.js'; import { StringLiteral } from './StringLiteral.js'; import { StringLiterals } from './StringLiterals.js'; import { HexStringLiteral } from './HexStringLiteral.js'; import { HexStringLiterals } from './HexStringLiterals.js'; import { UnicodeStringLiterals } from './UnicodeStringLiterals.js'; -import type { AstPath, Doc, ParserOptions } from 'prettier'; +import type { ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction } from '../types.d.ts'; function createNonterminalVariant( variant: ast.StringExpression['variant'], @@ -34,7 +33,7 @@ function createNonterminalVariant( return exhaustiveCheck; } -export class StringExpression extends SlangNode { +export class StringExpression extends PolymorphicNode { readonly kind = NonterminalKind.StringExpression; variant: @@ -51,8 +50,4 @@ export class StringExpression extends SlangNode { this.updateMetadata(this.variant); } - - print(path: AstPath, print: PrintFunction): Doc { - return path.call(print, 'variant'); - } } diff --git a/src/slang-nodes/TupleMember.ts b/src/slang-nodes/TupleMember.ts index 2da49eeb9..19b3b378b 100644 --- a/src/slang-nodes/TupleMember.ts +++ b/src/slang-nodes/TupleMember.ts @@ -1,12 +1,11 @@ import * as ast from '@nomicfoundation/slang/ast'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { SlangNode } from './SlangNode.js'; +import { PolymorphicNode } from './PolymorphicNode.js'; import { TypedTupleMember } from './TypedTupleMember.js'; import { UntypedTupleMember } from './UntypedTupleMember.js'; -import type { AstPath, Doc, ParserOptions } from 'prettier'; +import type { ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction } from '../types.d.ts'; function createNonterminalVariant( variant: ast.TupleMember['variant'], @@ -22,7 +21,7 @@ function createNonterminalVariant( return exhaustiveCheck; } -export class TupleMember extends SlangNode { +export class TupleMember extends PolymorphicNode { readonly kind = NonterminalKind.TupleMember; variant: TypedTupleMember | UntypedTupleMember; @@ -34,8 +33,4 @@ export class TupleMember extends SlangNode { this.updateMetadata(this.variant); } - - print(path: AstPath, print: PrintFunction): Doc { - return path.call(print, 'variant'); - } } diff --git a/src/slang-nodes/TupleValues.ts b/src/slang-nodes/TupleValues.ts index c27972f79..fe7ce741c 100644 --- a/src/slang-nodes/TupleValues.ts +++ b/src/slang-nodes/TupleValues.ts @@ -9,7 +9,7 @@ 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 } from '../types.d.ts'; -import type { Expression } from './Expression.js'; +import type { Expression } from './Expression.ts'; export class TupleValues extends SlangNode { readonly kind = NonterminalKind.TupleValues; diff --git a/src/slang-nodes/TypeName.ts b/src/slang-nodes/TypeName.ts index 931d1ea25..a3c83328b 100644 --- a/src/slang-nodes/TypeName.ts +++ b/src/slang-nodes/TypeName.ts @@ -1,15 +1,14 @@ import * as ast from '@nomicfoundation/slang/ast'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { SlangNode } from './SlangNode.js'; +import { PolymorphicNode } from './PolymorphicNode.js'; import { ArrayTypeName } from './ArrayTypeName.js'; import { FunctionType } from './FunctionType.js'; import { MappingType } from './MappingType.js'; import { ElementaryType } from './ElementaryType.js'; import { IdentifierPath } from './IdentifierPath.js'; -import type { AstPath, Doc, ParserOptions } from 'prettier'; +import type { ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction } from '../types.d.ts'; function createNonterminalVariant( variant: ast.TypeName['variant'], @@ -34,7 +33,7 @@ function createNonterminalVariant( return exhaustiveCheck; } -export class TypeName extends SlangNode { +export class TypeName extends PolymorphicNode { readonly kind = NonterminalKind.TypeName; variant: @@ -51,8 +50,4 @@ export class TypeName extends SlangNode { this.updateMetadata(this.variant); } - - print(path: AstPath, print: PrintFunction): Doc { - return path.call(print, 'variant'); - } } diff --git a/src/slang-nodes/UnnamedFunctionAttribute.ts b/src/slang-nodes/UnnamedFunctionAttribute.ts index d22dd58ad..c67898e2c 100644 --- a/src/slang-nodes/UnnamedFunctionAttribute.ts +++ b/src/slang-nodes/UnnamedFunctionAttribute.ts @@ -2,16 +2,15 @@ import { NonterminalKind, TerminalNode as SlangTerminalNode } from '@nomicfoundation/slang/cst'; -import { SlangNode } from './SlangNode.js'; +import { PolymorphicNode } from './PolymorphicNode.js'; import { ModifierInvocation } from './ModifierInvocation.js'; import { TerminalNode } from './TerminalNode.js'; import type * as ast from '@nomicfoundation/slang/ast'; -import type { AstPath, Doc, ParserOptions } from 'prettier'; +import type { ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction } from '../types.d.ts'; -export class UnnamedFunctionAttribute extends SlangNode { +export class UnnamedFunctionAttribute extends PolymorphicNode { readonly kind = NonterminalKind.UnnamedFunctionAttribute; variant: ModifierInvocation | TerminalNode; @@ -31,8 +30,4 @@ export class UnnamedFunctionAttribute extends SlangNode { this.updateMetadata(this.variant); } - - print(path: AstPath, print: PrintFunction): Doc { - return path.call(print, 'variant'); - } } diff --git a/src/slang-nodes/UsingClause.ts b/src/slang-nodes/UsingClause.ts index 03ae7a09c..a1f8f8215 100644 --- a/src/slang-nodes/UsingClause.ts +++ b/src/slang-nodes/UsingClause.ts @@ -1,12 +1,9 @@ import * as ast from '@nomicfoundation/slang/ast'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { SlangNode } from './SlangNode.js'; +import { PolymorphicNode } from './PolymorphicNode.js'; import { IdentifierPath } from './IdentifierPath.js'; import { UsingDeconstruction } from './UsingDeconstruction.js'; -import type { AstPath, Doc } from 'prettier'; -import type { PrintFunction } from '../types.d.ts'; - function createNonterminalVariant( variant: ast.UsingClause['variant'] ): UsingClause['variant'] { @@ -20,7 +17,7 @@ function createNonterminalVariant( return exhaustiveCheck; } -export class UsingClause extends SlangNode { +export class UsingClause extends PolymorphicNode { readonly kind = NonterminalKind.UsingClause; variant: IdentifierPath | UsingDeconstruction; @@ -32,8 +29,4 @@ export class UsingClause extends SlangNode { this.updateMetadata(this.variant); } - - print(path: AstPath, print: PrintFunction): Doc { - return path.call(print, 'variant'); - } } diff --git a/src/slang-nodes/UsingTarget.ts b/src/slang-nodes/UsingTarget.ts index be6234e1a..8eaeb1490 100644 --- a/src/slang-nodes/UsingTarget.ts +++ b/src/slang-nodes/UsingTarget.ts @@ -2,16 +2,15 @@ import { NonterminalKind, TerminalNode as SlangTerminalNode } from '@nomicfoundation/slang/cst'; -import { SlangNode } from './SlangNode.js'; +import { PolymorphicNode } from './PolymorphicNode.js'; import { TypeName } from './TypeName.js'; import { TerminalNode } from './TerminalNode.js'; import type * as ast from '@nomicfoundation/slang/ast'; -import type { AstPath, Doc, ParserOptions } from 'prettier'; +import type { ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction } from '../types.d.ts'; -export class UsingTarget extends SlangNode { +export class UsingTarget extends PolymorphicNode { readonly kind = NonterminalKind.UsingTarget; variant: TypeName | TerminalNode; @@ -28,8 +27,4 @@ export class UsingTarget extends SlangNode { this.updateMetadata(this.variant); } - - print(path: AstPath, print: PrintFunction): Doc { - return path.call(print, 'variant'); - } } diff --git a/src/slang-nodes/VariableDeclarationType.ts b/src/slang-nodes/VariableDeclarationType.ts index 24855a51f..d17312222 100644 --- a/src/slang-nodes/VariableDeclarationType.ts +++ b/src/slang-nodes/VariableDeclarationType.ts @@ -2,16 +2,15 @@ import { NonterminalKind, TerminalNode as SlangTerminalNode } from '@nomicfoundation/slang/cst'; -import { SlangNode } from './SlangNode.js'; +import { PolymorphicNode } from './PolymorphicNode.js'; import { TypeName } from './TypeName.js'; import { TerminalNode } from './TerminalNode.js'; import type * as ast from '@nomicfoundation/slang/ast'; -import type { AstPath, Doc, ParserOptions } from 'prettier'; +import type { ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction } from '../types.d.ts'; -export class VariableDeclarationType extends SlangNode { +export class VariableDeclarationType extends PolymorphicNode { readonly kind = NonterminalKind.VariableDeclarationType; variant: TypeName | TerminalNode; @@ -31,8 +30,4 @@ export class VariableDeclarationType extends SlangNode { this.updateMetadata(this.variant); } - - print(path: AstPath, print: PrintFunction): Doc { - return path.call(print, 'variant'); - } } diff --git a/src/slang-nodes/VersionExpression.ts b/src/slang-nodes/VersionExpression.ts index 76ae215a9..abb1cb85c 100644 --- a/src/slang-nodes/VersionExpression.ts +++ b/src/slang-nodes/VersionExpression.ts @@ -1,12 +1,9 @@ import * as ast from '@nomicfoundation/slang/ast'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { SlangNode } from './SlangNode.js'; +import { PolymorphicNode } from './PolymorphicNode.js'; import { VersionRange } from './VersionRange.js'; import { VersionTerm } from './VersionTerm.js'; -import type { AstPath, Doc } from 'prettier'; -import type { PrintFunction } from '../types.d.ts'; - function createNonterminalVariant( variant: ast.VersionExpression['variant'] ): VersionExpression['variant'] { @@ -20,7 +17,7 @@ function createNonterminalVariant( return exhaustiveCheck; } -export class VersionExpression extends SlangNode { +export class VersionExpression extends PolymorphicNode { readonly kind = NonterminalKind.VersionExpression; variant: VersionRange | VersionTerm; @@ -32,8 +29,4 @@ export class VersionExpression extends SlangNode { this.updateMetadata(this.variant); } - - print(path: AstPath, print: PrintFunction): Doc { - return path.call(print, 'variant'); - } } diff --git a/src/slang-nodes/VersionLiteral.ts b/src/slang-nodes/VersionLiteral.ts index 40c64f8d4..fa809017f 100644 --- a/src/slang-nodes/VersionLiteral.ts +++ b/src/slang-nodes/VersionLiteral.ts @@ -2,15 +2,13 @@ import { NonterminalKind, TerminalNode as SlangTerminalNode } from '@nomicfoundation/slang/cst'; -import { SlangNode } from './SlangNode.js'; +import { PolymorphicNode } from './PolymorphicNode.js'; import { SimpleVersionLiteral } from './SimpleVersionLiteral.js'; import { TerminalNode } from './TerminalNode.js'; import type * as ast from '@nomicfoundation/slang/ast'; -import type { AstPath, Doc } from 'prettier'; -import type { PrintFunction } from '../types.d.ts'; -export class VersionLiteral extends SlangNode { +export class VersionLiteral extends PolymorphicNode { readonly kind = NonterminalKind.VersionLiteral; variant: SimpleVersionLiteral | TerminalNode; @@ -27,8 +25,4 @@ export class VersionLiteral extends SlangNode { this.updateMetadata(this.variant); } - - print(path: AstPath, print: PrintFunction): Doc { - return path.call(print, 'variant'); - } } diff --git a/src/slang-nodes/YulAssignmentOperator.ts b/src/slang-nodes/YulAssignmentOperator.ts index 5a6a94b18..c8453b73b 100644 --- a/src/slang-nodes/YulAssignmentOperator.ts +++ b/src/slang-nodes/YulAssignmentOperator.ts @@ -2,15 +2,13 @@ import { NonterminalKind, TerminalNode as SlangTerminalNode } from '@nomicfoundation/slang/cst'; -import { SlangNode } from './SlangNode.js'; +import { PolymorphicNode } from './PolymorphicNode.js'; import { YulColonAndEqual } from './YulColonAndEqual.js'; import { TerminalNode } from './TerminalNode.js'; import type * as ast from '@nomicfoundation/slang/ast'; -import type { AstPath, Doc } from 'prettier'; -import type { PrintFunction } from '../types.d.ts'; -export class YulAssignmentOperator extends SlangNode { +export class YulAssignmentOperator extends PolymorphicNode { readonly kind = NonterminalKind.YulAssignmentOperator; variant: YulColonAndEqual | TerminalNode; @@ -27,8 +25,4 @@ export class YulAssignmentOperator extends SlangNode { this.updateMetadata(this.variant); } - - print(path: AstPath, print: PrintFunction): Doc { - return path.call(print, 'variant'); - } } diff --git a/src/slang-nodes/YulExpression.ts b/src/slang-nodes/YulExpression.ts index 42acf09ce..6afa8526f 100644 --- a/src/slang-nodes/YulExpression.ts +++ b/src/slang-nodes/YulExpression.ts @@ -1,13 +1,12 @@ import * as ast from '@nomicfoundation/slang/ast'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { SlangNode } from './SlangNode.js'; +import { PolymorphicNode } from './PolymorphicNode.js'; import { YulFunctionCallExpression } from './YulFunctionCallExpression.js'; import { YulLiteral } from './YulLiteral.js'; import { YulPath } from './YulPath.js'; -import type { AstPath, Doc, ParserOptions } from 'prettier'; +import type { ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction } from '../types.d.ts'; function createNonterminalVariant( variant: ast.YulExpression['variant'], @@ -26,7 +25,7 @@ function createNonterminalVariant( return exhaustiveCheck; } -export class YulExpression extends SlangNode { +export class YulExpression extends PolymorphicNode { readonly kind = NonterminalKind.YulExpression; variant: YulFunctionCallExpression | YulLiteral | YulPath; @@ -38,8 +37,4 @@ export class YulExpression extends SlangNode { this.updateMetadata(this.variant); } - - print(path: AstPath, print: PrintFunction): Doc { - return path.call(print, 'variant'); - } } diff --git a/src/slang-nodes/YulLiteral.ts b/src/slang-nodes/YulLiteral.ts index 1954cb8d6..e79a7c97b 100644 --- a/src/slang-nodes/YulLiteral.ts +++ b/src/slang-nodes/YulLiteral.ts @@ -3,14 +3,13 @@ import { NonterminalKind, TerminalNode as SlangTerminalNode } from '@nomicfoundation/slang/cst'; -import { SlangNode } from './SlangNode.js'; +import { PolymorphicNode } from './PolymorphicNode.js'; import { HexStringLiteral } from './HexStringLiteral.js'; import { StringLiteral } from './StringLiteral.js'; import { TerminalNode } from './TerminalNode.js'; -import type { AstPath, Doc, ParserOptions } from 'prettier'; +import type { ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction } from '../types.d.ts'; function createNonterminalVariant( variant: Exclude, @@ -26,7 +25,7 @@ function createNonterminalVariant( return exhaustiveCheck; } -export class YulLiteral extends SlangNode { +export class YulLiteral extends PolymorphicNode { readonly kind = NonterminalKind.YulLiteral; variant: HexStringLiteral | StringLiteral | TerminalNode; @@ -43,8 +42,4 @@ export class YulLiteral extends SlangNode { this.updateMetadata(this.variant); } - - print(path: AstPath, print: PrintFunction): Doc { - return path.call(print, 'variant'); - } } diff --git a/src/slang-nodes/YulStackAssignmentOperator.ts b/src/slang-nodes/YulStackAssignmentOperator.ts index a76b11421..9bcf338bd 100644 --- a/src/slang-nodes/YulStackAssignmentOperator.ts +++ b/src/slang-nodes/YulStackAssignmentOperator.ts @@ -2,15 +2,13 @@ import { NonterminalKind, TerminalNode as SlangTerminalNode } from '@nomicfoundation/slang/cst'; -import { SlangNode } from './SlangNode.js'; +import { PolymorphicNode } from './PolymorphicNode.js'; import { YulEqualAndColon } from './YulEqualAndColon.js'; import { TerminalNode } from './TerminalNode.js'; import type * as ast from '@nomicfoundation/slang/ast'; -import type { AstPath, Doc } from 'prettier'; -import type { PrintFunction } from '../types.d.ts'; -export class YulStackAssignmentOperator extends SlangNode { +export class YulStackAssignmentOperator extends PolymorphicNode { readonly kind = NonterminalKind.YulStackAssignmentOperator; variant: YulEqualAndColon | TerminalNode; @@ -27,8 +25,4 @@ export class YulStackAssignmentOperator extends SlangNode { this.updateMetadata(this.variant); } - - print(path: AstPath, print: PrintFunction): Doc { - return path.call(print, 'variant'); - } } diff --git a/src/slang-nodes/YulStatement.ts b/src/slang-nodes/YulStatement.ts index fa8f4b414..234988692 100644 --- a/src/slang-nodes/YulStatement.ts +++ b/src/slang-nodes/YulStatement.ts @@ -1,6 +1,6 @@ import * as ast from '@nomicfoundation/slang/ast'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { SlangNode } from './SlangNode.js'; +import { PolymorphicNode } from './PolymorphicNode.js'; import { YulBlock } from './YulBlock.js'; import { YulFunctionDefinition } from './YulFunctionDefinition.js'; import { YulVariableDeclarationStatement } from './YulVariableDeclarationStatement.js'; @@ -15,9 +15,8 @@ import { YulContinueStatement } from './YulContinueStatement.js'; import { YulLabel } from './YulLabel.js'; import { YulExpression } from './YulExpression.js'; -import type { AstPath, Doc, ParserOptions } from 'prettier'; +import type { ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction } from '../types.d.ts'; function createNonterminalVariant( variant: ast.YulStatement['variant'], @@ -66,7 +65,7 @@ function createNonterminalVariant( return exhaustiveCheck; } -export class YulStatement extends SlangNode { +export class YulStatement extends PolymorphicNode { readonly kind = NonterminalKind.YulStatement; variant: @@ -91,8 +90,4 @@ export class YulStatement extends SlangNode { this.updateMetadata(this.variant); } - - print(path: AstPath, print: PrintFunction): Doc { - return path.call(print, 'variant'); - } } diff --git a/src/slang-nodes/YulSwitchCase.ts b/src/slang-nodes/YulSwitchCase.ts index 366ca6d44..12fedd3fb 100644 --- a/src/slang-nodes/YulSwitchCase.ts +++ b/src/slang-nodes/YulSwitchCase.ts @@ -1,12 +1,11 @@ import * as ast from '@nomicfoundation/slang/ast'; import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { SlangNode } from './SlangNode.js'; +import { PolymorphicNode } from './PolymorphicNode.js'; import { YulDefaultCase } from './YulDefaultCase.js'; import { YulValueCase } from './YulValueCase.js'; -import type { AstPath, Doc, ParserOptions } from 'prettier'; +import type { ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -import type { PrintFunction } from '../types.d.ts'; function createNonterminalVariant( variant: ast.YulSwitchCase['variant'], @@ -22,7 +21,7 @@ function createNonterminalVariant( return exhaustiveCheck; } -export class YulSwitchCase extends SlangNode { +export class YulSwitchCase extends PolymorphicNode { readonly kind = NonterminalKind.YulSwitchCase; variant: YulDefaultCase | YulValueCase; @@ -34,8 +33,4 @@ export class YulSwitchCase extends SlangNode { this.updateMetadata(this.variant); } - - print(path: AstPath, print: PrintFunction): Doc { - return path.call(print, 'variant'); - } } diff --git a/src/slang-utils/sort-contract-specifiers.ts b/src/slang-utils/sort-contract-specifiers.ts index 7f0614b65..4188c1353 100644 --- a/src/slang-utils/sort-contract-specifiers.ts +++ b/src/slang-utils/sort-contract-specifiers.ts @@ -1,6 +1,6 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import type { ContractSpecifier } from '../slang-nodes/ContractSpecifier.js'; +import type { ContractSpecifier } from '../slang-nodes/ContractSpecifier.ts'; export function sortContractSpecifiers( { variant: { kind: aKind } }: ContractSpecifier,