UNPKG

prettier-plugin-solidity

Version:

A Prettier Plugin for automatically formatting your Solidity code.

55 lines 2.26 kB
import { isBlockComment } from './slang-utils/is-comment.js'; import { locEnd, locStart } from './slang-utils/loc.js'; function hasNodeIgnoreComment({ comments }) { // Prettier sets SourceUnit's comments to undefined after assigning comments // to each node. return comments === null || comments === void 0 ? void 0 : comments.some((comment) => comment.value .slice(2, isBlockComment(comment) ? -2 : undefined) .trim() === 'prettier-ignore'); } function ignoreComments(path) { const node = path.node; // We ignore anything that is not an object if (node === null || typeof node !== 'object') return; let key; for (key in node) { switch (key) { // We ignore `kind`, `loc`, and comments since these are added by the // parser case 'kind': case 'loc': case 'print': break; // The key `comments` will contain every comment for this node case 'comments': path.each((commentPath) => (commentPath.node.printed = true), key); break; default: // If the value for that key is an Array or an Object we go deeper. const childNode = node[key]; if (typeof childNode === 'object') { if (Array.isArray(childNode)) { path.each(ignoreComments, key); return; } path.call(ignoreComments, key); } } } } // Nodes take care of undefined and string properties so we can restrict path // to AstPath<StrictAstNode> function genericPrint(path, options, print) { const node = path.node; if (hasNodeIgnoreComment(node)) { ignoreComments(path); return options.originalText.slice(locStart(node), locEnd(node)); } // Since each node has a print function with a specific AstPath, the union of // all nodes into AstNode creates a print function with an AstPath of the // intersection of all nodes. This forces us to cast this with a never type. return node.print(path, print, options); } export default genericPrint; //# sourceMappingURL=slangPrinter.js.map