Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions src/slang-nodes/AbicoderPragma.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { NonterminalKind } from '@nomicfoundation/slang/cst';
import { SlangNode } from './SlangNode.js';
import { Identifier } from './Identifier.js';
import { TerminalNode } from './TerminalNode.js';

import type * as ast from '@nomicfoundation/slang/ast';
import type { AstPath, Doc } from 'prettier';
Expand All @@ -9,12 +9,12 @@ import type { PrintFunction } from '../types.d.ts';
export class AbicoderPragma extends SlangNode {
readonly kind = NonterminalKind.AbicoderPragma;

version: Identifier;
version: TerminalNode;

constructor(ast: ast.AbicoderPragma) {
super(ast);

this.version = new Identifier(ast.version);
this.version = new TerminalNode(ast.version);
}

print(path: AstPath<AbicoderPragma>, print: PrintFunction): Doc {
Expand Down
5 changes: 3 additions & 2 deletions src/slang-nodes/AssignmentExpression.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import { NonterminalKind, TerminalKind } from '@nomicfoundation/slang/cst';
import { NonterminalKind } from '@nomicfoundation/slang/cst';
import { isBinaryOperation } from '../slang-utils/is-binary-operation.js';
import { printIndentedGroupOrSpacedDocument } from '../slang-printers/print-indented-group-or-spaced-document.js';
import { SlangNode } from './SlangNode.js';
import { Expression } from './Expression.js';
import { TerminalNode } from './TerminalNode.js';

import type * as ast from '@nomicfoundation/slang/ast';
import type { AstPath, Doc, ParserOptions } from 'prettier';
Expand Down Expand Up @@ -35,7 +36,7 @@ export class AssignmentExpression extends SlangNode {
` ${this.operator}`,
printIndentedGroupOrSpacedDocument(
path.call(print, 'rightOperand'),
rightOperandVariant.kind !== TerminalKind.Identifier &&
!(rightOperandVariant instanceof TerminalNode) &&
isBinaryOperation(rightOperandVariant)
)
];
Expand Down
6 changes: 3 additions & 3 deletions src/slang-nodes/CatchClauseError.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { doc } from 'prettier';
import { NonterminalKind } from '@nomicfoundation/slang/cst';
import { SlangNode } from './SlangNode.js';
import { Identifier } from './Identifier.js';
import { TerminalNode } from './TerminalNode.js';
import { ParametersDeclaration } from './ParametersDeclaration.js';

import type * as ast from '@nomicfoundation/slang/ast';
Expand All @@ -14,15 +14,15 @@ const { group } = doc.builders;
export class CatchClauseError extends SlangNode {
readonly kind = NonterminalKind.CatchClauseError;

name?: Identifier;
name?: TerminalNode;

parameters: ParametersDeclaration;

constructor(ast: ast.CatchClauseError, options: ParserOptions<AstNode>) {
super(ast);

if (ast.name) {
this.name = new Identifier(ast.name);
this.name = new TerminalNode(ast.name);
}
this.parameters = new ParametersDeclaration(ast.parameters, options);

Expand Down
6 changes: 3 additions & 3 deletions src/slang-nodes/ConstantDefinition.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { NonterminalKind } from '@nomicfoundation/slang/cst';
import { SlangNode } from './SlangNode.js';
import { TypeName } from './TypeName.js';
import { Identifier } from './Identifier.js';
import { TerminalNode } from './TerminalNode.js';
import { Expression } from './Expression.js';

import type * as ast from '@nomicfoundation/slang/ast';
Expand All @@ -14,15 +14,15 @@ export class ConstantDefinition extends SlangNode {

typeName: TypeName;

name: Identifier;
name: TerminalNode;

value: Expression;

constructor(ast: ast.ConstantDefinition, options: ParserOptions<AstNode>) {
super(ast);

this.typeName = new TypeName(ast.typeName, options);
this.name = new Identifier(ast.name);
this.name = new TerminalNode(ast.name);
this.value = new Expression(ast.value, options);

this.updateMetadata(this.typeName, this.value);
Expand Down
15 changes: 9 additions & 6 deletions src/slang-nodes/ConstructorAttribute.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
import { NonterminalKind, TerminalNode } from '@nomicfoundation/slang/cst';
import { printVariant } from '../slang-printers/print-variant.js';
import {
NonterminalKind,
TerminalNode as SlangTerminalNode
} from '@nomicfoundation/slang/cst';
import { SlangNode } from './SlangNode.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';
Expand All @@ -11,14 +14,14 @@ import type { PrintFunction } from '../types.d.ts';
export class ConstructorAttribute extends SlangNode {
readonly kind = NonterminalKind.ConstructorAttribute;

variant: ModifierInvocation | string;
variant: ModifierInvocation | TerminalNode;

constructor(ast: ast.ConstructorAttribute, options: ParserOptions<AstNode>) {
super(ast);

const variant = ast.variant;
if (variant instanceof TerminalNode) {
this.variant = variant.unparse();
if (variant instanceof SlangTerminalNode) {
this.variant = new TerminalNode(variant);
return;
}
this.variant = new ModifierInvocation(variant, options);
Expand All @@ -27,6 +30,6 @@ export class ConstructorAttribute extends SlangNode {
}

print(path: AstPath<ConstructorAttribute>, print: PrintFunction): Doc {
return printVariant(this, path, print);
return path.call(print, 'variant');
}
}
6 changes: 3 additions & 3 deletions src/slang-nodes/ContractDefinition.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { doc } from 'prettier';
import { satisfies } from 'semver';
import { NonterminalKind } from '@nomicfoundation/slang/cst';
import { SlangNode } from './SlangNode.js';
import { Identifier } from './Identifier.js';
import { TerminalNode } from './TerminalNode.js';
import { ContractSpecifiers } from './ContractSpecifiers.js';
import { ContractMembers } from './ContractMembers.js';

Expand All @@ -18,7 +18,7 @@ export class ContractDefinition extends SlangNode {

abstractKeyword?: string;

name: Identifier;
name: TerminalNode;

specifiers: ContractSpecifiers;

Expand All @@ -28,7 +28,7 @@ export class ContractDefinition extends SlangNode {
super(ast);

this.abstractKeyword = ast.abstractKeyword?.unparse();
this.name = new Identifier(ast.name);
this.name = new TerminalNode(ast.name);
this.specifiers = new ContractSpecifiers(ast.specifiers, options);
this.members = new ContractMembers(ast.members, options);

Expand Down
15 changes: 9 additions & 6 deletions src/slang-nodes/ElementaryType.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
import { NonterminalKind, TerminalNode } from '@nomicfoundation/slang/cst';
import { printVariant } from '../slang-printers/print-variant.js';
import {
NonterminalKind,
TerminalNode as SlangTerminalNode
} from '@nomicfoundation/slang/cst';
import { SlangNode } from './SlangNode.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';
Expand All @@ -10,14 +13,14 @@ import type { PrintFunction } from '../types.d.ts';
export class ElementaryType extends SlangNode {
readonly kind = NonterminalKind.ElementaryType;

variant: AddressType | string;
variant: AddressType | TerminalNode;

constructor(ast: ast.ElementaryType) {
super(ast);

const variant = ast.variant;
if (variant instanceof TerminalNode) {
this.variant = variant.unparse();
if (variant instanceof SlangTerminalNode) {
this.variant = new TerminalNode(variant);
return;
}
this.variant = new AddressType(variant);
Expand All @@ -26,6 +29,6 @@ export class ElementaryType extends SlangNode {
}

print(path: AstPath<ElementaryType>, print: PrintFunction): Doc {
return printVariant(this, path, print);
return path.call(print, 'variant');
}
}
6 changes: 3 additions & 3 deletions src/slang-nodes/EnumDefinition.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { NonterminalKind } from '@nomicfoundation/slang/cst';
import { SlangNode } from './SlangNode.js';
import { Identifier } from './Identifier.js';
import { TerminalNode } from './TerminalNode.js';
import { EnumMembers } from './EnumMembers.js';

import type * as ast from '@nomicfoundation/slang/ast';
Expand All @@ -10,14 +10,14 @@ import type { PrintFunction } from '../types.d.ts';
export class EnumDefinition extends SlangNode {
readonly kind = NonterminalKind.EnumDefinition;

name: Identifier;
name: TerminalNode;

members: EnumMembers;

constructor(ast: ast.EnumDefinition) {
super(ast);

this.name = new Identifier(ast.name);
this.name = new TerminalNode(ast.name);
this.members = new EnumMembers(ast.members);

this.updateMetadata(this.members);
Expand Down
6 changes: 3 additions & 3 deletions src/slang-nodes/EnumMembers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { doc } from 'prettier';
import { NonterminalKind } from '@nomicfoundation/slang/cst';
import { printSeparatedList } from '../slang-printers/print-separated-list.js';
import { SlangNode } from './SlangNode.js';
import { Identifier } from './Identifier.js';
import { TerminalNode } from './TerminalNode.js';

import type * as ast from '@nomicfoundation/slang/ast';
import type { AstPath, Doc } from 'prettier';
Expand All @@ -13,12 +13,12 @@ const { hardline } = doc.builders;
export class EnumMembers extends SlangNode {
readonly kind = NonterminalKind.EnumMembers;

items: Identifier[];
items: TerminalNode[];

constructor(ast: ast.EnumMembers) {
super(ast, true);

this.items = ast.items.map((item) => new Identifier(item));
this.items = ast.items.map((item) => new TerminalNode(item));
}

print(path: AstPath<EnumMembers>, print: PrintFunction): Doc {
Expand Down
6 changes: 3 additions & 3 deletions src/slang-nodes/ErrorDefinition.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { NonterminalKind } from '@nomicfoundation/slang/cst';
import { SlangNode } from './SlangNode.js';
import { Identifier } from './Identifier.js';
import { TerminalNode } from './TerminalNode.js';
import { ErrorParametersDeclaration } from './ErrorParametersDeclaration.js';

import type * as ast from '@nomicfoundation/slang/ast';
Expand All @@ -11,14 +11,14 @@ import type { PrintFunction } from '../types.d.ts';
export class ErrorDefinition extends SlangNode {
readonly kind = NonterminalKind.ErrorDefinition;

name: Identifier;
name: TerminalNode;

members: ErrorParametersDeclaration;

constructor(ast: ast.ErrorDefinition, options: ParserOptions<AstNode>) {
super(ast);

this.name = new Identifier(ast.name);
this.name = new TerminalNode(ast.name);
this.members = new ErrorParametersDeclaration(ast.members, options);

this.updateMetadata(this.members);
Expand Down
6 changes: 3 additions & 3 deletions src/slang-nodes/ErrorParameter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst';
import { joinExisting } from '../slang-utils/join-existing.js';
import { SlangNode } from './SlangNode.js';
import { TypeName } from './TypeName.js';
import { Identifier } from './Identifier.js';
import { TerminalNode } from './TerminalNode.js';

import type * as ast from '@nomicfoundation/slang/ast';
import type { AstPath, Doc, ParserOptions } from 'prettier';
Expand All @@ -14,14 +14,14 @@ export class ErrorParameter extends SlangNode {

typeName: TypeName;

name?: Identifier;
name?: TerminalNode;

constructor(ast: ast.ErrorParameter, options: ParserOptions<AstNode>) {
super(ast);

this.typeName = new TypeName(ast.typeName, options);
if (ast.name) {
this.name = new Identifier(ast.name);
this.name = new TerminalNode(ast.name);
}

this.updateMetadata(this.typeName);
Expand Down
6 changes: 3 additions & 3 deletions src/slang-nodes/EventDefinition.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { NonterminalKind } from '@nomicfoundation/slang/cst';
import { SlangNode } from './SlangNode.js';
import { EventParametersDeclaration } from './EventParametersDeclaration.js';
import { Identifier } from './Identifier.js';
import { TerminalNode } from './TerminalNode.js';

import type * as ast from '@nomicfoundation/slang/ast';
import type { AstPath, Doc, ParserOptions } from 'prettier';
Expand All @@ -11,7 +11,7 @@ import type { PrintFunction } from '../types.d.ts';
export class EventDefinition extends SlangNode {
readonly kind = NonterminalKind.EventDefinition;

name: Identifier;
name: TerminalNode;

parameters: EventParametersDeclaration;

Expand All @@ -20,7 +20,7 @@ export class EventDefinition extends SlangNode {
constructor(ast: ast.EventDefinition, options: ParserOptions<AstNode>) {
super(ast);

this.name = new Identifier(ast.name);
this.name = new TerminalNode(ast.name);
this.parameters = new EventParametersDeclaration(ast.parameters, options);
this.anonymousKeyword = ast.anonymousKeyword?.unparse();

Expand Down
6 changes: 3 additions & 3 deletions src/slang-nodes/EventParameter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst';
import { joinExisting } from '../slang-utils/join-existing.js';
import { SlangNode } from './SlangNode.js';
import { TypeName } from './TypeName.js';
import { Identifier } from './Identifier.js';
import { TerminalNode } from './TerminalNode.js';

import type * as ast from '@nomicfoundation/slang/ast';
import type { AstPath, Doc, ParserOptions } from 'prettier';
Expand All @@ -16,15 +16,15 @@ export class EventParameter extends SlangNode {

indexedKeyword?: string;

name?: Identifier;
name?: TerminalNode;

constructor(ast: ast.EventParameter, options: ParserOptions<AstNode>) {
super(ast);

this.typeName = new TypeName(ast.typeName, options);
this.indexedKeyword = ast.indexedKeyword?.unparse();
if (ast.name) {
this.name = new Identifier(ast.name);
this.name = new TerminalNode(ast.name);
}

this.updateMetadata(this.typeName);
Expand Down
13 changes: 8 additions & 5 deletions src/slang-nodes/ExperimentalFeature.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
import { NonterminalKind, TerminalNode } from '@nomicfoundation/slang/cst';
import {
NonterminalKind,
TerminalNode as SlangTerminalNode
} from '@nomicfoundation/slang/cst';
import { SlangNode } from './SlangNode.js';
import { StringLiteral } from './StringLiteral.js';
import { Identifier } from './Identifier.js';
import { TerminalNode } from './TerminalNode.js';

import type * as ast from '@nomicfoundation/slang/ast';
import type { AstPath, Doc, ParserOptions } from 'prettier';
Expand All @@ -11,14 +14,14 @@ import type { PrintFunction } from '../types.d.ts';
export class ExperimentalFeature extends SlangNode {
readonly kind = NonterminalKind.ExperimentalFeature;

variant: StringLiteral | Identifier;
variant: StringLiteral | TerminalNode;

constructor(ast: ast.ExperimentalFeature, options: ParserOptions<AstNode>) {
super(ast);

const variant = ast.variant;
if (variant instanceof TerminalNode) {
this.variant = new Identifier(variant);
if (variant instanceof SlangTerminalNode) {
this.variant = new TerminalNode(variant);
return;
}
this.variant = new StringLiteral(variant, options);
Expand Down
Loading
Loading