eslint-plugin-perfectionist
Version:
ESLint plugin for sorting various data such as objects, imports, types, enums, JSX props, etc.
147 lines (146 loc) • 5.09 kB
JavaScript
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' })
const computeNodesInCircularDependencies = require('./compute-nodes-in-circular-dependencies.js')
const getCommentAboveThatShouldExist = require('./get-comment-above-that-should-exist.js')
const isNodeDependentOnOtherNode = require('./is-node-dependent-on-other-node.js')
const getNewlinesBetweenErrors = require('./get-newlines-between-errors.js')
const createNodeIndexMap = require('./create-node-index-map.js')
const getGroupIndex = require('./get-group-index.js')
const reportErrors = require('./report-errors.js')
const pairwise = require('./pairwise.js')
let reportAllErrors = ({
ignoreFirstNodeHighestBlockComment,
sortNodesExcludingEslintDisabled,
newlinesBetweenValueGetter,
availableMessageIds,
sourceCode,
context,
options,
nodes,
}) => {
let sortedNodes = sortNodesExcludingEslintDisabled(false)
let sortedNodesExcludingEslintDisabled =
sortNodesExcludingEslintDisabled(true)
let nodeIndexMap = createNodeIndexMap.createNodeIndexMap(sortedNodes)
let nodesInCircularDependencies =
availableMessageIds.unexpectedDependencyOrder
? computeNodesInCircularDependencies.computeNodesInCircularDependencies(
nodes,
)
: /* @__PURE__ */ new Set()
pairwise.pairwise(nodes, (left, right) => {
let leftInfo = left
? {
groupIndex: getGroupIndex.getGroupIndex(options.groups, left),
index: nodeIndexMap.get(left),
}
: null
let rightGroupIndex = getGroupIndex.getGroupIndex(options.groups, right)
let rightIndex = nodeIndexMap.get(right)
let indexOfRightExcludingEslintDisabled =
sortedNodesExcludingEslintDisabled.indexOf(right)
let messageIds = []
let firstUnorderedNodeDependentOnRight
if (availableMessageIds.unexpectedDependencyOrder) {
firstUnorderedNodeDependentOnRight = getFirstUnorderedNodeDependentOn({
nodes,
node: right,
nodesInCircularDependencies,
})
}
if (
leftInfo &&
(firstUnorderedNodeDependentOnRight ||
leftInfo.index > rightIndex ||
((left == null ? void 0 : left.isEslintDisabled) &&
leftInfo.index >= indexOfRightExcludingEslintDisabled))
) {
if (firstUnorderedNodeDependentOnRight) {
messageIds.push(availableMessageIds.unexpectedDependencyOrder)
} else {
messageIds.push(
leftInfo.groupIndex === rightGroupIndex ||
!availableMessageIds.unexpectedGroupOrder
? availableMessageIds.unexpectedOrder
: availableMessageIds.unexpectedGroupOrder,
)
}
}
if (
left &&
options.newlinesBetween !== void 0 &&
availableMessageIds.missedSpacingBetweenMembers &&
availableMessageIds.extraSpacingBetweenMembers
) {
messageIds = [
...messageIds,
...getNewlinesBetweenErrors.getNewlinesBetweenErrors({
options: {
...options,
newlinesBetween: options.newlinesBetween,
},
missedSpacingError: availableMessageIds.missedSpacingBetweenMembers,
extraSpacingError: availableMessageIds.extraSpacingBetweenMembers,
leftGroupIndex: leftInfo.groupIndex,
newlinesBetweenValueGetter,
rightGroupIndex,
sourceCode,
right,
left,
}),
]
}
let commentAboveMissing
if (availableMessageIds.missedCommentAbove) {
let commentAboveThatShouldExist =
getCommentAboveThatShouldExist.getCommentAboveThatShouldExist({
leftGroupIndex:
(leftInfo == null ? void 0 : leftInfo.groupIndex) ?? null,
sortingNode: right,
rightGroupIndex,
sourceCode,
options,
})
if (commentAboveThatShouldExist && !commentAboveThatShouldExist.exists) {
commentAboveMissing = commentAboveThatShouldExist.comment
messageIds = [...messageIds, availableMessageIds.missedCommentAbove]
}
}
reportErrors.reportErrors({
sortedNodes: sortedNodesExcludingEslintDisabled,
ignoreFirstNodeHighestBlockComment,
firstUnorderedNodeDependentOnRight,
newlinesBetweenValueGetter,
commentAboveMissing,
messageIds,
sourceCode,
options,
context,
nodes,
right,
left,
})
})
}
let getFirstUnorderedNodeDependentOn = ({
nodesInCircularDependencies,
nodes,
node,
}) => {
let nodesDependentOnNode = nodes.filter(
currentlyOrderedNode =>
!nodesInCircularDependencies.has(currentlyOrderedNode) &&
isNodeDependentOnOtherNode.isNodeDependentOnOtherNode(
node,
currentlyOrderedNode,
),
)
return nodesDependentOnNode.find(firstNodeDependentOnNode => {
let currentIndexOfNode = nodes.indexOf(node)
let currentIndexOfFirstNodeDependentOnNode = nodes.indexOf(
firstNodeDependentOnNode,
)
return currentIndexOfFirstNodeDependentOnNode < currentIndexOfNode
})
}
exports.reportAllErrors = reportAllErrors