UNPKG

prettier-plugin-solidity

Version:

A Prettier Plugin for automatically formatting your Solidity code.

133 lines 7.11 kB
import { NonterminalKind, TerminalKind, TerminalNode } from '@nomicfoundation/slang/cst'; import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; import { AssignmentExpression } from './AssignmentExpression.js'; import { ConditionalExpression } from './ConditionalExpression.js'; import { OrExpression } from './OrExpression.js'; import { AndExpression } from './AndExpression.js'; import { EqualityExpression } from './EqualityExpression.js'; import { InequalityExpression } from './InequalityExpression.js'; import { BitwiseOrExpression } from './BitwiseOrExpression.js'; import { BitwiseXorExpression } from './BitwiseXorExpression.js'; import { BitwiseAndExpression } from './BitwiseAndExpression.js'; import { ShiftExpression } from './ShiftExpression.js'; import { AdditiveExpression } from './AdditiveExpression.js'; import { MultiplicativeExpression } from './MultiplicativeExpression.js'; import { ExponentiationExpression } from './ExponentiationExpression.js'; import { PostfixExpression } from './PostfixExpression.js'; import { PrefixExpression } from './PrefixExpression.js'; import { FunctionCallExpression } from './FunctionCallExpression.js'; import { CallOptionsExpression } from './CallOptionsExpression.js'; import { MemberAccessExpression } from './MemberAccessExpression.js'; import { IndexAccessExpression } from './IndexAccessExpression.js'; import { NewExpression } from './NewExpression.js'; import { TupleExpression } from './TupleExpression.js'; import { TypeExpression } from './TypeExpression.js'; import { ArrayExpression } from './ArrayExpression.js'; import { HexNumberExpression } from './HexNumberExpression.js'; import { DecimalNumberExpression } from './DecimalNumberExpression.js'; import { StringExpression } from './StringExpression.js'; import { ElementaryType } from './ElementaryType.js'; import { Identifier } from './Identifier.js'; export class Expression { constructor(ast, options) { this.kind = NonterminalKind.Expression; let metadata = getNodeMetadata(ast); if (ast.variant instanceof TerminalNode) { this.variant = new Identifier(ast.variant); } else { switch (ast.variant.cst.kind) { case NonterminalKind.AssignmentExpression: this.variant = new AssignmentExpression(ast.variant, options); break; case NonterminalKind.ConditionalExpression: this.variant = new ConditionalExpression(ast.variant, options); break; case NonterminalKind.OrExpression: this.variant = new OrExpression(ast.variant, options); break; case NonterminalKind.AndExpression: this.variant = new AndExpression(ast.variant, options); break; case NonterminalKind.EqualityExpression: this.variant = new EqualityExpression(ast.variant, options); break; case NonterminalKind.InequalityExpression: this.variant = new InequalityExpression(ast.variant, options); break; case NonterminalKind.BitwiseOrExpression: this.variant = new BitwiseOrExpression(ast.variant, options); break; case NonterminalKind.BitwiseXorExpression: this.variant = new BitwiseXorExpression(ast.variant, options); break; case NonterminalKind.BitwiseAndExpression: this.variant = new BitwiseAndExpression(ast.variant, options); break; case NonterminalKind.ShiftExpression: this.variant = new ShiftExpression(ast.variant, options); break; case NonterminalKind.AdditiveExpression: this.variant = new AdditiveExpression(ast.variant, options); break; case NonterminalKind.MultiplicativeExpression: this.variant = new MultiplicativeExpression(ast.variant, options); break; case NonterminalKind.ExponentiationExpression: this.variant = new ExponentiationExpression(ast.variant, options); break; case NonterminalKind.PostfixExpression: this.variant = new PostfixExpression(ast.variant, options); break; case NonterminalKind.PrefixExpression: this.variant = new PrefixExpression(ast.variant, options); break; case NonterminalKind.FunctionCallExpression: this.variant = new FunctionCallExpression(ast.variant, options); break; case NonterminalKind.CallOptionsExpression: this.variant = new CallOptionsExpression(ast.variant, options); break; case NonterminalKind.MemberAccessExpression: this.variant = new MemberAccessExpression(ast.variant, options); break; case NonterminalKind.IndexAccessExpression: this.variant = new IndexAccessExpression(ast.variant, options); break; case NonterminalKind.NewExpression: this.variant = new NewExpression(ast.variant, options); break; case NonterminalKind.TupleExpression: this.variant = new TupleExpression(ast.variant, options); break; case NonterminalKind.TypeExpression: this.variant = new TypeExpression(ast.variant, options); break; case NonterminalKind.ArrayExpression: this.variant = new ArrayExpression(ast.variant, options); break; case NonterminalKind.HexNumberExpression: this.variant = new HexNumberExpression(ast.variant); break; case NonterminalKind.DecimalNumberExpression: this.variant = new DecimalNumberExpression(ast.variant); break; case NonterminalKind.StringExpression: this.variant = new StringExpression(ast.variant, options); break; case NonterminalKind.ElementaryType: this.variant = new ElementaryType(ast.variant); break; default: throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`); } } metadata = updateMetadata(metadata, this.variant.kind === TerminalKind.Identifier ? [] : [this.variant]); this.comments = metadata.comments; this.loc = metadata.loc; } print(path, print) { return path.call(print, 'variant'); } } //# sourceMappingURL=Expression.js.map