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.
- package/dist/index.js +1 -1
- package/dist/rules/sort-array-includes.js +34 -71
- package/dist/rules/sort-classes/types.js +1 -4
- package/dist/rules/sort-classes.js +162 -226
- package/dist/rules/sort-decorators.js +28 -67
- package/dist/rules/sort-enums.js +27 -80
- package/dist/rules/sort-exports.js +19 -59
- package/dist/rules/sort-heritage-clauses.js +12 -47
- package/dist/rules/sort-imports/read-closest-ts-config-by-path.js +2 -2
- package/dist/rules/sort-imports.js +31 -112
- package/dist/rules/sort-interfaces.js +2 -2
- package/dist/rules/sort-intersection-types.js +17 -249
- package/dist/rules/sort-jsx-props.js +45 -51
- package/dist/rules/sort-maps/does-custom-group-match.js +24 -0
- package/dist/rules/sort-maps/types.js +7 -0
- package/dist/rules/sort-maps.js +117 -85
- package/dist/rules/sort-modules.js +35 -119
- package/dist/rules/sort-named-exports.js +19 -61
- package/dist/rules/sort-named-imports.js +19 -61
- package/dist/rules/sort-object-types.js +19 -100
- package/dist/rules/sort-objects/does-custom-group-match.js +49 -0
- package/dist/rules/sort-objects/types.js +15 -0
- package/dist/rules/sort-objects.js +114 -139
- package/dist/rules/sort-sets.js +7 -1
- package/dist/rules/sort-switch-case.js +30 -35
- package/dist/rules/sort-union-types.js +181 -238
- package/dist/rules/sort-variable-declarations.js +23 -72
- package/dist/utils/common-json-schemas.js +15 -5
- package/dist/utils/get-comments-before.js +1 -1
- package/dist/utils/get-lines-between.js +1 -1
- package/dist/utils/get-settings.js +1 -1
- package/dist/utils/get-source-code.js +1 -1
- package/dist/utils/make-comment-after-fixes.js +20 -20
- package/dist/utils/make-fixes.js +34 -65
- package/dist/utils/make-order-fixes.js +69 -0
- package/dist/utils/make-single-node-comment-after-fixes.js +31 -0
- package/dist/utils/report-all-errors.js +93 -0
- package/dist/utils/report-errors.js +43 -0
- package/dist/utils/should-partition.js +32 -0
- package/dist/utils/validate-custom-sort-configuration.js +1 -1
- package/dist/utils/validate-generated-groups-configuration.js +1 -1
- package/dist/utils/validate-groups-configuration.js +1 -1
- 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
|
|
21
|
-
const
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
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
|
|
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
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
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
|