eslint-plugin-perfectionist 4.6.0 → 4.8.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 +37 -77
- package/dist/rules/sort-classes/types.js +1 -4
- package/dist/rules/sort-classes.js +190 -238
- package/dist/rules/sort-decorators.js +78 -118
- package/dist/rules/sort-enums/does-custom-group-match.js +36 -0
- package/dist/rules/sort-enums/types.js +8 -0
- package/dist/rules/sort-enums.js +93 -93
- package/dist/rules/sort-exports.js +21 -60
- package/dist/rules/sort-heritage-clauses.js +17 -53
- package/dist/rules/sort-imports/read-closest-ts-config-by-path.js +2 -2
- package/dist/rules/sort-imports.js +38 -120
- package/dist/rules/sort-interfaces.js +17 -20
- package/dist/rules/sort-intersection-types.js +22 -257
- package/dist/rules/sort-jsx-props.js +46 -55
- 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 +113 -85
- package/dist/rules/sort-modules.js +31 -119
- package/dist/rules/sort-named-exports.js +38 -68
- package/dist/rules/sort-named-imports.js +21 -63
- package/dist/rules/sort-object-types.js +35 -120
- 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 +119 -148
- package/dist/rules/sort-sets.js +8 -4
- package/dist/rules/sort-switch-case.js +35 -41
- package/dist/rules/sort-union-types.js +181 -241
- package/dist/rules/sort-variable-declarations.js +29 -78
- package/dist/utils/common-json-schemas.js +15 -5
- package/dist/utils/get-comments-before.js +1 -1
- package/dist/utils/get-custom-groups-compare-options.js +1 -4
- package/dist/utils/get-lines-between.js +1 -1
- package/dist/utils/get-newlines-between-option.js +20 -4
- package/dist/utils/get-newlines-errors.js +9 -0
- package/dist/utils/get-settings.js +1 -1
- package/dist/utils/get-source-code.js +1 -1
- package/dist/utils/is-newlines-between-option.js +5 -0
- package/dist/utils/make-comment-after-fixes.js +20 -20
- package/dist/utils/make-fixes.js +36 -65
- package/dist/utils/make-newlines-fixes.js +9 -0
- 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 +96 -0
- package/dist/utils/report-errors.js +62 -0
- package/dist/utils/should-partition.js +32 -0
- package/dist/utils/sort-nodes-by-dependencies.js +1 -3
- package/dist/utils/validate-custom-sort-configuration.js +1 -1
- package/dist/utils/validate-generated-groups-configuration.js +7 -8
- package/dist/utils/validate-groups-configuration.js +4 -3
- package/dist/utils/validate-newlines-and-partition-configuration.js +3 -2
- 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,10 @@ Object.defineProperties(exports, {
|
|
|
4
4
|
[Symbol.toStringTag]: { value: 'Module' },
|
|
5
5
|
})
|
|
6
6
|
const commonJsonSchemas = require('../utils/common-json-schemas.js')
|
|
7
|
+
const reportErrors = require('../utils/report-errors.js')
|
|
8
|
+
const validateNewlinesAndPartitionConfiguration = require('../utils/validate-newlines-and-partition-configuration.js')
|
|
7
9
|
const validateGeneratedGroupsConfiguration = require('../utils/validate-generated-groups-configuration.js')
|
|
10
|
+
const validateCustomSortConfiguration = require('../utils/validate-custom-sort-configuration.js')
|
|
8
11
|
const types = require('./sort-array-includes/types.js')
|
|
9
12
|
const getCustomGroupsCompareOptions = require('../utils/get-custom-groups-compare-options.js')
|
|
10
13
|
const doesCustomGroupMatch = require('./sort-array-includes/does-custom-group-match.js')
|
|
@@ -12,28 +15,23 @@ const getMatchingContextOptions = require('../utils/get-matching-context-options
|
|
|
12
15
|
const generatePredefinedGroups = require('../utils/generate-predefined-groups.js')
|
|
13
16
|
const getEslintDisabledLines = require('../utils/get-eslint-disabled-lines.js')
|
|
14
17
|
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
18
|
const sortNodesByGroups = require('../utils/sort-nodes-by-groups.js')
|
|
18
|
-
const getCommentsBefore = require('../utils/get-comments-before.js')
|
|
19
19
|
const createEslintRule = require('../utils/create-eslint-rule.js')
|
|
20
|
-
const
|
|
21
|
-
const
|
|
20
|
+
const reportAllErrors = require('../utils/report-all-errors.js')
|
|
21
|
+
const shouldPartition = require('../utils/should-partition.js')
|
|
22
22
|
const getSourceCode = require('../utils/get-source-code.js')
|
|
23
|
-
const toSingleLine = require('../utils/to-single-line.js')
|
|
24
23
|
const rangeToDiff = require('../utils/range-to-diff.js')
|
|
25
24
|
const getSettings = require('../utils/get-settings.js')
|
|
26
25
|
const isSortable = require('../utils/is-sortable.js')
|
|
27
|
-
const makeFixes = require('../utils/make-fixes.js')
|
|
28
26
|
const useGroups = require('../utils/use-groups.js')
|
|
29
27
|
const complete = require('../utils/complete.js')
|
|
30
|
-
const pairwise = require('../utils/pairwise.js')
|
|
31
28
|
let cachedGroupsByModifiersAndSelectors = /* @__PURE__ */ new Map()
|
|
32
29
|
let defaultOptions = {
|
|
33
30
|
groupKind: 'literals-first',
|
|
34
31
|
specialCharacters: 'keep',
|
|
35
32
|
partitionByComment: false,
|
|
36
33
|
partitionByNewLine: false,
|
|
34
|
+
newlinesBetween: 'ignore',
|
|
37
35
|
useConfigurationIf: {},
|
|
38
36
|
type: 'alphabetical',
|
|
39
37
|
ignoreCase: true,
|
|
@@ -46,11 +44,7 @@ let defaultOptions = {
|
|
|
46
44
|
let jsonSchema = {
|
|
47
45
|
items: {
|
|
48
46
|
properties: {
|
|
49
|
-
|
|
50
|
-
...commonJsonSchemas.partitionByCommentJsonSchema,
|
|
51
|
-
description:
|
|
52
|
-
'Allows you to use comments to separate the array members into logical groups.',
|
|
53
|
-
},
|
|
47
|
+
...commonJsonSchemas.commonJsonSchemas,
|
|
54
48
|
groupKind: {
|
|
55
49
|
enum: ['mixed', 'literals-first', 'spreads-first'],
|
|
56
50
|
description: 'Specifies top-level groups.',
|
|
@@ -61,13 +55,10 @@ let jsonSchema = {
|
|
|
61
55
|
}),
|
|
62
56
|
useConfigurationIf: commonJsonSchemas.buildUseConfigurationIfJsonSchema(),
|
|
63
57
|
type: commonJsonSchemas.buildTypeJsonSchema({ withUnsorted: true }),
|
|
58
|
+
partitionByComment: commonJsonSchemas.partitionByCommentJsonSchema,
|
|
64
59
|
partitionByNewLine: commonJsonSchemas.partitionByNewLineJsonSchema,
|
|
65
|
-
|
|
66
|
-
ignoreCase: commonJsonSchemas.ignoreCaseJsonSchema,
|
|
67
|
-
alphabet: commonJsonSchemas.alphabetJsonSchema,
|
|
68
|
-
locales: commonJsonSchemas.localesJsonSchema,
|
|
60
|
+
newlinesBetween: commonJsonSchemas.newlinesBetweenJsonSchema,
|
|
69
61
|
groups: commonJsonSchemas.groupsJsonSchema,
|
|
70
|
-
order: commonJsonSchemas.orderJsonSchema,
|
|
71
62
|
},
|
|
72
63
|
additionalProperties: false,
|
|
73
64
|
type: 'object',
|
|
@@ -90,6 +81,10 @@ const sortArrayIncludes = createEslintRule.createEslintRule({
|
|
|
90
81
|
: node.object.arguments
|
|
91
82
|
sortArray({
|
|
92
83
|
availableMessageIds: {
|
|
84
|
+
missedSpacingBetweenMembers:
|
|
85
|
+
'missedSpacingBetweenArrayIncludesMembers',
|
|
86
|
+
extraSpacingBetweenMembers:
|
|
87
|
+
'extraSpacingBetweenArrayIncludesMembers',
|
|
93
88
|
unexpectedGroupOrder: 'unexpectedArrayIncludesGroupOrder',
|
|
94
89
|
unexpectedOrder: 'unexpectedArrayIncludesOrder',
|
|
95
90
|
},
|
|
@@ -101,10 +96,11 @@ const sortArrayIncludes = createEslintRule.createEslintRule({
|
|
|
101
96
|
}),
|
|
102
97
|
meta: {
|
|
103
98
|
messages: {
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
99
|
+
missedSpacingBetweenArrayIncludesMembers:
|
|
100
|
+
reportErrors.MISSED_SPACING_ERROR,
|
|
101
|
+
extraSpacingBetweenArrayIncludesMembers: reportErrors.EXTRA_SPACING_ERROR,
|
|
102
|
+
unexpectedArrayIncludesGroupOrder: reportErrors.GROUP_ORDER_ERROR,
|
|
103
|
+
unexpectedArrayIncludesOrder: reportErrors.ORDER_ERROR,
|
|
108
104
|
},
|
|
109
105
|
docs: {
|
|
110
106
|
description: 'Enforce sorted arrays before include method.',
|
|
@@ -144,12 +140,15 @@ let sortArray = ({ availableMessageIds, elements, context }) => {
|
|
|
144
140
|
...completeOptions,
|
|
145
141
|
type,
|
|
146
142
|
}
|
|
143
|
+
validateCustomSortConfiguration.validateCustomSortConfiguration(options)
|
|
147
144
|
validateGeneratedGroupsConfiguration.validateGeneratedGroupsConfiguration({
|
|
148
|
-
customGroups: options.customGroups,
|
|
149
145
|
selectors: types.allSelectors,
|
|
150
|
-
groups: options.groups,
|
|
151
146
|
modifiers: [],
|
|
147
|
+
options,
|
|
152
148
|
})
|
|
149
|
+
validateNewlinesAndPartitionConfiguration.validateNewlinesAndPartitionConfiguration(
|
|
150
|
+
options,
|
|
151
|
+
)
|
|
153
152
|
let eslintDisabledLines = getEslintDisabledLines.getEslintDisabledLines({
|
|
154
153
|
ruleName: context.id,
|
|
155
154
|
sourceCode,
|
|
@@ -207,20 +206,12 @@ let sortArray = ({ availableMessageIds, elements, context }) => {
|
|
|
207
206
|
let lastSortingNode =
|
|
208
207
|
(_a = accumulator.at(-1)) == null ? void 0 : _a.at(-1)
|
|
209
208
|
if (
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
}) ||
|
|
217
|
-
(options.partitionByNewLine &&
|
|
218
|
-
lastSortingNode &&
|
|
219
|
-
getLinesBetween.getLinesBetween(
|
|
220
|
-
sourceCode,
|
|
221
|
-
lastSortingNode,
|
|
222
|
-
sortingNode,
|
|
223
|
-
))
|
|
209
|
+
shouldPartition.shouldPartition({
|
|
210
|
+
lastSortingNode,
|
|
211
|
+
sortingNode,
|
|
212
|
+
sourceCode,
|
|
213
|
+
options,
|
|
214
|
+
})
|
|
224
215
|
) {
|
|
225
216
|
accumulator.push([])
|
|
226
217
|
}
|
|
@@ -244,7 +235,7 @@ let sortArray = ({ availableMessageIds, elements, context }) => {
|
|
|
244
235
|
groupKind === 'any' || currentNode.groupKind === groupKind,
|
|
245
236
|
),
|
|
246
237
|
)
|
|
247
|
-
let
|
|
238
|
+
let sortNodesExcludingEslintDisabled = ignoreEslintDisabledNodes =>
|
|
248
239
|
filteredGroupKindNodes.flatMap(groupedNodes =>
|
|
249
240
|
sortNodesByGroups.sortNodesByGroups(groupedNodes, options, {
|
|
250
241
|
getGroupCompareOptions: groupNumber =>
|
|
@@ -255,44 +246,13 @@ let sortArray = ({ availableMessageIds, elements, context }) => {
|
|
|
255
246
|
ignoreEslintDisabledNodes,
|
|
256
247
|
}),
|
|
257
248
|
)
|
|
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
|
-
})
|
|
249
|
+
reportAllErrors.reportAllErrors({
|
|
250
|
+
sortNodesExcludingEslintDisabled,
|
|
251
|
+
availableMessageIds,
|
|
252
|
+
sourceCode,
|
|
253
|
+
options,
|
|
254
|
+
context,
|
|
255
|
+
nodes,
|
|
296
256
|
})
|
|
297
257
|
}
|
|
298
258
|
}
|
|
@@ -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
|