eslint-plugin-perfectionist 3.5.0 → 3.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/dist/index.d.ts +41 -12
  2. package/dist/rules/sort-array-includes.js +118 -60
  3. package/dist/rules/sort-array-includes.mjs +106 -58
  4. package/dist/rules/sort-astro-attributes.js +26 -45
  5. package/dist/rules/sort-astro-attributes.mjs +17 -32
  6. package/dist/rules/sort-classes.js +63 -40
  7. package/dist/rules/sort-classes.mjs +60 -40
  8. package/dist/rules/sort-enums.js +73 -41
  9. package/dist/rules/sort-enums.mjs +71 -40
  10. package/dist/rules/sort-exports.js +88 -12
  11. package/dist/rules/sort-exports.mjs +85 -12
  12. package/dist/rules/sort-imports.js +14 -10
  13. package/dist/rules/sort-imports.mjs +13 -9
  14. package/dist/rules/sort-interfaces.js +98 -107
  15. package/dist/rules/sort-interfaces.mjs +76 -90
  16. package/dist/rules/sort-intersection-types.js +153 -114
  17. package/dist/rules/sort-intersection-types.mjs +149 -108
  18. package/dist/rules/sort-jsx-props.js +26 -45
  19. package/dist/rules/sort-jsx-props.mjs +17 -32
  20. package/dist/rules/sort-maps.js +78 -22
  21. package/dist/rules/sort-maps.mjs +74 -22
  22. package/dist/rules/sort-named-exports.js +87 -31
  23. package/dist/rules/sort-named-exports.mjs +81 -28
  24. package/dist/rules/sort-named-imports.js +87 -31
  25. package/dist/rules/sort-named-imports.mjs +81 -28
  26. package/dist/rules/sort-object-types.js +88 -120
  27. package/dist/rules/sort-object-types.mjs +80 -105
  28. package/dist/rules/sort-objects.js +121 -89
  29. package/dist/rules/sort-objects.mjs +118 -85
  30. package/dist/rules/sort-svelte-attributes.js +26 -45
  31. package/dist/rules/sort-svelte-attributes.mjs +17 -32
  32. package/dist/rules/sort-union-types.js +153 -114
  33. package/dist/rules/sort-union-types.mjs +149 -108
  34. package/dist/rules/sort-variable-declarations.js +97 -24
  35. package/dist/rules/sort-variable-declarations.mjs +95 -25
  36. package/dist/rules/sort-vue-attributes.js +26 -46
  37. package/dist/rules/sort-vue-attributes.mjs +17 -33
  38. package/dist/utils/get-comments-before.js +12 -0
  39. package/dist/utils/get-comments-before.mjs +10 -0
  40. package/dist/utils/get-node-range.js +24 -12
  41. package/dist/utils/get-node-range.mjs +22 -12
  42. package/dist/utils/is-partition-comment.js +3 -0
  43. package/dist/utils/is-partition-comment.mjs +3 -1
  44. package/dist/utils/sort-nodes-by-dependencies.js +16 -0
  45. package/dist/utils/sort-nodes-by-dependencies.mjs +16 -1
  46. package/dist/utils/sort-nodes-by-groups.js +22 -0
  47. package/dist/utils/sort-nodes-by-groups.mjs +20 -0
  48. package/package.json +4 -4
  49. package/dist/utils/get-comment-before.js +0 -23
  50. package/dist/utils/get-comment-before.mjs +0 -21
@@ -1,18 +1,16 @@
1
1
  'use strict'
2
2
  const path = require('node:path')
3
3
  const validateGroupsConfiguration = require('../utils/validate-groups-configuration.js')
4
+ const sortNodesByGroups = require('../utils/sort-nodes-by-groups.js')
4
5
  const createEslintRule = require('../utils/create-eslint-rule.js')
5
6
  const getGroupNumber = require('../utils/get-group-number.js')
6
7
  const getSourceCode = require('../utils/get-source-code.js')
