Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | 56x 56x 3169x 3169x 3169x 565x 2604x 3169x 3169x 3169x 3574x 3574x 2809x 2099x 710x 405x 56x 6100x 3169x 3169x 3169x 3169x 3169x | const { doc: { builders: { group, line, indent } } } = require('prettier'); const comparison = require('./comparison'); const groupIfNecessaryBuilder = (path) => (doc) => { const parentNode = path.getParentNode(); if ( parentNode.type === 'BinaryOperation' && !comparison.match(parentNode.operator) ) { return doc; } return group(doc); }; const indentIfNecessaryBuilder = (path) => (doc) => { let node = path.getNode(); for (let i = 0; ; i += 1) { const parentNode = path.getParentNode(i); if (parentNode.type === 'ReturnStatement') return doc; if ( parentNode.type !== 'BinaryOperation' || comparison.match(parentNode.operator) ) { return indent(doc); } if (node === parentNode.right) return doc; node = parentNode; } }; module.exports = { match: (op) => ['+', '-', '*', '/', '%'].includes(op), print: (node, path, print) => { const groupIfNecessary = groupIfNecessaryBuilder(path); const indentIfNecessary = indentIfNecessaryBuilder(path); const right = [node.operator, line, path.call(print, 'right')]; // If it's a single binary operation, avoid having a small right // operand like - 1 on its own line const shouldGroup = node.left.type !== 'BinaryOperation' && path.getParentNode().type !== 'BinaryOperation'; return groupIfNecessary([ path.call(print, 'left'), ' ', indentIfNecessary(shouldGroup ? group(right) : right) ]); } }; |