eslint-plugin-perfectionist 4.6.0 → 4.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 (43) hide show
  1. package/dist/index.js +1 -1
  2. package/dist/rules/sort-array-includes.js +34 -71
  3. package/dist/rules/sort-classes/types.js +1 -4
  4. package/dist/rules/sort-classes.js +162 -226
  5. package/dist/rules/sort-decorators.js +28 -67
  6. package/dist/rules/sort-enums.js +27 -80
  7. package/dist/rules/sort-exports.js +19 -59
  8. package/dist/rules/sort-heritage-clauses.js +12 -47
  9. package/dist/rules/sort-imports/read-closest-ts-config-by-path.js +2 -2
  10. package/dist/rules/sort-imports.js +31 -112
  11. package/dist/rules/sort-interfaces.js +2 -2
  12. package/dist/rules/sort-intersection-types.js +17 -249
  13. package/dist/rules/sort-jsx-props.js +45 -51
  14. package/dist/rules/sort-maps/does-custom-group-match.js +24 -0
  15. package/dist/rules/sort-maps/types.js +7 -0
  16. package/dist/rules/sort-maps.js +117 -85
  17. package/dist/rules/sort-modules.js +35 -119
  18. package/dist/rules/sort-named-exports.js +19 -61
  19. package/dist/rules/sort-named-imports.js +19 -61
  20. package/dist/rules/sort-object-types.js +19 -100
  21. package/dist/rules/sort-objects/does-custom-group-match.js +49 -0
  22. package/dist/rules/sort-objects/types.js +15 -0
  23. package/dist/rules/sort-objects.js +114 -139
  24. package/dist/rules/sort-sets.js +7 -1
  25. package/dist/rules/sort-switch-case.js +30 -35
  26. package/dist/rules/sort-union-types.js +181 -238
  27. package/dist/rules/sort-variable-declarations.js +23 -72
  28. package/dist/utils/common-json-schemas.js +15 -5
  29. package/dist/utils/get-comments-before.js +1 -1
  30. package/dist/utils/get-lines-between.js +1 -1
  31. package/dist/utils/get-settings.js +1 -1
  32. package/dist/utils/get-source-code.js +1 -1
  33. package/dist/utils/make-comment-after-fixes.js +20 -20
  34. package/dist/utils/make-fixes.js +34 -65
  35. package/dist/utils/make-order-fixes.js +69 -0
  36. package/dist/utils/make-single-node-comment-after-fixes.js +31 -0
  37. package/dist/utils/report-all-errors.js +93 -0
  38. package/dist/utils/report-errors.js +43 -0
  39. package/dist/utils/should-partition.js +32 -0
  40. package/dist/utils/validate-custom-sort-configuration.js +1 -1
  41. package/dist/utils/validate-generated-groups-configuration.js +1 -1
  42. package/dist/utils/validate-groups-configuration.js +1 -1
  43. package/package.json +3 -3
