prettier-plugin-solidity
Version:
A Prettier Plugin for automatically formatting your Solidity code.
41 lines • 1.69 kB
JavaScript
import { NonterminalKind } from '@nomicfoundation/slang/cst';
import { doc } from 'prettier';
import { createBinaryOperationPrinter } from './create-binary-operation-printer.js';
import { createKindCheckFunction } from '../slang-utils/create-kind-check-function.js';
const { group, indent } = doc.builders;
const isBinaryOperationWithoutComparison = createKindCheckFunction([
NonterminalKind.AdditiveExpression,
NonterminalKind.MultiplicativeExpression,
NonterminalKind.ExponentiationExpression,
NonterminalKind.AssignmentExpression,
NonterminalKind.BitwiseAndExpression,
NonterminalKind.BitwiseOrExpression,
NonterminalKind.BitwiseXorExpression,
NonterminalKind.AndExpression,
NonterminalKind.OrExpression,
NonterminalKind.ShiftExpression
]);
const binaryGroupRulesBuilder = (path) => (document) => {
const grandparentNode = path.getNode(2);
if (isBinaryOperationWithoutComparison(grandparentNode)) {
return document;
}
return group(document);
};
const binaryIndentRulesBuilder = (path) => (document) => {
let node = path.getNode();
for (let i = 2;; i += 2) {
const grandparentNode = path.getNode(i);
if (grandparentNode.kind === NonterminalKind.ReturnStatement)
break;
if (!isBinaryOperationWithoutComparison(grandparentNode)) {
return indent(document);
}
if (node === grandparentNode.rightOperand.variant)
break;
node = grandparentNode;
}
return document;
};
export const printBinaryOperation = createBinaryOperationPrinter(binaryGroupRulesBuilder, binaryIndentRulesBuilder);
//# sourceMappingURL=print-binary-operation.js.map