eslint-plugin-perfectionist
Version:
ESLint plugin for sorting various data such as objects, imports, types, enums, JSX props, etc.
59 lines (58 loc) • 1.91 kB
JavaScript
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' })
const getGroupNumber = require('./get-group-number.js')
const sortNodes = require('./sort-nodes.js')
let sortNodesByGroups = ({
ignoreEslintDisabledNodes,
getOptionsByGroupNumber,
isNodeIgnoredForGroup,
isNodeIgnored,
groups,
nodes,
}) => {
let nodesByNonIgnoredGroupNumber = {}
let ignoredNodeIndices = []
for (let [index, sortingNode] of nodes.entries()) {
if (
(sortingNode.isEslintDisabled && ignoreEslintDisabledNodes) ||
(isNodeIgnored == null ? void 0 : isNodeIgnored(sortingNode))
) {
ignoredNodeIndices.push(index)
continue
}
let groupNumber = getGroupNumber.getGroupNumber(groups, sortingNode)
nodesByNonIgnoredGroupNumber[groupNumber] ??
(nodesByNonIgnoredGroupNumber[groupNumber] = [])
nodesByNonIgnoredGroupNumber[groupNumber].push(sortingNode)
}
let sortedNodes = []
for (let groupNumber of Object.keys(nodesByNonIgnoredGroupNumber).sort(
(a, b) => Number(a) - Number(b),
)) {
let { fallbackSortNodeValueGetter, nodeValueGetter, options } =
getOptionsByGroupNumber(Number(groupNumber))
let nodesToPush = nodesByNonIgnoredGroupNumber[Number(groupNumber)]
let groupIgnoredNodes = new Set(
nodesToPush.filter(node =>
isNodeIgnoredForGroup == null
? void 0
: isNodeIgnoredForGroup(node, options),
),
)
sortedNodes.push(
...sortNodes.sortNodes({
isNodeIgnored: node => groupIgnoredNodes.has(node),
ignoreEslintDisabledNodes: false,
fallbackSortNodeValueGetter,
nodes: nodesToPush,
nodeValueGetter,
options,
}),
)
}
for (let ignoredIndex of ignoredNodeIndices) {
sortedNodes.splice(ignoredIndex, 0, nodes[ignoredIndex])
}
return sortedNodes
}
exports.sortNodesByGroups = sortNodesByGroups