package/dist/index.js CHANGED
@@ -29,7 +29,7 @@ let plugin = {
29
29
  'sort-named-imports': sortNamedImports,
30
30
  'sort-named-exports': sortNamedExports,
31
31
  'sort-object-types': sortObjectTypes.default,
32
- 'sort-union-types': sortUnionTypes,
32
+ 'sort-union-types': sortUnionTypes.default,
33
33
  'sort-switch-case': sortSwitchCase,
34
34
  'sort-decorators': sortDecorators,
35
35
  'sort-interfaces': sortInterfaces,
@@ -4,7 +4,9 @@ Object.defineProperties(exports, {
4
4
  [Symbol.toStringTag]: { value: 'Module' },
5
5
  })
6
6
  const commonJsonSchemas = require('../utils/common-json-schemas.js')
7
+ const validateNewlinesAndPartitionConfiguration = require('../utils/validate-newlines-and-partition-configuration.js')
7
8
  const validateGeneratedGroupsConfiguration = require('../utils/validate-generated-groups-configuration.js')
9
+ const validateCustomSortConfiguration = require('../utils/validate-custom-sort-configuration.js')
8
10
  const types = require('./sort-array-includes/types.js')
9
11
  const getCustomGroupsCompareOptions = require('../utils/get-custom-groups-compare-options.js')
10
12
  const doesCustomGroupMatch = require('./sort-array-includes/does-custom-group-match.js')
@@ -12,28 +14,23 @@ const getMatchingContextOptions = require('../utils/get-matching-context-options
12
14
  const generatePredefinedGroups = require('../utils/generate-predefined-groups.js')
13
15
  const getEslintDisabledLines = require('../utils/get-eslint-disabled-lines.js')
14
16
  const isNodeEslintDisabled = require('../utils/is-node-eslint-disabled.js')
15
- const hasPartitionComment = require('../utils/has-partition-comment.js')
16
- const createNodeIndexMap = require('../utils/create-node-index-map.js')
17
17
  const sortNodesByGroups = require('../utils/sort-nodes-by-groups.js')
18
- const getCommentsBefore = require('../utils/get-comments-before.js')
19
18
  const createEslintRule = require('../utils/create-eslint-rule.js')
20
- const getLinesBetween = require('../utils/get-lines-between.js')
21
- const getGroupNumber = require('../utils/get-group-number.js')
19
+ const reportAllErrors = require('../utils/report-all-errors.js')
20
+ const shouldPartition = require('../utils/should-partition.js')
22
21
  const getSourceCode = require('../utils/get-source-code.js')
23
- const toSingleLine = require('../utils/to-single-line.js')
24
22
  const rangeToDiff = require('../utils/range-to-diff.js')
25
23
  const getSettings = require('../utils/get-settings.js')
26
24
  const isSortable = require('../utils/is-sortable.js')
27
- const makeFixes = require('../utils/make-fixes.js')
28
25
  const useGroups = require('../utils/use-groups.js')
29
26
  const complete = require('../utils/complete.js')
30
- const pairwise = require('../utils/pairwise.js')
31
27
  let cachedGroupsByModifiersAndSelectors = /* @__PURE__ */ new Map()
32
28
  let defaultOptions = {
33
29
  groupKind: 'literals-first',
34
30
  specialCharacters: 'keep',
35
31
  partitionByComment: false,
36
32
  partitionByNewLine: false,
33
+ newlinesBetween: 'ignore',
37
34
  useConfigurationIf: {},
38
35
  type: 'alphabetical',
39
36
  ignoreCase: true,
@@ -46,11 +43,7 @@ let defaultOptions = {
46
43
  let jsonSchema = {
47
44
  items: {
48
45
  properties: {
49
- partitionByComment: {
50
- ...commonJsonSchemas.partitionByCommentJsonSchema,
51
- description:
52
- 'Allows you to use comments to separate the array members into logical groups.',
53
- },
46
+ ...commonJsonSchemas.commonJsonSchemas,
54
47
  groupKind: {
55
48
  enum: ['mixed', 'literals-first', 'spreads-first'],
56
49
  description: 'Specifies top-level groups.',
@@ -61,13 +54,10 @@ let jsonSchema = {
61
54
  }),
62
55
  useConfigurationIf: commonJsonSchemas.buildUseConfigurationIfJsonSchema(),
63
56
  type: commonJsonSchemas.buildTypeJsonSchema({ withUnsorted: true }),
57
+ partitionByComment: commonJsonSchemas.partitionByCommentJsonSchema,
64
58
  partitionByNewLine: commonJsonSchemas.partitionByNewLineJsonSchema,
65
- specialCharacters: commonJsonSchemas.specialCharactersJsonSchema,
66
- ignoreCase: commonJsonSchemas.ignoreCaseJsonSchema,
67
- alphabet: commonJsonSchemas.alphabetJsonSchema,
68
- locales: commonJsonSchemas.localesJsonSchema,
59
+ newlinesBetween: commonJsonSchemas.newlinesBetweenJsonSchema,
69
60
  groups: commonJsonSchemas.groupsJsonSchema,
70
- order: commonJsonSchemas.orderJsonSchema,
71
61
  },
72
62
  additionalProperties: false,
73
63
  type: 'object',
@@ -90,6 +80,10 @@ const sortArrayIncludes = createEslintRule.createEslintRule({
90
80
  : node.object.arguments
91
81
  sortArray({
92
82
  availableMessageIds: {
83
+ missedSpacingBetweenMembers:
84
+ 'missedSpacingBetweenArrayIncludesMembers',
85
+ extraSpacingBetweenMembers:
86
+ 'extraSpacingBetweenArrayIncludesMembers',
93
87
  unexpectedGroupOrder: 'unexpectedArrayIncludesGroupOrder',
94
88
  unexpectedOrder: 'unexpectedArrayIncludesOrder',
95
89
  },
@@ -103,6 +97,10 @@ const sortArrayIncludes = createEslintRule.createEslintRule({
103
97
  messages: {
104
98
  unexpectedArrayIncludesGroupOrder:
105
99
  'Expected "{{right}}" ({{rightGroup}}) to come before "{{left}}" ({{leftGroup}}).',
100
+ missedSpacingBetweenArrayIncludesMembers:
101
+ 'Missed spacing between "{{left}}" and "{{right}}" members.',
102
+ extraSpacingBetweenArrayIncludesMembers:
103
+ 'Extra spacing between "{{left}}" and "{{right}}" members.',
106
104
  unexpectedArrayIncludesOrder:
107
105
  'Expected "{{right}}" to come before "{{left}}".',
108
106
  },
@@ -144,12 +142,16 @@ let sortArray = ({ availableMessageIds, elements, context }) => {
144
142
  ...completeOptions,
145
143
  type,
146
144
  }
145
+ validateCustomSortConfiguration.validateCustomSortConfiguration(options)
147
146
  validateGeneratedGroupsConfiguration.validateGeneratedGroupsConfiguration({
148
147
  customGroups: options.customGroups,
149
148
  selectors: types.allSelectors,
150
149
  groups: options.groups,
151
150
  modifiers: [],
152
151
  })
152
+ validateNewlinesAndPartitionConfiguration.validateNewlinesAndPartitionConfiguration(
153
+ options,
154
+ )
153
155
  let eslintDisabledLines = getEslintDisabledLines.getEslintDisabledLines({
154
156
  ruleName: context.id,
155
157
  sourceCode,
@@ -207,20 +209,12 @@ let sortArray = ({ availableMessageIds, elements, context }) => {
207
209
  let lastSortingNode =
208
210
  (_a = accumulator.at(-1)) == null ? void 0 : _a.at(-1)
209
211
  if (
210
- hasPartitionComment.hasPartitionComment({
211
- comments: getCommentsBefore.getCommentsBefore({
212
- node: element,
213
- sourceCode,
214
- }),
215
- partitionByComment: options.partitionByComment,
216
- }) ||
217
- (options.partitionByNewLine &&
218
- lastSortingNode &&
219
- getLinesBetween.getLinesBetween(
220
- sourceCode,
221
- lastSortingNode,
222
- sortingNode,
223
- ))
212
+ shouldPartition.shouldPartition({
213
+ lastSortingNode,
214
+ sortingNode,
215
+ sourceCode,
216
+ options,
217
+ })
224
218
  ) {
225
219
  accumulator.push([])
226
220
  }
@@ -244,7 +238,7 @@ let sortArray = ({ availableMessageIds, elements, context }) => {
244
238
  groupKind === 'any' || currentNode.groupKind === groupKind,
245
239
  ),
246
240
  )
247
- let sortNodesIgnoringEslintDisabledNodes = ignoreEslintDisabledNodes =>
241
+ let sortNodesExcludingEslintDisabled = ignoreEslintDisabledNodes =>
248
242
  filteredGroupKindNodes.flatMap(groupedNodes =>
249
243
  sortNodesByGroups.sortNodesByGroups(groupedNodes, options, {
250
244
  getGroupCompareOptions: groupNumber =>
@@ -255,44 +249,13 @@ let sortArray = ({ availableMessageIds, elements, context }) => {
255
249
  ignoreEslintDisabledNodes,
256
250
  }),
257
251
  )
258
- let sortedNodes = sortNodesIgnoringEslintDisabledNodes(false)
259
- let sortedNodesExcludingEslintDisabled =
260
- sortNodesIgnoringEslintDisabledNodes(true)
261
- let nodeIndexMap = createNodeIndexMap.createNodeIndexMap(sortedNodes)
262
- pairwise.pairwise(nodes, (left, right) => {
263
- let leftIndex = nodeIndexMap.get(left)
264
- let rightIndex = nodeIndexMap.get(right)
265
- let leftNumber = getGroupNumber.getGroupNumber(options.groups, left)
266
- let rightNumber = getGroupNumber.getGroupNumber(options.groups, right)
267
- let indexOfRightExcludingEslintDisabled =
268
- sortedNodesExcludingEslintDisabled.indexOf(right)
269
- if (
270
- leftIndex < rightIndex &&
271
- leftIndex < indexOfRightExcludingEslintDisabled
272
- ) {
273
- return
274
- }
275
- context.report({
276
- fix: fixer =>
277
- makeFixes.makeFixes({
278
- sortedNodes: sortedNodesExcludingEslintDisabled,
279
- sourceCode,
280
- options,
281
- fixer,
282
- nodes,
283
- }),
284
- data: {
285
- right: toSingleLine.toSingleLine(right.name),
286
- left: toSingleLine.toSingleLine(left.name),
287
- rightGroup: right.group,
288
- leftGroup: left.group,
289
- },
290
- messageId:
291
- leftNumber === rightNumber
292
- ? availableMessageIds.unexpectedOrder
293
- : availableMessageIds.unexpectedGroupOrder,
294
- node: right.node,
295
- })
252
+ reportAllErrors.reportAllErrors({
253
+ sortNodesExcludingEslintDisabled,
254
+ availableMessageIds,
255
+ sourceCode,
256
+ options,
257
+ context,
258
+ nodes,
296
259
  })
297
260
  }
298
261
  }
@@ -26,10 +26,6 @@ let allModifiers = [
26
26
  'optional',
27
27
  ]
28
28
  let singleCustomGroupJsonSchema = {
29
- elementValuePattern: {
30
- description: 'Element value pattern filter for properties.',
31
- type: 'string',
32
- },
33
29
  decoratorNamePattern: {
34
30
  description: 'Decorator name pattern filter.',
35
31
  type: 'string',
@@ -37,6 +33,7 @@ let singleCustomGroupJsonSchema = {
37
33
  modifiers:
38
34
  commonJsonSchemas.buildCustomGroupModifiersJsonSchema(allModifiers),
39
35
  selector: commonJsonSchemas.buildCustomGroupSelectorJsonSchema(allSelectors),
36
+ elementValuePattern: commonJsonSchemas.elementValuePatternJsonSchema,
40
37
  elementNamePattern: commonJsonSchemas.elementNamePatternJsonSchema,
41
38
  }
42
39
  exports.allModifiers = allModifiers