prettier-plugin-solidity
Version:
A Prettier Plugin for automatically formatting your Solidity code.
44 lines • 1.49 kB
JavaScript
import { NonterminalKind } from '@nomicfoundation/slang/cst';
const visibilityKeyWords = new Set([
'external',
'internal',
'public',
'private'
]);
const mutabilityKeyWords = new Set(['pure', 'constant', 'payable', 'view']);
export function sortFunctionAttributes(a, b) {
const aVariant = a.variant;
const bVariant = b.variant;
const aIsString = typeof aVariant === 'string';
const bIsString = typeof bVariant === 'string';
if (aIsString && !bIsString)
return -1;
if (bIsString && !aIsString)
return 1;
// Both are strings
if (aIsString && bIsString) {
// Visibility First
if (visibilityKeyWords.has(aVariant))
return -1;
if (visibilityKeyWords.has(bVariant))
return 1;
// State Mutability Second
if (mutabilityKeyWords.has(aVariant))
return -1;
if (mutabilityKeyWords.has(bVariant))
return 1;
// Virtual keyword last
}
// Both are nodes
if (!aIsString && !bIsString) {
// OverrideSpecifiers before ModifierInvocation
if (aVariant.kind === NonterminalKind.OverrideSpecifier &&
bVariant.kind === NonterminalKind.ModifierInvocation)
return -1;
if (bVariant.kind === NonterminalKind.OverrideSpecifier &&
aVariant.kind === NonterminalKind.ModifierInvocation)
return 1;
}
return 0;
}
//# sourceMappingURL=sort-function-attributes.js.map