UNPKG

prettier-plugin-solidity

Version:

A Prettier Plugin for automatically formatting your Solidity code.

51 lines 1.86 kB
import { doc } from 'prettier'; import { printComments, printPreservingEmptyLines, printSeparatedItem, printSeparatedList } from '../common/printer-helpers.js'; const { group, hardline, ifBreak, line, softline } = doc.builders; const specifiers = (node, path, print) => { const document = []; if (node.baseContracts.length > 0) { document.push([ 'is', printSeparatedList(path.map(print, 'baseContracts'), { firstSeparator: line }) ]); } if (node.storageLayout) { document.push([ 'layout at', printSeparatedItem(path.call(print, 'storageLayout'), { firstSeparator: line }) ]); } if (document.length === 0) return line; if (document.length === 1) return [' ', document]; const groupId = Symbol('ContractSpecifiers.inheritance'); return printSeparatedList([group(document[0], { id: groupId }), document[1]], { firstSeparator: line, separator: ifBreak('', softline, { groupId }) }); }; const body = (node, path, options, print) => { const comments = printComments(node, path, options); return node.subNodes.length > 0 || (comments === null || comments === void 0 ? void 0 : comments.length) ? printSeparatedItem([printPreservingEmptyLines(path, 'subNodes', options, print), comments], { firstSeparator: hardline, grouped: false }) : ''; }; export const ContractDefinition = { print: ({ node, options, path, print }) => [ group([ node.kind === 'abstract' ? 'abstract contract' : node.kind, ' ', node.name, specifiers(node, path, print), '{' ]), body(node, path, options, print), '}' ] }; //# sourceMappingURL=ContractDefinition.js.map