8000 feat: Improve side-effect handling behavior in sort-imports · azat-io/eslint-plugin-perfectionist@398ac13 · GitHub 8000
[go: up one dir, main page]

Skip to content

Commit 398ac13

Browse files
authored
feat: Improve side-effect handling behavior in sort-imports
1 parent a7d3f8c commit 398ac13

File tree

6 files changed

+718
-345
lines changed

6 files changed

+718
-345
lines changed

rules/sort-classes.ts

Lines changed: 12 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import {
2525
sortNodesByDependencies,
2626
} from '../utils/sort-nodes-by-dependencies'
2727
import { hasPartitionComment } from '../utils/is-partition-comment'
28+
import { sortNodesByGroups } from '../utils/sort-nodes-by-groups'
2829
import { getCommentsBefore } from '../utils/get-comments-before'
2930
import { createEslintRule } from '../utils/create-eslint-rule'
3031
import { getGroupNumber } from '../utils/get-group-number'
@@ -33,7 +34,6 @@ import { toSingleLine } from '../utils/to-single-line'
3334
import { rangeToDiff } from '../utils/range-to-diff'
3435
import { getSettings } from '../utils/get-settings'
3536
import { useGroups } from '../utils/use-groups'
36-
import { sortNodes } from '../utils/sort-nodes'
3737
import { makeFixes } from '../utils/make-fixes'
3838
import { complete } from '../utils/complete'
3939
import { pairwise } from '../utils/pairwise'
@@ -649,47 +649,17 @@ export default createEslintRule<SortClassesOptions, MESSAGE_ID>({
649649
[[]],
650650
)
651651

652-
let sortedNodes: SortingNodeWithDependencies[] = []
653-
for (let nodes of formattedNodes) {
654-
let nodesByNonIgnoredGroupNumber: {
655-
[key: number]: SortingNodeWithDependencies[]
656-
} = {}
657-
let ignoredNodeIndices: number[] = []
658-
for (let [index, sortingNode] of nodes.entries()) {
659-
let groupNum = getGroupNumber(options.groups, sortingNode)
660-
if (groupNum === options.groups.length) {
661-
ignoredNodeIndices.push(index)
662-
continue
663-
}
664-
nodesByNonIgnoredGroupNumber[groupNum] =
665-
nodesByNonIgnoredGroupNumber[groupNum] ?? []
666-
nodesByNonIgnoredGroupNumber[groupNum].push(sortingNode)
667-
}
668-
669-
for (let groupNumber of Object.keys(
670-
nodesByNonIgnoredGroupNumber,
671-
).sort((a, b) => Number(a) - Number(b))) {
672-
let compareOptions = getCompareOptions(options, Number(groupNumber))
673-
if (!compareOptions) {
674-
// Do not sort this group
675-
sortedNodes.push(
676-
...nodesByNonIgnoredGroupNumber[Number(groupNumber)],
677-
)
678-
} else {
679-
sortedNodes.push(
680-
...sortNodes(
681-
nodesByNonIgnoredGroupNumber[Number(groupNumber)],
682-
compareOptions,
683-
),
684-
)
685-
}
686-
}
687-
688-
// Add ignored nodes at the same position as they were before linting
689-
for (let ignoredIndex of ignoredNodeIndices) {
690-
sortedNodes.splice(ignoredIndex, 0, nodes[ignoredIndex])
691-
}
692-
}
652+
let sortedNodes = formattedNodes
653+
.map(nodes =>
654+
sortNodesByGroups(nodes, options, {
655+
getGroupCompareOptions: groupNumber =>
656+
getCompareOptions(options, groupNumber),
657+
isNodeIgnored: sortingNode =>
658+
getGroupNumber(options.groups, sortingNode) ===
659+
options.groups.length,
660+
}),
661+
)
662+
.flat()
693663

694664
sortedNodes = sortNodesByDependencies(sortedNodes)
695665
let nodes = formattedNodes.flat()

0 commit comments

Comments
 (0)
0