7
8
  const rangeToDiff = require('../utils/range-to-diff.js')
8
9
  const getSettings = require('../utils/get-settings.js')
9
- const isPositive = require('../utils/is-positive.js')
10
10
  const useGroups = require('../utils/use-groups.js')
11
11
  const makeFixes = require('../utils/make-fixes.js')
12
- const sortNodes = require('../utils/sort-nodes.js')
13
12
  const pairwise = require('../utils/pairwise.js')
14
13
  const complete = require('../utils/complete.js')
15
- const compare = require('../utils/compare.js')
16
14
  const sortAstroAttributes = createEslintRule.createEslintRule({
17
15
  name: 'sort-astro-attributes',
18
16
  meta: {
@@ -80,6 +78,8 @@ const sortAstroAttributes = createEslintRule.createEslintRule({
80
78
  },
81
79
  ],
82
80
  messages: {
81
+ unexpectedAstroAttributesGroupOrder:
82
+ 'Expected "{{right}}" ({{rightGroup}}) to come before "{{left}}" ({{leftGroup}}).',
83
83
  unexpectedAstroAttributesOrder:
84
84
  'Expected "{{right}}" to come before "{{left}}".',
85
85
  },
@@ -150,55 +150,36 @@ const sortAstroAttributes = createEslintRule.createEslintRule({
150
150
  [[]],
151
151
  )
152
152
  for (let nodes of parts) {
153
+ let sortedNodes = sortNodesByGroups.sortNodesByGroups(
154
+ nodes,
155
+ options,
156
+ )
153
157
  pairwise.pairwise(nodes, (left, right) => {
154
- let leftNum = getGroupNumber.getGroupNumber(options.groups, left)
155
- let rightNum = getGroupNumber.getGroupNumber(
156
- options.groups,
157
- right,
158
- )
159
- if (
160
- leftNum > rightNum ||
161
- (leftNum === rightNum &&
162
- isPositive.isPositive(compare.compare(left, right, options)))
163
- ) {
158
+ let indexOfLeft = sortedNodes.indexOf(left)
159
+ let indexOfRight = sortedNodes.indexOf(right)
160
+ if (indexOfLeft > indexOfRight) {
161
+ let leftNum = getGroupNumber.getGroupNumber(
162
+ options.groups,
163
+ left,
164
+ )
165
+ let rightNum = getGroupNumber.getGroupNumber(
166
+ options.groups,
167
+ right,
168
+ )
164
169
  context.report({
165
- messageId: 'unexpectedAstroAttributesOrder',
170
+ messageId:
171
+ leftNum !== rightNum
172
+ ? 'unexpectedAstroAttributesGroupOrder'
173
+ : 'unexpectedAstroAttributesOrder',
166
174
  data: {
167
175
  left: left.name,
168
176
  right: right.name,
177
+ leftGroup: left.group,
178
+ rightGroup: right.group,
169
179
  },
170
180
  node: right.node,
171
- fix: fixer => {
172
- let grouped = {}
173
- for (let currentNode of nodes) {
174
- let groupNum = getGroupNumber.getGroupNumber(
175
- options.groups,
176
- currentNode,
177
- )
178
- if (!(groupNum in grouped)) {
179
- grouped[groupNum] = [currentNode]
180
- } else {
181
- grouped[groupNum] = sortNodes.sortNodes(
182
- [...grouped[groupNum], currentNode],
183
- options,
184
- )
185
- }
186
- }
187
- let sortedNodes = []
188
- for (let group of Object.keys(grouped).sort(
189
- (a, b) => Number(a) - Number(b),
190
- )) {
191
- sortedNodes.push(
192
- ...sortNodes.sortNodes(grouped[group], options),
193
- )
194
- }
195
- return makeFixes.makeFixes(
196
- fixer,
197
- nodes,
198
- sortedNodes,
199
- sourceCode,
200
- )
201
- },
181
+ fix: fixer =>
182
+ makeFixes.makeFixes(fixer, nodes, sortedNodes, sourceCode),
202
183
  })
203
184
  }
204
185
  })
@@ -1,17 +1,15 @@
1
1
  import path from 'node:path'
2
2
  import { validateGroupsConfiguration } from '../utils/validate-groups-configuration.mjs'
3
+ import { sortNodesByGroups } from '../utils/sort-nodes-by-groups.mjs'
3
4
  import { createEslintRule } from '../utils/create-eslint-rule.mjs'
4
5
  import { getGroupNumber } from '../utils/get-group-number.mjs'
5
6
  import { getSourceCode } from '../utils/get-source-code.mjs'
6
7
  import { rangeToDiff } from '../utils/range-to-diff.mjs'
7
8
  import { getSettings } from '../utils/get-settings.mjs'
8
- import { isPositive } from '../utils/is-positive.mjs'
9
9
  import { useGroups } from '../utils/use-groups.mjs'
10
10
  import { makeFixes } from '../utils/make-fixes.mjs'
11
- import { sortNodes } from '../utils/sort-nodes.mjs'
12
11
  import { pairwise } from '../utils/pairwise.mjs'
13
12
  import { complete } from '../utils/complete.mjs'
14
- import { compare } from '../utils/compare.mjs'
15
13
  const sortAstroAttributes = createEslintRule({
16
14
  name: 'sort-astro-attributes',
17
15
  meta: {
@@ -79,6 +77,8 @@ const sortAstroAttributes = createEslintRule({
79
77
  },
80
78
  ],
81
79
  messages: {
80
+ unexpectedAstroAttributesGroupOrder:
81
+ 'Expected "{{right}}" ({{rightGroup}}) to come before "{{left}}" ({{leftGroup}}).',
82
82
  unexpectedAstroAttributesOrder:
83
83
  'Expected "{{right}}" to come before "{{left}}".',
84
84
  },
@@ -150,42 +150,27 @@ const sortAstroAttributes = createEslintRule({
150
150
  [[]],
151
151
  )
152
152
  for (let nodes of parts) {
153
+ let sortedNodes = sortNodesByGroups(nodes, options)
153
154
  pairwise(nodes, (left, right) => {
154
- let leftNum = getGroupNumber(options.groups, left)
155
- let rightNum = getGroupNumber(options.groups, right)
156
- if (
157
- leftNum > rightNum ||
158
- (leftNum === rightNum &&
159
- isPositive(compare(left, right, options)))
160
- ) {
155
+ let indexOfLeft = sortedNodes.indexOf(left)
156
+ let indexOfRight = sortedNodes.indexOf(right)
157
+ if (indexOfLeft > indexOfRight) {
158
+ let leftNum = getGroupNumber(options.groups, left)
159
+ let rightNum = getGroupNumber(options.groups, right)
161
160
  context.report({
162
- messageId: 'unexpectedAstroAttributesOrder',
161
+ messageId:
162
+ leftNum !== rightNum
163
+ ? 'unexpectedAstroAttributesGroupOrder'
164
+ : 'unexpectedAstroAttributesOrder',
163
165
  data: {
164
166
  left: left.name,
165
167
  right: right.name,
168
+ leftGroup: left.group,
169
+ rightGroup: right.group,
166
170
  },
167
171
  node: right.node,
168
- fix: fixer => {
169
- let grouped = {}
170
- for (let currentNode of nodes) {
171
- let groupNum = getGroupNumber(options.groups, currentNode)
172
- if (!(groupNum in grouped)) {
173
- grouped[groupNum] = [currentNode]
174
- } else {
175
- grouped[groupNum] = sortNodes(
176
- [...grouped[groupNum], currentNode],
177
- options,
178
- )
179
- }
180
- }
181
- let sortedNodes = []
182
- for (let group of Object.keys(grouped).sort(
183
- (a, b) => Number(a) - Number(b),
184
- )) {
185
- sortedNodes.push(...sortNodes(grouped[group], options))
186
- }
187
- return makeFixes(fixer, nodes, sortedNodes, sourceCode)
188
- },
172
+ fix: fixer =>
173
+ makeFixes(fixer, nodes, sortedNodes, sourceCode),
189
174
  })
190
175
  }
191
176
  })
@@ -3,7 +3,7 @@ const sortClassesUtils = require('./sort-classes-utils.js')
3
3
  const sortClasses_types = require('./sort-classes.types.js')
4
4
  const sortNodesByDependencies = require('../utils/sort-nodes-by-dependencies.js')
5
5
  const isPartitionComment = require('../utils/is-partition-comment.js')
6
- const getCommentBefore = require('../utils/get-comment-before.js')
6
+ const getCommentsBefore = require('../utils/get-comments-before.js')
7
7
  const createEslintRule = require('../utils/create-eslint-rule.js')
8
8
  const getGroupNumber = require('../utils/get-group-number.js')
9
9
  const getSourceCode = require('../utils/get-source-code.js')
@@ -45,7 +45,7 @@ const sortClasses = createEslintRule.createEslintRule({
45
45
  },
46
46
  partitionByComment: {
47
47
  description:
48
- 'Allows to use comments to separate the nodes into logical groups.',
48
+ 'Allows to use comments to separate the class members into logical groups.',
49
49
  anyOf: [
50
50
  {
51
51
  type: 'array',
@@ -145,6 +145,8 @@ const sortClasses = createEslintRule.createEslintRule({
145
145
  unexpectedClassesGroupOrder:
146
146
  'Expected "{{right}}" ({{rightGroup}}) to come before "{{left}}" ({{leftGroup}}).',
147
147
  unexpectedClassesOrder: 'Expected "{{right}}" to come before "{{left}}".',
148
+ unexpectedClassesDependencyOrder:
149
+ 'Expected dependency "{{right}}" to come before "{{nodeDependentOnRight}}".',
148
150
  },
149
151
  },
150
152
  defaultOptions: [
@@ -311,13 +313,15 @@ const sortClasses = createEslintRule.createEslintRule({
311
313
  let formattedNodes = node.body.reduce(
312
314
  (accumulator, member) => {
313
315
  var _a2, _b, _c, _d
314
- let comment = getCommentBefore.getCommentBefore(member, sourceCode)
316
+ let comments = getCommentsBefore.getCommentsBefore(
317
+ member,
318
+ sourceCode,
319
+ )
315
320
  if (
316
321
  options.partitionByComment &&
317
- comment &&
318
- isPartitionComment.isPartitionComment(
322
+ isPartitionComment.hasPartitionComment(
319
323
  options.partitionByComment,
320
- comment.value,
324
+ comments,
321
325
  )
322
326
  ) {
323
327
  accumulator.push([])
@@ -530,10 +534,11 @@ const sortClasses = createEslintRule.createEslintRule({
530
534
  },
531
535
  [[]],
532
536
  )
533
- for (let nodes of formattedNodes) {
537
+ let sortedNodes = []
538
+ for (let nodes2 of formattedNodes) {
534
539
  let nodesByNonIgnoredGroupNumber = {}
535
540
  let ignoredNodeIndices = []
536
- for (let [index, sortingNode] of nodes.entries()) {
541
+ for (let [index, sortingNode] of nodes2.entries()) {
537
542
  let groupNum = getGroupNumber.getGroupNumber(
538
543
  options.groups,
539
544
  sortingNode,
@@ -546,7 +551,6 @@ const sortClasses = createEslintRule.createEslintRule({
546
551
  nodesByNonIgnoredGroupNumber[groupNum] ?? []
547
552
  nodesByNonIgnoredGroupNumber[groupNum].push(sortingNode)
548
553
  }
549
- let sortedNodes = []
550
554
  for (let groupNumber of Object.keys(
551
555
  nodesByNonIgnoredGroupNumber,
552
556
  ).sort((a, b) => Number(a) - Number(b))) {
@@ -568,39 +572,58 @@ const sortClasses = createEslintRule.createEslintRule({
568
572
  }
569
573
  }
570
574
  for (let ignoredIndex of ignoredNodeIndices) {
571
- sortedNodes.splice(ignoredIndex, 0, nodes[ignoredIndex])
575
+ sortedNodes.splice(ignoredIndex, 0, nodes2[ignoredIndex])
572
576
  }
573
- sortedNodes =
574
- sortNodesByDependencies.sortNodesByDependencies(sortedNodes)
575
- pairwise.pairwise(nodes, (left, right) => {
576
- let leftNum = getGroupNumber.getGroupNumber(options.groups, left)
577
- let rightNum = getGroupNumber.getGroupNumber(options.groups, right)
578
- let isLeftOrRightIgnored =
579
- leftNum === options.groups.length ||
580
- rightNum === options.groups.length
581
- let indexOfLeft = sortedNodes.indexOf(left)
582
- let indexOfRight = sortedNodes.indexOf(right)
583
- if (!isLeftOrRightIgnored && indexOfLeft > indexOfRight) {
584
- context.report({
585
- messageId:
586
- leftNum !== rightNum
587
- ? 'unexpectedClassesGroupOrder'
588
- : 'unexpectedClassesOrder',
589
- data: {
590
- left: toSingleLine.toSingleLine(left.name),
591
- leftGroup: left.group,
592
- right: toSingleLine.toSingleLine(right.name),
593
- rightGroup: right.group,
594
- },
595
- node: right.node,
596
- fix: fixer =>
597
- makeFixes.makeFixes(fixer, nodes, sortedNodes, sourceCode, {
598
- partitionComment: options.partitionByComment,
599
- }),
600
- })
601
- }
602
- })
603
577
  }
578
+ sortedNodes =
579
+ sortNodesByDependencies.sortNodesByDependencies(sortedNodes)
580
+ let nodes = formattedNodes.flat()
581
+ pairwise.pairwise(nodes, (left, right) => {
582
+ let leftNum = getGroupNumber.getGroupNumber(options.groups, left)
583
+ let rightNum = getGroupNumber.getGroupNumber(options.groups, right)
584
+ let isLeftOrRightIgnored =
585
+ leftNum === options.groups.length ||
586
+ rightNum === options.groups.length
587
+ let indexOfLeft = sortedNodes.indexOf(left)
588
+ let indexOfRight = sortedNodes.indexOf(right)
589
+ let firstUnorderedNodeDependentOnRight =
590
+ sortNodesByDependencies.getFirstUnorderedNodeDependentOn(
591
+ right,
592
+ nodes,
593
+ )
594
+ if (
595
+ firstUnorderedNodeDependentOnRight ||
596
+ (!isLeftOrRightIgnored && indexOfLeft > indexOfRight)
597
+ ) {
598
+ let messageId
599
+ if (firstUnorderedNodeDependentOnRight) {
600
+ messageId = 'unexpectedClassesDependencyOrder'
601
+ } else {
602
+ messageId =
603
+ leftNum !== rightNum
604
+ ? 'unexpectedClassesGroupOrder'
605
+ : 'unexpectedClassesOrder'
606
+ }
607
+ context.report({
608
+ messageId,
609
+ data: {
610
+ left: toSingleLine.toSingleLine(left.name),
611
+ leftGroup: left.group,
612
+ right: toSingleLine.toSingleLine(right.name),
613
+ rightGroup: right.group,
614
+ nodeDependentOnRight:
615
+ firstUnorderedNodeDependentOnRight == null
616
+ ? void 0
617
+ : firstUnorderedNodeDependentOnRight.name,
618
+ },
619
+ node: right.node,
620
+ fix: fixer =>
621
+ makeFixes.makeFixes(fixer, nodes, sortedNodes, sourceCode, {
622
+ partitionComment: options.partitionByComment,
623
+ }),
624
+ })
625
+ }
626
+ })
604
627
  }
605
628
  },
606
629
  }),
@@ -9,9 +9,12 @@ import {
9
9
  customGroupSortJsonSchema,
10
10
  singleCustomGroupJsonSchema,
11
11
  } from './sort-classes.types.mjs'
12
- import { sortNodesByDependencies } from '../utils/sort-nodes-by-dependencies.mjs'
13
- import { isPartitionComment } from '../utils/is-partition-comment.mjs'
14
- import { getCommentBefore } from '../utils/get-comment-before.mjs'
12
+ import {
13
+ sortNodesByDependencies,
14
+ getFirstUnorderedNodeDependentOn,
15
+ } from '../utils/sort-nodes-by-dependencies.mjs'
16
+ import { hasPartitionComment } from '../utils/is-partition-comment.mjs'
17
+ import { getCommentsBefore } from '../utils/get-comments-before.mjs'
15
18
  import { createEslintRule } from '../utils/create-eslint-rule.mjs'
16
19
  import { getGroupNumber } from '../utils/get-group-number.mjs'
17
20
  import { getSourceCode } from '../utils/get-source-code.mjs'
@@ -53,7 +56,7 @@ const sortClasses = createEslintRule({
53
56
  },
54
57
  partitionByComment: {
55
58
  description:
56
- 'Allows to use comments to separate the nodes into logical groups.',
59
+ 'Allows to use comments to separate the class members into logical groups.',
57
60
  anyOf: [
58
61
  {
59
62
  type: 'array',
@@ -153,6 +156,8 @@ const sortClasses = createEslintRule({
153
156
  unexpectedClassesGroupOrder:
154
157
  'Expected "{{right}}" ({{rightGroup}}) to come before "{{left}}" ({{leftGroup}}).',
155
158
  unexpectedClassesOrder: 'Expected "{{right}}" to come before "{{left}}".',
159
+ unexpectedClassesDependencyOrder:
160
+ 'Expected dependency "{{right}}" to come before "{{nodeDependentOnRight}}".',
156
161
  },
157
162
  },
158
163
  defaultOptions: [
@@ -318,11 +323,10 @@ const sortClasses = createEslintRule({
318
323
  let formattedNodes = node.body.reduce(
319
324
  (accumulator, member) => {
320
325
  var _a2, _b, _c, _d
321
- let comment = getCommentBefore(member, sourceCode)
326
+ let comments = getCommentsBefore(member, sourceCode)
322
327
  if (
323
328
  options.partitionByComment &&
324
- comment &&
325
- isPartitionComment(options.partitionByComment, comment.value)
329
+ hasPartitionComment(options.partitionByComment, comments)
326
330
  ) {
327
331
  accumulator.push([])
328
332
  }
@@ -535,10 +539,11 @@ const sortClasses = createEslintRule({
535
539
  },
536
540
  [[]],
537
541
  )
538
- for (let nodes of formattedNodes) {
542
+ let sortedNodes = []
543
+ for (let nodes2 of formattedNodes) {
539
544
  let nodesByNonIgnoredGroupNumber = {}
540
545
  let ignoredNodeIndices = []
541
- for (let [index, sortingNode] of nodes.entries()) {
546
+ for (let [index, sortingNode] of nodes2.entries()) {
542
547
  let groupNum = getGroupNumber(options.groups, sortingNode)
543
548
  if (groupNum === options.groups.length) {
544
549
  ignoredNodeIndices.push(index)
@@ -548,7 +553,6 @@ const sortClasses = createEslintRule({
548
553
  nodesByNonIgnoredGroupNumber[groupNum] ?? []
549
554
  nodesByNonIgnoredGroupNumber[groupNum].push(sortingNode)
550
555
  }
551
- let sortedNodes = []
552
556
  for (let groupNumber of Object.keys(
553
557
  nodesByNonIgnoredGroupNumber,
554
558
  ).sort((a, b) => Number(a) - Number(b))) {
@@ -567,38 +571,54 @@ const sortClasses = createEslintRule({
567
571
  }
568
572
  }
569
573
  for (let ignoredIndex of ignoredNodeIndices) {
570
- sortedNodes.splice(ignoredIndex, 0, nodes[ignoredIndex])
574
+ sortedNodes.splice(ignoredIndex, 0, nodes2[ignoredIndex])
571
575
  }
572
- sortedNodes = sortNodesByDependencies(sortedNodes)
573
- pairwise(nodes, (left, right) => {
574
- let leftNum = getGroupNumber(options.groups, left)
575
- let rightNum = getGroupNumber(options.groups, right)
576
- let isLeftOrRightIgnored =
577
- leftNum === options.groups.length ||
578
- rightNum === options.groups.length
579
- let indexOfLeft = sortedNodes.indexOf(left)
580
- let indexOfRight = sortedNodes.indexOf(right)
581
- if (!isLeftOrRightIgnored && indexOfLeft > indexOfRight) {
582
- context.report({
583
- messageId:
584
- leftNum !== rightNum
585
- ? 'unexpectedClassesGroupOrder'
586
- : 'unexpectedClassesOrder',
587
- data: {
588
- left: toSingleLine(left.name),
589
- leftGroup: left.group,
590
- right: toSingleLine(right.name),
591
- rightGroup: right.group,
592
- },
593
- node: right.node,
594
- fix: fixer =>
595
- makeFixes(fixer, nodes, sortedNodes, sourceCode, {
596
- partitionComment: options.partitionByComment,
597
- }),
598
- })
599
- }
600
- })
601
576
  }
577
+ sortedNodes = sortNodesByDependencies(sortedNodes)
578
+ let nodes = formattedNodes.flat()
579
+ pairwise(nodes, (left, right) => {
580
+ let leftNum = getGroupNumber(options.groups, left)
581
+ let rightNum = getGroupNumber(options.groups, right)
582
+ let isLeftOrRightIgnored =
583
+ leftNum === options.groups.length ||
584
+ rightNum === options.groups.length
585
+ let indexOfLeft = sortedNodes.indexOf(left)
586
+ let indexOfRight = sortedNodes.indexOf(right)
587
+ let firstUnorderedNodeDependentOnRight =
588
+ getFirstUnorderedNodeDependentOn(right, nodes)
589
+ if (
590
+ firstUnorderedNodeDependentOnRight ||
591
+ (!isLeftOrRightIgnored && indexOfLeft > indexOfRight)
592
+ ) {
593
+ let messageId
594
+ if (firstUnorderedNodeDependentOnRight) {
595
+ messageId = 'unexpectedClassesDependencyOrder'
596
+ } else {
597
+ messageId =
598
+ leftNum !== rightNum
599
+ ? 'unexpectedClassesGroupOrder'
600
+ : 'unexpectedClassesOrder'
601
+ }
602
+ context.report({
603
+ messageId,
604
+ data: {
605
+ left: toSingleLine(left.name),
606
+ leftGroup: left.group,
607
+ right: toSingleLine(right.name),
608
+ rightGroup: right.group,
609
+ nodeDependentOnRight:
610
+ firstUnorderedNodeDependentOnRight == null
611
+ ? void 0
612
+ : firstUnorderedNodeDependentOnRight.name,
613
+ },
614
+ node: right.node,
615
+ fix: fixer =>
616
+ makeFixes(fixer, nodes, sortedNodes, sourceCode, {
617
+ partitionComment: options.partitionByComment,
618
+ }),
619
+ })
620
+ }
621
+ })
602
622
  }
603
623
  },
604
624
  }),