diff --git a/src/slang-nodes/ArrayValues.ts b/src/slang-nodes/ArrayValues.ts index 693c095eb..bd93d6c03 100644 --- a/src/slang-nodes/ArrayValues.ts +++ b/src/slang-nodes/ArrayValues.ts @@ -17,13 +17,10 @@ export class ArrayValues implements SlangNode { items: Expression[]; - separators: string[]; - constructor(ast: ast.ArrayValues, options: ParserOptions) { let metadata = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new Expression(item, options)); - this.separators = ast.separators.map((separator) => separator.unparse()); metadata = updateMetadata(metadata, [this.items]); diff --git a/src/slang-nodes/AssemblyFlags.ts b/src/slang-nodes/AssemblyFlags.ts index dfbf4e10e..bd0a75982 100644 --- a/src/slang-nodes/AssemblyFlags.ts +++ b/src/slang-nodes/AssemblyFlags.ts @@ -17,13 +17,10 @@ export class AssemblyFlags implements SlangNode { items: StringLiteral[]; - separators: string[]; - constructor(ast: ast.AssemblyFlags, options: ParserOptions) { let metadata = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new StringLiteral(item, options)); - this.separators = ast.separators.map((separator) => separator.unparse()); metadata = updateMetadata(metadata, [this.items]); diff --git a/src/slang-nodes/CallOptions.ts b/src/slang-nodes/CallOptions.ts index 79a79fa62..6b2389b16 100644 --- a/src/slang-nodes/CallOptions.ts +++ b/src/slang-nodes/CallOptions.ts @@ -20,13 +20,10 @@ export class CallOptions implements SlangNode { items: NamedArgument[]; - separators: string[]; - constructor(ast: ast.CallOptions, options: ParserOptions) { let metadata = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new NamedArgument(item, options)); - this.separators = ast.separators.map((separator) => separator.unparse()); metadata = updateMetadata(metadata, [this.items]); diff --git a/src/slang-nodes/EnumMembers.ts b/src/slang-nodes/EnumMembers.ts index b481a084e..81dcdf3bd 100644 --- a/src/slang-nodes/EnumMembers.ts +++ b/src/slang-nodes/EnumMembers.ts @@ -19,13 +19,10 @@ export class EnumMembers implements SlangNode { items: Identifier[]; - separators: string[]; - constructor(ast: ast.EnumMembers) { const metadata = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new Identifier(item)); - this.separators = ast.separators.map((separator) => separator.unparse()); this.comments = metadata.comments; this.loc = metadata.loc; diff --git a/src/slang-nodes/ErrorParameters.ts b/src/slang-nodes/ErrorParameters.ts index 1f1afc239..701d7bfb5 100644 --- a/src/slang-nodes/ErrorParameters.ts +++ b/src/slang-nodes/ErrorParameters.ts @@ -17,13 +17,10 @@ export class ErrorParameters implements SlangNode { items: ErrorParameter[]; - separators: string[]; - constructor(ast: ast.ErrorParameters, options: ParserOptions) { let metadata = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new ErrorParameter(item, options)); - this.separators = ast.separators.map((separator) => separator.unparse()); metadata = updateMetadata(metadata, [this.items]); diff --git a/src/slang-nodes/EventParameters.ts b/src/slang-nodes/EventParameters.ts index 2a9cebd0b..bcc303f32 100644 --- a/src/slang-nodes/EventParameters.ts +++ b/src/slang-nodes/EventParameters.ts @@ -17,13 +17,10 @@ export class EventParameters implements SlangNode { items: EventParameter[]; - separators: string[]; - constructor(ast: ast.EventParameters, options: ParserOptions) { let metadata = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new EventParameter(item, options)); - this.separators = ast.separators.map((separator) => separator.unparse()); metadata = updateMetadata(metadata, [this.items]); diff --git a/src/slang-nodes/IdentifierPath.ts b/src/slang-nodes/IdentifierPath.ts index 5142368d1..8bdbeb471 100644 --- a/src/slang-nodes/IdentifierPath.ts +++ b/src/slang-nodes/IdentifierPath.ts @@ -1,4 +1,5 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; +import { doc } from 'prettier'; import { getNodeMetadata } from '../slang-utils/metadata.js'; import { Identifier } from './Identifier.js'; @@ -6,6 +7,8 @@ import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc } from 'prettier'; import type { PrintFunction, SlangNode } from '../types.d.ts'; +const { join } = doc.builders; + export class IdentifierPath implements SlangNode { readonly kind = NonterminalKind.IdentifierPath; @@ -15,23 +18,16 @@ export class IdentifierPath implements SlangNode { items: Identifier[]; - separators: string[]; - constructor(ast: ast.IdentifierPath) { const metadata = getNodeMetadata(ast); this.items = ast.items.map((item) => new Identifier(item)); - this.separators = ast.separators.map((separator) => separator.unparse()); this.comments = metadata.comments; this.loc = metadata.loc; } print(path: AstPath, print: PrintFunction): Doc { - return path - .map(print, 'items') - .map((item, index) => - index === 0 ? item : [this.separators[index - 1], item] - ); + return join('.', path.map(print, 'items')); } } diff --git a/src/slang-nodes/ImportDeconstructionSymbols.ts b/src/slang-nodes/ImportDeconstructionSymbols.ts index 10f271afc..15ea756bf 100644 --- a/src/slang-nodes/ImportDeconstructionSymbols.ts +++ b/src/slang-nodes/ImportDeconstructionSymbols.ts @@ -21,13 +21,10 @@ export class ImportDeconstructionSymbols implements SlangNode { items: ImportDeconstructionSymbol[]; - separators: string[]; - constructor(ast: ast.ImportDeconstructionSymbols) { let metadata = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new ImportDeconstructionSymbol(item)); - this.separators = ast.separators.map((separator) => separator.unparse()); metadata = updateMetadata(metadata, [this.items]); diff --git a/src/slang-nodes/InheritanceTypes.ts b/src/slang-nodes/InheritanceTypes.ts index 121991db8..55b7ad671 100644 --- a/src/slang-nodes/InheritanceTypes.ts +++ b/src/slang-nodes/InheritanceTypes.ts @@ -20,13 +20,10 @@ export class InheritanceTypes implements SlangNode { items: InheritanceType[]; - separators: string[]; - constructor(ast: ast.InheritanceTypes, options: ParserOptions) { let metadata = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new InheritanceType(item, options)); - this.separators = ast.separators.map((separator) => separator.unparse()); metadata = updateMetadata(metadata, [this.items]); diff --git a/src/slang-nodes/ModifierDefinition.ts b/src/slang-nodes/ModifierDefinition.ts index 4c1a20ad0..fbbde68d1 100644 --- a/src/slang-nodes/ModifierDefinition.ts +++ b/src/slang-nodes/ModifierDefinition.ts @@ -68,8 +68,7 @@ export class ModifierDefinition implements SlangNode { kind: NonterminalKind.Parameters, loc: { ...parametersLoc }, comments: [], - items: [], - separators: [] + items: [] } ) } diff --git a/src/slang-nodes/NamedArguments.ts b/src/slang-nodes/NamedArguments.ts index cc87cd11b..085ad79db 100644 --- a/src/slang-nodes/NamedArguments.ts +++ b/src/slang-nodes/NamedArguments.ts @@ -20,13 +20,10 @@ export class NamedArguments implements SlangNode { items: NamedArgument[]; - separators: string[]; - constructor(ast: ast.NamedArguments, options: ParserOptions) { let metadata = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new NamedArgument(item, options)); - this.separators = ast.separators.map((separator) => separator.unparse()); metadata = updateMetadata(metadata, [this.items]); diff --git a/src/slang-nodes/OverridePaths.ts b/src/slang-nodes/OverridePaths.ts index 2617bb7e4..17cf2b55c 100644 --- a/src/slang-nodes/OverridePaths.ts +++ b/src/slang-nodes/OverridePaths.ts @@ -16,13 +16,10 @@ export class OverridePaths implements SlangNode { items: IdentifierPath[]; - separators: string[]; - constructor(ast: ast.OverridePaths) { let metadata = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new IdentifierPath(item)); - this.separators = ast.separators.map((separator) => separator.unparse()); metadata = updateMetadata(metadata, [this.items]); diff --git a/src/slang-nodes/Parameters.ts b/src/slang-nodes/Parameters.ts index bf82f7bc5..743e747db 100644 --- a/src/slang-nodes/Parameters.ts +++ b/src/slang-nodes/Parameters.ts @@ -19,13 +19,10 @@ export class Parameters implements SlangNode { items: Parameter[]; - separators: string[]; - constructor(ast: ast.Parameters, options: ParserOptions) { let metadata = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new Parameter(item, options)); - this.separators = ast.separators.map((separator) => separator.unparse()); metadata = updateMetadata(metadata, [this.items]); diff --git a/src/slang-nodes/PositionalArguments.ts b/src/slang-nodes/PositionalArguments.ts index 414b51b85..2fde87591 100644 --- a/src/slang-nodes/PositionalArguments.ts +++ b/src/slang-nodes/PositionalArguments.ts @@ -19,13 +19,10 @@ export class PositionalArguments implements SlangNode { items: Expression[]; - separators: string[]; - constructor(ast: ast.PositionalArguments, options: ParserOptions) { let metadata = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new Expression(item, options)); - this.separators = ast.separators.map((separator) => separator.unparse()); metadata = updateMetadata(metadata, [this.items]); diff --git a/src/slang-nodes/SimpleVersionLiteral.ts b/src/slang-nodes/SimpleVersionLiteral.ts index 78235d6da..cff068b35 100644 --- a/src/slang-nodes/SimpleVersionLiteral.ts +++ b/src/slang-nodes/SimpleVersionLiteral.ts @@ -14,21 +14,16 @@ export class SimpleVersionLiteral implements SlangNode { items: string[]; - separators: string[]; - constructor(ast: ast.SimpleVersionLiteral) { const metadata = getNodeMetadata(ast, true); this.items = ast.items.map((item) => item.unparse()); - this.separators = ast.separators.map((separator) => separator.unparse()); this.comments = metadata.comments; this.loc = metadata.loc; } print(): Doc { - return this.items.map((item, index) => - index === 0 ? item : [this.separators[index - 1], item] - ); + return this.items.join('.'); } } diff --git a/src/slang-nodes/TupleDeconstructionElements.ts b/src/slang-nodes/TupleDeconstructionElements.ts index 695fef89b..113a6908a 100644 --- a/src/slang-nodes/TupleDeconstructionElements.ts +++ b/src/slang-nodes/TupleDeconstructionElements.ts @@ -17,8 +17,6 @@ export class TupleDeconstructionElements implements SlangNode { items: TupleDeconstructionElement[]; - separators: string[]; - constructor( ast: ast.TupleDeconstructionElements, options: ParserOptions @@ -28,7 +26,6 @@ export class TupleDeconstructionElements implements SlangNode { this.items = ast.items.map( (item) => new TupleDeconstructionElement(item, options) ); - this.separators = ast.separators.map((separator) => separator.unparse()); metadata = updateMetadata(metadata, [this.items]); diff --git a/src/slang-nodes/TupleValues.ts b/src/slang-nodes/TupleValues.ts index e2e37cdcf..fd8a153d1 100644 --- a/src/slang-nodes/TupleValues.ts +++ b/src/slang-nodes/TupleValues.ts @@ -18,13 +18,10 @@ export class TupleValues implements SlangNode { items: TupleValue[]; - separators: string[]; - constructor(ast: ast.TupleValues, options: ParserOptions) { let metadata = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new TupleValue(item, options)); - this.separators = ast.separators.map((separator) => separator.unparse()); metadata = updateMetadata(metadata, [this.items]); diff --git a/src/slang-nodes/UsingDeconstructionSymbols.ts b/src/slang-nodes/UsingDeconstructionSymbols.ts index 9db9bb467..a89f7fe8c 100644 --- a/src/slang-nodes/UsingDeconstructionSymbols.ts +++ b/src/slang-nodes/UsingDeconstructionSymbols.ts @@ -20,13 +20,10 @@ export class UsingDeconstructionSymbols implements SlangNode { items: UsingDeconstructionSymbol[]; - separators: string[]; - constructor(ast: ast.UsingDeconstructionSymbols) { let metadata = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new UsingDeconstructionSymbol(item)); - this.separators = ast.separators.map((separator) => separator.unparse()); metadata = updateMetadata(metadata, [this.items]); diff --git a/src/slang-nodes/VersionExpressionSets.ts b/src/slang-nodes/VersionExpressionSets.ts index 81eabcff6..fb16282d0 100644 --- a/src/slang-nodes/VersionExpressionSets.ts +++ b/src/slang-nodes/VersionExpressionSets.ts @@ -1,4 +1,5 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; +import { doc } from 'prettier'; import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; import { VersionExpressionSet } from './VersionExpressionSet.js'; @@ -6,6 +7,8 @@ import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc } from 'prettier'; import type { PrintFunction, SlangNode } from '../types.d.ts'; +const { join } = doc.builders; + export class VersionExpressionSets implements SlangNode { readonly kind = NonterminalKind.VersionExpressionSets; @@ -15,13 +18,10 @@ export class VersionExpressionSets implements SlangNode { items: VersionExpressionSet[]; - separators: string[]; - constructor(ast: ast.VersionExpressionSets) { let metadata = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new VersionExpressionSet(item)); - this.separators = ast.separators.map((separator) => separator.unparse()); metadata = updateMetadata(metadata, [this.items]); @@ -30,10 +30,6 @@ export class VersionExpressionSets implements SlangNode { } print(path: AstPath, print: PrintFunction): Doc { - return path - .map(print, 'items') - .map((item, index) => - index === 0 ? item : [` ${this.separators[index - 1]} `, item] - ); + return join(' || ', path.map(print, 'items')); } } diff --git a/src/slang-nodes/YulArguments.ts b/src/slang-nodes/YulArguments.ts index 21cf6d8a5..82a61a94c 100644 --- a/src/slang-nodes/YulArguments.ts +++ b/src/slang-nodes/YulArguments.ts @@ -17,13 +17,10 @@ export class YulArguments implements SlangNode { items: YulExpression[]; - separators: string[]; - constructor(ast: ast.YulArguments, options: ParserOptions) { let metadata = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new YulExpression(item, options)); - this.separators = ast.separators.map((separator) => separator.unparse()); metadata = updateMetadata(metadata, [this.items]); diff --git a/src/slang-nodes/YulParameters.ts b/src/slang-nodes/YulParameters.ts index f5e68860e..703950f32 100644 --- a/src/slang-nodes/YulParameters.ts +++ b/src/slang-nodes/YulParameters.ts @@ -16,13 +16,10 @@ export class YulParameters implements SlangNode { items: YulIdentifier[]; - separators: string[]; - constructor(ast: ast.YulParameters) { const metadata = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new YulIdentifier(item)); - this.separators = ast.separators.map((separator) => separator.unparse()); this.comments = metadata.comments; this.loc = metadata.loc; diff --git a/src/slang-nodes/YulPath.ts b/src/slang-nodes/YulPath.ts index badbc830b..a24cb49fb 100644 --- a/src/slang-nodes/YulPath.ts +++ b/src/slang-nodes/YulPath.ts @@ -1,4 +1,5 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; +import { doc } from 'prettier'; import { getNodeMetadata } from '../slang-utils/metadata.js'; import { YulIdentifier } from './YulIdentifier.js'; @@ -6,6 +7,8 @@ import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc } from 'prettier'; import type { PrintFunction, SlangNode } from '../types.d.ts'; +const { join } = doc.builders; + export class YulPath implements SlangNode { readonly kind = NonterminalKind.YulPath; @@ -15,23 +18,16 @@ export class YulPath implements SlangNode { items: YulIdentifier[]; - separators: string[]; - constructor(ast: ast.YulPath) { const metadata = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new YulIdentifier(item)); - this.separators = ast.separators.map((separator) => separator.unparse()); this.comments = metadata.comments; this.loc = metadata.loc; } print(path: AstPath, print: PrintFunction): Doc { - return path - .map(print, 'items') - .map((item, index) => - index === 0 ? item : [this.separators[index - 1], item] - ); + return join('.', path.map(print, 'items')); } } diff --git a/src/slang-nodes/YulPaths.ts b/src/slang-nodes/YulPaths.ts index bebe82147..50d463039 100644 --- a/src/slang-nodes/YulPaths.ts +++ b/src/slang-nodes/YulPaths.ts @@ -1,4 +1,5 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; +import { doc } from 'prettier'; import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; import { YulPath } from './YulPath.js'; @@ -6,6 +7,8 @@ import type * as ast from '@nomicfoundation/slang/ast'; import type { AstPath, Doc } from 'prettier'; import type { PrintFunction, SlangNode } from '../types.d.ts'; +const { join } = doc.builders; + export class YulPaths implements SlangNode { readonly kind = NonterminalKind.YulPaths; @@ -15,13 +18,10 @@ export class YulPaths implements SlangNode { items: YulPath[]; - separators: string[]; - constructor(ast: ast.YulPaths) { let metadata = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new YulPath(item)); - this.separators = ast.separators.map((separator) => separator.unparse()); metadata = updateMetadata(metadata, [this.items]); @@ -30,10 +30,6 @@ export class YulPaths implements SlangNode { } print(path: AstPath, print: PrintFunction): Doc { - return path - .map(print, 'items') - .map((item, index) => - index === 0 ? item : [this.separators[index - 1], item] - ); + return join(', ', path.map(print, 'items')); } } diff --git a/src/slang-nodes/YulVariableNames.ts b/src/slang-nodes/YulVariableNames.ts index 96b84571f..9e7ac521b 100644 --- a/src/slang-nodes/YulVariableNames.ts +++ b/src/slang-nodes/YulVariableNames.ts @@ -19,13 +19,10 @@ export class YulVariableNames implements SlangNode { items: YulIdentifier[]; - separators: string[]; - constructor(ast: ast.YulVariableNames) { const metadata = getNodeMetadata(ast, true); this.items = ast.items.map((item) => new YulIdentifier(item)); - this.separators = ast.separators.map((separator) => separator.unparse()); this.comments = metadata.comments; this.loc = metadata.loc; diff --git a/src/slang-utils/create-hug-function.ts b/src/slang-utils/create-hug-function.ts index 45dfa556c..7e316550d 100644 --- a/src/slang-utils/create-hug-function.ts +++ b/src/slang-utils/create-hug-function.ts @@ -43,8 +43,7 @@ export function createHugFunction( expression: node } ) - ], - separators: [] + ] } ) }