prettier-plugin-solidity
Version:
A Prettier Plugin for automatically formatting your Solidity code.
72 lines (64 loc) • 2.63 kB
text/typescript
import * as ast from '@nomicfoundation/slang/ast';
import { NonterminalKind } from '@nomicfoundation/slang/cst';
import { createNonterminalVariantSimpleCreator } from '../slang-utils/create-nonterminal-variant-creator.js';
import { SlangNode } from './SlangNode.js';
import { PragmaDirective } from './PragmaDirective.js';
import { ImportDirective } from './ImportDirective.js';
import { ContractDefinition } from './ContractDefinition.js';
import { InterfaceDefinition } from './InterfaceDefinition.js';
import { LibraryDefinition } from './LibraryDefinition.js';
import { StructDefinition } from './StructDefinition.js';
import { EnumDefinition } from './EnumDefinition.js';
import { FunctionDefinition } from './FunctionDefinition.js';
import { ConstantDefinition } from './ConstantDefinition.js';
import { ErrorDefinition } from './ErrorDefinition.js';
import { UserDefinedValueTypeDefinition } from './UserDefinedValueTypeDefinition.js';
import { UsingDirective } from './UsingDirective.js';
import { EventDefinition } from './EventDefinition.js';
import type { ParserOptions } from 'prettier';
import type { CollectedMetadata } from '../types.d.ts';
import type { AstNode } from './types.d.ts';
const createNonterminalVariant = createNonterminalVariantSimpleCreator<
ast.SourceUnitMember,
SourceUnitMember
>([
[ast.PragmaDirective, PragmaDirective],
[ast.ImportDirective, ImportDirective],
[ast.ContractDefinition, ContractDefinition],
[ast.InterfaceDefinition, InterfaceDefinition],
[ast.LibraryDefinition, LibraryDefinition],
[ast.StructDefinition, StructDefinition],
[ast.EnumDefinition, EnumDefinition],
[ast.FunctionDefinition, FunctionDefinition],
[ast.ConstantDefinition, ConstantDefinition],
[ast.ErrorDefinition, ErrorDefinition],
[ast.UserDefinedValueTypeDefinition, UserDefinedValueTypeDefinition],
[ast.UsingDirective, UsingDirective],
[ast.EventDefinition, EventDefinition]
]);
export class SourceUnitMember extends SlangNode {
readonly kind = NonterminalKind.SourceUnitMember;
variant:
| PragmaDirective
| ImportDirective
| ContractDefinition
| InterfaceDefinition
| LibraryDefinition
| StructDefinition
| EnumDefinition
| FunctionDefinition
| ConstantDefinition
| ErrorDefinition
| UserDefinedValueTypeDefinition
| UsingDirective
| EventDefinition;
constructor(
ast: ast.SourceUnitMember,
collected: CollectedMetadata,
options: ParserOptions<AstNode>
) {
super(ast, collected);
this.variant = createNonterminalVariant(ast.variant, collected, options);
this.updateMetadata(this.variant);
}
}