eslint-plugin-perfectionist
Version:
ESLint plugin for sorting various data such as objects, imports, types, enums, JSX props, etc.
86 lines (85 loc) • 2.4 kB
JavaScript
import { buildSortingNodeByNodeMap } from '../build-sorting-node-by-node-map.js'
/**
* Populate sorting node groups with their corresponding overload signature
* implementations fields if they exist.
*
* @param params - The parameters.
* @param params.overloadSignatureGroups - List of overload signature groups.
* @param params.sortingNodeGroups - List of sorting node groups.
* @returns The populated sorting node groups.
*/
function populateSortingNodeGroupsWithOverloadSignature({
overloadSignatureGroups,
sortingNodeGroups,
}) {
return sortingNodeGroups.map(sortingNodes =>
populateSortingNodeGroupWithOverloadSignature({
overloadSignatureGroups,
sortingNodes,
}),
)
}
function buildUpdatedSortingNode({
overloadSignatureGroups,
sortingNodeByNode,
sortingNode,
}) {
let overloadSignatureImplementation = computeOverloadSignatureImplementation({
overloadSignatureGroups,
node: sortingNode.node,
})
if (!overloadSignatureImplementation) {
return {
...sortingNode,
overloadSignatureImplementation: null,
}
}
let implementationSortingNode = sortingNodeByNode.get(
overloadSignatureImplementation,
)
/* v8 ignore if -- @preserve Unsure how we can reach that case */
if (!implementationSortingNode) {
return {
...sortingNode,
overloadSignatureImplementation: null,
}
}
let {
addSafetySemicolonWhenInline,
isEslintDisabled,
node,
...relevantImplementationSortingNodeFields
} = implementationSortingNode
return {
...sortingNode,
...relevantImplementationSortingNodeFields,
overloadSignatureImplementation,
}
}
function populateSortingNodeGroupWithOverloadSignature({
overloadSignatureGroups,
sortingNodes,
}) {
let sortingNodeByNode = buildSortingNodeByNodeMap(sortingNodes)
return sortingNodes.map(sortingNode =>
buildUpdatedSortingNode({
overloadSignatureGroups,
sortingNodeByNode,
sortingNode,
}),
)
}
function computeOverloadSignatureImplementation({
overloadSignatureGroups,
node,
}) {
let matchingOverloadSignature = overloadSignatureGroups.find(
overloadSignatureGroup =>
overloadSignatureGroup.doesNodeBelongToGroup(node),
)
if (!matchingOverloadSignature) {
return null
}
return matchingOverloadSignature.implementation
}
export { populateSortingNodeGroupsWithOverloadSignature }