UNPKG

prettier-plugin-solidity

Version:

A Prettier Plugin for automatically formatting your Solidity code.

47 lines 1.99 kB
import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { doc } from 'prettier'; import { printSeparatedList } from '../slang-printers/print-separated-list.js'; import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js'; import { ForStatementInitialization } from './ForStatementInitialization.js'; import { ForStatementCondition } from './ForStatementCondition.js'; import { Expression } from './Expression.js'; import { Statement } from './Statement.js'; const { group, indent, line } = doc.builders; export class ForStatement { constructor(ast, options) { this.kind = NonterminalKind.ForStatement; let metadata = getNodeMetadata(ast); this.initialization = new ForStatementInitialization(ast.initialization, options); this.condition = new ForStatementCondition(ast.condition, options); if (ast.iterator) { this.iterator = new Expression(ast.iterator, options); } this.body = new Statement(ast.body, options); metadata = updateMetadata(metadata, [ this.initialization, this.condition, this.iterator, this.body ]); this.comments = metadata.comments; this.loc = metadata.loc; } print(path, print) { const initialization = path.call(print, 'initialization'); const condition = path.call(print, 'condition'); const iterator = path.call(print, 'iterator'); return [ 'for (', printSeparatedList([initialization, condition, iterator], { separator: initialization !== ';' || condition !== ';' || iterator !== '' ? line : '' }), ')', this.body.variant.kind === NonterminalKind.Block ? [' ', path.call(print, 'body')] : group(indent([line, path.call(print, 'body')])) ]; } } //# sourceMappingURL=ForStatement.js.map