eslint-plugin-perfectionist 4.10.1 → 4.12.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.d.ts +4 -1
- package/dist/index.js +9 -5
- package/dist/package.json.js +6 -0
- package/dist/rules/sort-array-includes.js +12 -19
- package/dist/rules/sort-classes.js +18 -24
- package/dist/rules/sort-decorators.js +7 -4
- package/dist/rules/sort-enums.js +12 -14
- package/dist/rules/sort-exports/types.js +14 -0
- package/dist/rules/sort-exports.js +78 -17
- package/dist/rules/sort-heritage-clauses.js +7 -4
- package/dist/rules/sort-imports/compute-common-selectors.js +119 -0
- package/dist/rules/sort-imports/is-side-effect-only-group.js +13 -0
- package/dist/rules/sort-imports/matches-tsconfig-paths.js +22 -0
- package/dist/rules/sort-imports/types.js +48 -0
- package/dist/rules/sort-imports/validate-side-effects-configuration.js +24 -0
- package/dist/rules/sort-imports.js +364 -297
- package/dist/rules/sort-jsx-props/types.js +15 -0
- package/dist/rules/sort-jsx-props.js +62 -20
- package/dist/rules/sort-maps.js +11 -14
- package/dist/rules/sort-modules.js +15 -24
- package/dist/rules/sort-named-exports/types.js +14 -0
- package/dist/rules/sort-named-exports.js +76 -13
- package/dist/rules/sort-named-imports/types.js +14 -0
- package/dist/rules/sort-named-imports.js +79 -13
- package/dist/rules/sort-object-types.js +26 -40
- package/dist/rules/sort-objects.js +66 -53
- package/dist/rules/sort-union-types.js +19 -15
- package/dist/rules/sort-variable-declarations.js +1 -0
- package/dist/utils/common-json-schemas.js +3 -0
- package/dist/utils/compute-group.js +48 -0
- package/dist/utils/compute-nodes-in-circular-dependencies.js +42 -0
- package/dist/utils/does-custom-group-match.js +74 -0
- package/dist/utils/get-newlines-between-option.js +39 -9
- package/dist/utils/is-node-dependent-on-other-node.js +11 -0
- package/dist/utils/matches.js +5 -0
- package/dist/utils/report-all-errors.js +36 -4
- package/dist/utils/sort-nodes-by-dependencies.js +12 -25
- package/dist/utils/validate-generated-groups-configuration.js +44 -11
- package/package.json +3 -3
- package/dist/rules/sort-array-includes/does-custom-group-match.js +0 -30
- package/dist/rules/sort-classes/does-custom-group-match.js +0 -61
- package/dist/rules/sort-enums/does-custom-group-match.js +0 -36
- package/dist/rules/sort-maps/does-custom-group-match.js +0 -24
- package/dist/rules/sort-modules/does-custom-group-match.js +0 -49
- package/dist/rules/sort-object-types/does-custom-group-match.js +0 -49
- package/dist/rules/sort-objects/does-custom-group-match.js +0 -49
- package/dist/utils/use-groups.js +0 -33
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
'use strict'
|
|
2
|
+
const _package = require('./package.json.js')
|
|
2
3
|
const sortVariableDeclarations = require('./rules/sort-variable-declarations.js')
|
|
3
4
|
const sortIntersectionTypes = require('./rules/sort-intersection-types.js')
|
|
4
5
|
const sortHeritageClauses = require('./rules/sort-heritage-clauses.js')
|
|
@@ -19,7 +20,7 @@ const sortModules = require('./rules/sort-modules.js')
|
|
|
19
20
|
const sortEnums = require('./rules/sort-enums.js')
|
|
20
21
|
const sortMaps = require('./rules/sort-maps.js')
|
|
21
22
|
const sortSets = require('./rules/sort-sets.js')
|
|
22
|
-
let
|
|
23
|
+
let pluginName = 'perfectionist'
|
|
23
24
|
let plugin = {
|
|
24
25
|
rules: {
|
|
25
26
|
'sort-variable-declarations': sortVariableDeclarations,
|
|
@@ -43,24 +44,27 @@ let plugin = {
|
|
|
43
44
|
'sort-sets': sortSets,
|
|
44
45
|
'sort-maps': sortMaps,
|
|
45
46
|
},
|
|
46
|
-
|
|
47
|
+
meta: {
|
|
48
|
+
version: _package.version,
|
|
49
|
+
name: _package.name,
|
|
50
|
+
},
|
|
47
51
|
}
|
|
48
52
|
let getRules = options =>
|
|
49
53
|
Object.fromEntries(
|
|
50
54
|
Object.keys(plugin.rules).map(ruleName => [
|
|
51
|
-
`${
|
|
55
|
+
`${pluginName}/${ruleName}`,
|
|
52
56
|
['error', options],
|
|
53
57
|
]),
|
|
54
58
|
)
|
|
55
59
|
let createConfig = options => ({
|
|
56
60
|
plugins: {
|
|
57
|
-
[
|
|
61
|
+
[pluginName]: plugin,
|
|
58
62
|
},
|
|
59
63
|
rules: getRules(options),
|
|
60
64
|
})
|
|
61
65
|
let createLegacyConfig = options => ({
|
|
62
66
|
rules: getRules(options),
|
|
63
|
-
plugins: [
|
|
67
|
+
plugins: [pluginName],
|
|
64
68
|
})
|
|
65
69
|
const index = {
|
|
66
70
|
...plugin,
|
|
@@ -10,19 +10,19 @@ const getCustomGroupsCompareOptions = require('../utils/get-custom-groups-compar
|
|
|
10
10
|
const validateGeneratedGroupsConfiguration = require('../utils/validate-generated-groups-configuration.js')
|
|
11
11
|
const validateCustomSortConfiguration = require('../utils/validate-custom-sort-configuration.js')
|
|
12
12
|
const types = require('./sort-array-includes/types.js')
|
|
13
|
-
const doesCustomGroupMatch = require('./sort-array-includes/does-custom-group-match.js')
|
|
14
13
|
const getMatchingContextOptions = require('../utils/get-matching-context-options.js')
|
|
15
14
|
const generatePredefinedGroups = require('../utils/generate-predefined-groups.js')
|
|
16
15
|
const getEslintDisabledLines = require('../utils/get-eslint-disabled-lines.js')
|
|
17
16
|
const isNodeEslintDisabled = require('../utils/is-node-eslint-disabled.js')
|
|
17
|
+
const doesCustomGroupMatch = require('../utils/does-custom-group-match.js')
|
|
18
18
|
const sortNodesByGroups = require('../utils/sort-nodes-by-groups.js')
|
|
19
19
|
const createEslintRule = require('../utils/create-eslint-rule.js')
|
|
20
20
|
const reportAllErrors = require('../utils/report-all-errors.js')
|
|
21
21
|
const shouldPartition = require('../utils/should-partition.js')
|
|
22
|
+
const computeGroup = require('../utils/compute-group.js')
|
|
22
23
|
const rangeToDiff = require('../utils/range-to-diff.js')
|
|
23
24
|
const getSettings = require('../utils/get-settings.js')
|
|
24
25
|
const isSortable = require('../utils/is-sortable.js')
|
|
25
|
-
const useGroups = require('../utils/use-groups.js')
|
|
26
26
|
const complete = require('../utils/complete.js')
|
|
27
27
|
let cachedGroupsByModifiersAndSelectors = /* @__PURE__ */ new Map()
|
|
28
28
|
let defaultOptions = {
|
|
@@ -46,8 +46,8 @@ let jsonSchema = {
|
|
|
46
46
|
properties: {
|
|
47
47
|
...commonJsonSchemas.commonJsonSchemas,
|
|
48
48
|
groupKind: {
|
|
49
|
+
description: '[DEPRECATED] Specifies top-level groups.',
|
|
49
50
|
enum: ['mixed', 'literals-first', 'spreads-first'],
|
|
50
|
-
description: 'Specifies top-level groups.',
|
|
51
51
|
type: 'string',
|
|
52
52
|
},
|
|
53
53
|
customGroups: commonJsonSchemas.buildCustomGroupsArrayJsonSchema({
|
|
@@ -150,7 +150,6 @@ let sortArray = ({ availableMessageIds, elements, context }) => {
|
|
|
150
150
|
if (element === null) {
|
|
151
151
|
return accumulator
|
|
152
152
|
}
|
|
153
|
-
let { defineGroup, getGroup } = useGroups.useGroups(options)
|
|
154
153
|
let groupKind
|
|
155
154
|
let selector
|
|
156
155
|
if (element.type === 'SpreadElement') {
|
|
@@ -160,38 +159,32 @@ let sortArray = ({ availableMessageIds, elements, context }) => {
|
|
|
160
159
|
groupKind = 'literal'
|
|
161
160
|
selector = 'literal'
|
|
162
161
|
}
|
|
162
|
+
let name = getNodeName({ sourceCode, element })
|
|
163
163
|
let predefinedGroups = generatePredefinedGroups.generatePredefinedGroups({
|
|
164
164
|
cache: cachedGroupsByModifiersAndSelectors,
|
|
165
165
|
selectors: [selector],
|
|
166
166
|
modifiers: [],
|
|
167
167
|
})
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
}
|
|
171
|
-
let name = getNodeName({ sourceCode, element })
|
|
172
|
-
for (let customGroup of options.customGroups) {
|
|
173
|
-
if (
|
|
168
|
+
let group = computeGroup.computeGroup({
|
|
169
|
+
customGroupMatcher: customGroup =>
|
|
174
170
|
doesCustomGroupMatch.doesCustomGroupMatch({
|
|
175
171
|
selectors: [selector],
|
|
176
172
|
elementName: name,
|
|
173
|
+
modifiers: [],
|
|
177
174
|
customGroup,
|
|
178
|
-
})
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
break
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
}
|
|
175
|
+
}),
|
|
176
|
+
predefinedGroups,
|
|
177
|
+
options,
|
|
178
|
+
})
|
|
186
179
|
let sortingNode = {
|
|
187
180
|
isEslintDisabled: isNodeEslintDisabled.isNodeEslintDisabled(
|
|
188
181
|
element,
|
|
189
182
|
eslintDisabledLines,
|
|
190
183
|
),
|
|
191
184
|
size: rangeToDiff.rangeToDiff(element, sourceCode),
|
|
192
|
-
group: getGroup(),
|
|
193
185
|
node: element,
|
|
194
186
|
groupKind,
|
|
187
|
+
group,
|
|
195
188
|
name,
|
|
196
189
|
}
|
|
197
190
|
let lastSortingNode =
|
|
@@ -9,9 +9,9 @@ const validateCustomSortConfiguration = require('../utils/validate-custom-sort-c
|
|
|
9
9
|
const getOverloadSignatureGroups = require('./sort-classes/get-overload-signature-groups.js')
|
|
10
10
|
const generatePredefinedGroups = require('../utils/generate-predefined-groups.js')
|
|
11
11
|
const sortNodesByDependencies = require('../utils/sort-nodes-by-dependencies.js')
|
|
12
|
-
const doesCustomGroupMatch = require('./sort-classes/does-custom-group-match.js')
|
|
13
12
|
const getEslintDisabledLines = require('../utils/get-eslint-disabled-lines.js')
|
|
14
13
|
const isNodeEslintDisabled = require('../utils/is-node-eslint-disabled.js')
|
|
14
|
+
const doesCustomGroupMatch = require('../utils/does-custom-group-match.js')
|
|
15
15
|
const sortNodesByGroups = require('../utils/sort-nodes-by-groups.js')
|
|
16
16
|
const getNodeDecorators = require('../utils/get-node-decorators.js')
|
|
17
17
|
const createEslintRule = require('../utils/create-eslint-rule.js')
|
|
@@ -19,10 +19,10 @@ const getDecoratorName = require('../utils/get-decorator-name.js')
|
|
|
19
19
|
const reportAllErrors = require('../utils/report-all-errors.js')
|
|
20
20
|
const shouldPartition = require('../utils/should-partition.js')
|
|
21
21
|
const getGroupNumber = require('../utils/get-group-number.js')
|
|
22
|
+
const computeGroup = require('../utils/compute-group.js')
|
|
22
23
|
const rangeToDiff = require('../utils/range-to-diff.js')
|
|
23
24
|
const getSettings = require('../utils/get-settings.js')
|
|
24
25
|
const isSortable = require('../utils/is-sortable.js')
|
|
25
|
-
const useGroups = require('../utils/use-groups.js')
|
|
26
26
|
const complete = require('../utils/complete.js')
|
|
27
27
|
const matches = require('../utils/matches.js')
|
|
28
28
|
let cachedGroupsByModifiersAndSelectors = /* @__PURE__ */ new Map()
|
|
@@ -233,7 +233,6 @@ const sortClasses = createEslintRule.createEslintRule({
|
|
|
233
233
|
var _a2, _b, _c, _d, _e
|
|
234
234
|
let name
|
|
235
235
|
let dependencies = []
|
|
236
|
-
let { defineGroup, getGroup } = useGroups.useGroups(options)
|
|
237
236
|
if (member.type === 'StaticBlock') {
|
|
238
237
|
name = 'static'
|
|
239
238
|
} else if (member.type === 'TSIndexSignature') {
|
|
@@ -402,11 +401,8 @@ const sortClasses = createEslintRule.createEslintRule({
|
|
|
402
401
|
selectors,
|
|
403
402
|
modifiers,
|
|
404
403
|
})
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
}
|
|
408
|
-
for (let customGroup of options.customGroups) {
|
|
409
|
-
if (
|
|
404
|
+
let group = computeGroup.computeGroup({
|
|
405
|
+
customGroupMatcher: customGroup =>
|
|
410
406
|
doesCustomGroupMatch.doesCustomGroupMatch({
|
|
411
407
|
elementValue: memberValue,
|
|
412
408
|
elementName: name,
|
|
@@ -414,14 +410,10 @@ const sortClasses = createEslintRule.createEslintRule({
|
|
|
414
410
|
decorators,
|
|
415
411
|
modifiers,
|
|
416
412
|
selectors,
|
|
417
|
-
})
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
break
|
|
422
|
-
}
|
|
423
|
-
}
|
|
424
|
-
}
|
|
413
|
+
}),
|
|
414
|
+
predefinedGroups,
|
|
415
|
+
options,
|
|
416
|
+
})
|
|
425
417
|
let overloadSignatureGroupMemberIndex =
|
|
426
418
|
overloadSignatureGroups.findIndex(overloadSignatures =>
|
|
427
419
|
overloadSignatures.includes(member),
|
|
@@ -432,13 +424,15 @@ const sortClasses = createEslintRule.createEslintRule({
|
|
|
432
424
|
? void 0
|
|
433
425
|
: _d.at(-1)
|
|
434
426
|
let sortingNode = {
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
427
|
+
dependencyNames: [
|
|
428
|
+
getDependencyName({
|
|
429
|
+
nodeNameWithoutStartingHash: name.startsWith('#')
|
|
430
|
+
? name.slice(1)
|
|
431
|
+
: name,
|
|
432
|
+
isStatic: modifiers.includes('static'),
|
|
433
|
+
isPrivateHash,
|
|
434
|
+
}),
|
|
435
|
+
],
|
|
442
436
|
overloadSignaturesGroupId:
|
|
443
437
|
overloadSignatureGroupMemberIndex === -1
|
|
444
438
|
? null
|
|
@@ -454,9 +448,9 @@ const sortClasses = createEslintRule.createEslintRule({
|
|
|
454
448
|
eslintDisabledLines,
|
|
455
449
|
),
|
|
456
450
|
addSafetySemicolonWhenInline,
|
|
457
|
-
group: getGroup(),
|
|
458
451
|
node: member,
|
|
459
452
|
dependencies,
|
|
453
|
+
group,
|
|
460
454
|
name,
|
|
461
455
|
}
|
|
462
456
|
let lastSortingNode =
|
|
@@ -11,10 +11,10 @@ const getDecoratorName = require('../utils/get-decorator-name.js')
|
|
|
11
11
|
const createEslintRule = require('../utils/create-eslint-rule.js')
|
|
12
12
|
const reportAllErrors = require('../utils/report-all-errors.js')
|
|
13
13
|
const shouldPartition = require('../utils/should-partition.js')
|
|
14
|
+
const computeGroup = require('../utils/compute-group.js')
|
|
14
15
|
const rangeToDiff = require('../utils/range-to-diff.js')
|
|
15
16
|
const getSettings = require('../utils/get-settings.js')
|
|
16
17
|
const isSortable = require('../utils/is-sortable.js')
|
|
17
|
-
const useGroups = require('../utils/use-groups.js')
|
|
18
18
|
const complete = require('../utils/complete.js')
|
|
19
19
|
let defaultOptions = {
|
|
20
20
|
fallbackSort: { type: 'unsorted' },
|
|
@@ -163,20 +163,23 @@ let sortDecorators$1 = (context, options, decorators) => {
|
|
|
163
163
|
let formattedMembers = decorators.reduce(
|
|
164
164
|
(accumulator, decorator) => {
|
|
165
165
|
var _a
|
|
166
|
-
let { setCustomGroups, getGroup } = useGroups.useGroups(options)
|
|
167
166
|
let name = getDecoratorName.getDecoratorName({
|
|
168
167
|
sourceCode,
|
|
169
168
|
decorator,
|
|
170
169
|
})
|
|
171
|
-
|
|
170
|
+
let group = computeGroup.computeGroup({
|
|
171
|
+
predefinedGroups: [],
|
|
172
|
+
options,
|
|
173
|
+
name,
|
|
174
|
+
})
|
|
172
175
|
let sortingNode = {
|
|
173
176
|
isEslintDisabled: isNodeEslintDisabled.isNodeEslintDisabled(
|
|
174
177
|
decorator,
|
|
175
178
|
eslintDisabledLines,
|
|
176
179
|
),
|
|
177
180
|
size: rangeToDiff.rangeToDiff(decorator, sourceCode),
|
|
178
|
-
group: getGroup(),
|
|
179
181
|
node: decorator,
|
|
182
|
+
group,
|
|
180
183
|
name,
|
|
181
184
|
}
|
|
182
185
|
let lastSortingNode =
|
package/dist/rules/sort-enums.js
CHANGED
|
@@ -7,18 +7,18 @@ const validateCustomSortConfiguration = require('../utils/validate-custom-sort-c
|
|
|
7
7
|
const getCustomGroupsCompareOptions = require('../utils/get-custom-groups-compare-options.js')
|
|
8
8
|
const sortNodesByDependencies = require('../utils/sort-nodes-by-dependencies.js')
|
|
9
9
|
const getEslintDisabledLines = require('../utils/get-eslint-disabled-lines.js')
|
|
10
|
-
const doesCustomGroupMatch = require('./sort-enums/does-custom-group-match.js')
|
|
11
10
|
const isNodeEslintDisabled = require('../utils/is-node-eslint-disabled.js')
|
|
11
|
+
const doesCustomGroupMatch = require('../utils/does-custom-group-match.js')
|
|
12
12
|
const sortNodesByGroups = require('../utils/sort-nodes-by-groups.js')
|
|
13
13
|
const types = require('./sort-enums/types.js')
|
|
14
14
|
const createEslintRule = require('../utils/create-eslint-rule.js')
|
|
15
15
|
const reportAllErrors = require('../utils/report-all-errors.js')
|
|
16
16
|
const shouldPartition = require('../utils/should-partition.js')
|
|
17
17
|
const getEnumMembers = require('../utils/get-enum-members.js')
|
|
18
|
+
const computeGroup = require('../utils/compute-group.js')
|
|
18
19
|
const rangeToDiff = require('../utils/range-to-diff.js')
|
|
19
20
|
const getSettings = require('../utils/get-settings.js')
|
|
20
21
|
const isSortable = require('../utils/is-sortable.js')
|
|
21
|
-
const useGroups = require('../utils/use-groups.js')
|
|
22
22
|
const complete = require('../utils/complete.js')
|
|
23
23
|
let defaultOptions = {
|
|
24
24
|
fallbackSort: { type: 'unsorted' },
|
|
@@ -109,21 +109,18 @@ const sortEnums = createEslintRule.createEslintRule({
|
|
|
109
109
|
member.id.type === 'Literal'
|
|
110
110
|
? `${member.id.value}`
|
|
111
111
|
: sourceCode.getText(member.id)
|
|
112
|
-
let
|
|
113
|
-
|
|
114
|
-
if (
|
|
112
|
+
let group = computeGroup.computeGroup({
|
|
113
|
+
customGroupMatcher: customGroup =>
|
|
115
114
|
doesCustomGroupMatch.doesCustomGroupMatch({
|
|
116
115
|
elementValue: sourceCode.getText(member.initializer),
|
|
117
116
|
elementName: name,
|
|
117
|
+
selectors: [],
|
|
118
|
+
modifiers: [],
|
|
118
119
|
customGroup,
|
|
119
|
-
})
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
break
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
}
|
|
120
|
+
}),
|
|
121
|
+
predefinedGroups: [],
|
|
122
|
+
options,
|
|
123
|
+
})
|
|
127
124
|
let lastSortingNode =
|
|
128
125
|
(_a = accumulator.at(-1)) == null ? void 0 : _a.at(-1)
|
|
129
126
|
let sortingNode = {
|
|
@@ -142,9 +139,10 @@ const sortEnums = createEslintRule.createEslintRule({
|
|
|
142
139
|
eslintDisabledLines,
|
|
143
140
|
),
|
|
144
141
|
size: rangeToDiff.rangeToDiff(member, sourceCode),
|
|
145
|
-
|
|
142
|
+
dependencyNames: [name],
|
|
146
143
|
node: member,
|
|
147
144
|
dependencies,
|
|
145
|
+
group,
|
|
148
146
|
name,
|
|
149
147
|
}
|
|
150
148
|
if (
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' })
|
|
3
|
+
const commonJsonSchemas = require('../../utils/common-json-schemas.js')
|
|
4
|
+
let allSelectors = ['export']
|
|
5
|
+
let allModifiers = ['value', 'type']
|
|
6
|
+
let singleCustomGroupJsonSchema = {
|
|
7
|
+
modifiers:
|
|
8
|
+
commonJsonSchemas.buildCustomGroupModifiersJsonSchema(allModifiers),
|
|
9
|
+
selector: commonJsonSchemas.buildCustomGroupSelectorJsonSchema(allSelectors),
|
|
10
|
+
elementNamePattern: commonJsonSchemas.regexJsonSchema,
|
|
11
|
+
}
|
|
12
|
+
exports.allModifiers = allModifiers
|
|
13
|
+
exports.allSelectors = allSelectors
|
|
14
|
+
exports.singleCustomGroupJsonSchema = singleCustomGroupJsonSchema
|
|
@@ -1,27 +1,38 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
const commonJsonSchemas = require('../utils/common-json-schemas.js')
|
|
3
|
+
const reportErrors = require('../utils/report-errors.js')
|
|
4
|
+
const validateNewlinesAndPartitionConfiguration = require('../utils/validate-newlines-and-partition-configuration.js')
|
|
5
|
+
const getCustomGroupsCompareOptions = require('../utils/get-custom-groups-compare-options.js')
|
|
6
|
+
const validateGeneratedGroupsConfiguration = require('../utils/validate-generated-groups-configuration.js')
|
|
3
7
|
const validateCustomSortConfiguration = require('../utils/validate-custom-sort-configuration.js')
|
|
8
|
+
const generatePredefinedGroups = require('../utils/generate-predefined-groups.js')
|
|
4
9
|
const getEslintDisabledLines = require('../utils/get-eslint-disabled-lines.js')
|
|
5
10
|
const isNodeEslintDisabled = require('../utils/is-node-eslint-disabled.js')
|
|
11
|
+
const doesCustomGroupMatch = require('../utils/does-custom-group-match.js')
|
|
12
|
+
const types = require('./sort-exports/types.js')
|
|
13
|
+
const sortNodesByGroups = require('../utils/sort-nodes-by-groups.js')
|
|
6
14
|
const createEslintRule = require('../utils/create-eslint-rule.js')
|
|
7
15
|
const reportAllErrors = require('../utils/report-all-errors.js')
|
|
8
16
|
const shouldPartition = require('../utils/should-partition.js')
|
|
17
|
+
const computeGroup = require('../utils/compute-group.js')
|
|
9
18
|
const rangeToDiff = require('../utils/range-to-diff.js')
|
|
10
|
-
const reportErrors = require('../utils/report-errors.js')
|
|
11
19
|
const getSettings = require('../utils/get-settings.js')
|
|
12
|
-
const sortNodes = require('../utils/sort-nodes.js')
|
|
13
20
|
const complete = require('../utils/complete.js')
|
|
21
|
+
let cachedGroupsByModifiersAndSelectors = /* @__PURE__ */ new Map()
|
|
14
22
|
let defaultOptions = {
|
|
15
23
|
fallbackSort: { type: 'unsorted' },
|
|
16
24
|
specialCharacters: 'keep',
|
|
17
25
|
partitionByComment: false,
|
|
26
|
+
newlinesBetween: 'ignore',
|
|
18
27
|
partitionByNewLine: false,
|
|
19
28
|
type: 'alphabetical',
|
|
20
29
|
groupKind: 'mixed',
|
|
30
|
+
customGroups: [],
|
|
21
31
|
ignoreCase: true,
|
|
22
32
|
locales: 'en-US',
|
|
23
33
|
alphabet: '',
|
|
24
34
|
order: 'asc',
|
|
35
|
+
groups: [],
|
|
25
36
|
}
|
|
26
37
|
const sortExports = createEslintRule.createEslintRule({
|
|
27
38
|
create: context => {
|
|
@@ -32,14 +43,46 @@ const sortExports = createEslintRule.createEslintRule({
|
|
|
32
43
|
defaultOptions,
|
|
33
44
|
)
|
|
34
45
|
validateCustomSortConfiguration.validateCustomSortConfiguration(options)
|
|
46
|
+
validateGeneratedGroupsConfiguration.validateGeneratedGroupsConfiguration({
|
|
47
|
+
modifiers: types.allModifiers,
|
|
48
|
+
selectors: types.allSelectors,
|
|
49
|
+
options,
|
|
50
|
+
})
|
|
51
|
+
validateNewlinesAndPartitionConfiguration.validateNewlinesAndPartitionConfiguration(
|
|
52
|
+
options,
|
|
53
|
+
)
|
|
35
54
|
let { sourceCode, id } = context
|
|
36
55
|
let eslintDisabledLines = getEslintDisabledLines.getEslintDisabledLines({
|
|
37
56
|
ruleName: id,
|
|
38
57
|
sourceCode,
|
|
39
58
|
})
|
|
40
|
-
let
|
|
59
|
+
let formattedMembers = [[]]
|
|
41
60
|
let registerNode = node => {
|
|
42
61
|
var _a
|
|
62
|
+
let selector = 'export'
|
|
63
|
+
let modifiers = []
|
|
64
|
+
if (node.exportKind === 'value') {
|
|
65
|
+
modifiers.push('value')
|
|
66
|
+
} else {
|
|
67
|
+
modifiers.push('type')
|
|
68
|
+
}
|
|
69
|
+
let name = node.source.value
|
|
70
|
+
let predefinedGroups = generatePredefinedGroups.generatePredefinedGroups({
|
|
71
|
+
cache: cachedGroupsByModifiersAndSelectors,
|
|
72
|
+
selectors: [selector],
|
|
73
|
+
modifiers,
|
|
74
|
+
})
|
|
75
|
+
let group = computeGroup.computeGroup({
|
|
76
|
+
customGroupMatcher: customGroup =>
|
|
77
|
+
doesCustomGroupMatch.doesCustomGroupMatch({
|
|
78
|
+
selectors: [selector],
|
|
79
|
+
elementName: name,
|
|
80
|
+
customGroup,
|
|
81
|
+
modifiers,
|
|
82
|
+
}),
|
|
83
|
+
predefinedGroups,
|
|
84
|
+
options,
|
|
85
|
+
})
|
|
43
86
|
let sortingNode = {
|
|
44
87
|
isEslintDisabled: isNodeEslintDisabled.isNodeEslintDisabled(
|
|
45
88
|
node,
|
|
@@ -48,10 +91,11 @@ const sortExports = createEslintRule.createEslintRule({
|
|
|
48
91
|
groupKind: node.exportKind === 'value' ? 'value' : 'type',
|
|
49
92
|
size: rangeToDiff.rangeToDiff(node, sourceCode),
|
|
50
93
|
addSafetySemicolonWhenInline: true,
|
|
51
|
-
|
|
94
|
+
group,
|
|
95
|
+
name,
|
|
52
96
|
node,
|
|
53
97
|
}
|
|
54
|
-
let lastNode = (_a =
|
|
98
|
+
let lastNode = (_a = formattedMembers.at(-1)) == null ? void 0 : _a.at(-1)
|
|
55
99
|
if (
|
|
56
100
|
shouldPartition.shouldPartition({
|
|
57
101
|
lastSortingNode: lastNode,
|
|
@@ -60,9 +104,9 @@ const sortExports = createEslintRule.createEslintRule({
|
|
|
60
104
|
options,
|
|
61
105
|
})
|
|
62
106
|
) {
|
|
63
|
-
|
|
107
|
+
formattedMembers.push([])
|
|
64
108
|
}
|
|
65
|
-
|
|
109
|
+
formattedMembers.at(-1).push(sortingNode)
|
|
66
110
|
}
|
|
67
111
|
return {
|
|
68
112
|
'Program:exit': () => {
|
|
@@ -74,7 +118,7 @@ const sortExports = createEslintRule.createEslintRule({
|
|
|
74
118
|
} else {
|
|
75
119
|
groupKindOrder = ['any']
|
|
76
120
|
}
|
|
77
|
-
for (let nodes of
|
|
121
|
+
for (let nodes of formattedMembers) {
|
|
78
122
|
let filteredGroupKindNodes = groupKindOrder.map(groupKind =>
|
|
79
123
|
nodes.filter(
|
|
80
124
|
currentNode =>
|
|
@@ -83,14 +127,21 @@ const sortExports = createEslintRule.createEslintRule({
|
|
|
83
127
|
)
|
|
84
128
|
let sortNodesExcludingEslintDisabled = ignoreEslintDisabledNodes =>
|
|
85
129
|
filteredGroupKindNodes.flatMap(groupedNodes =>
|
|
86
|
-
|
|
130
|
+
sortNodesByGroups.sortNodesByGroups({
|
|
131
|
+
getOptionsByGroupNumber:
|
|
132
|
+
getCustomGroupsCompareOptions.buildGetCustomGroupOverriddenOptionsFunction(
|
|
133
|
+
options,
|
|
134
|
+
),
|
|
87
135
|
ignoreEslintDisabledNodes,
|
|
136
|
+
groups: options.groups,
|
|
88
137
|
nodes: groupedNodes,
|
|
89
|
-
options,
|
|
90
138
|
}),
|
|
91
139
|
)
|
|
92
140
|
reportAllErrors.reportAllErrors({
|
|
93
141
|
availableMessageIds: {
|
|
142
|
+
missedSpacingBetweenMembers: 'missedSpacingBetweenExports',
|
|
143
|
+
extraSpacingBetweenMembers: 'extraSpacingBetweenExports',
|
|
144
|
+
unexpectedGroupOrder: 'unexpectedExportsGroupOrder',
|
|
94
145
|
unexpectedOrder: 'unexpectedExportsOrder',
|
|
95
146
|
},
|
|
96
147
|
sortNodesExcludingEslintDisabled,
|
|
@@ -110,30 +161,40 @@ const sortExports = createEslintRule.createEslintRule({
|
|
|
110
161
|
}
|
|
111
162
|
},
|
|
112
163
|
meta: {
|
|
113
|
-
schema:
|
|
114
|
-
{
|
|
164
|
+
schema: {
|
|
165
|
+
items: {
|
|
115
166
|
properties: {
|
|
116
167
|
...commonJsonSchemas.commonJsonSchemas,
|
|
117
168
|
groupKind: {
|
|
169
|
+
description: '[DEPRECATED] Specifies top-level groups.',
|
|
118
170
|
enum: ['mixed', 'values-first', 'types-first'],
|
|
119
|
-
description: 'Specifies top-level groups.',
|
|
120
171
|
type: 'string',
|
|
121
172
|
},
|
|
173
|
+
customGroups: commonJsonSchemas.buildCustomGroupsArrayJsonSchema({
|
|
174
|
+
singleCustomGroupJsonSchema: types.singleCustomGroupJsonSchema,
|
|
175
|
+
}),
|
|
122
176
|
partitionByComment: commonJsonSchemas.partitionByCommentJsonSchema,
|
|
123
177
|
partitionByNewLine: commonJsonSchemas.partitionByNewLineJsonSchema,
|
|
178
|
+
newlinesBetween: commonJsonSchemas.newlinesBetweenJsonSchema,
|
|
179
|
+
groups: commonJsonSchemas.groupsJsonSchema,
|
|
124
180
|
},
|
|
125
181
|
additionalProperties: false,
|
|
126
182
|
type: 'object',
|
|
127
183
|
},
|
|
128
|
-
|
|
184
|
+
uniqueItems: true,
|
|
185
|
+
type: 'array',
|
|
186
|
+
},
|
|
187
|
+
messages: {
|
|
188
|
+
missedSpacingBetweenExports: reportErrors.MISSED_SPACING_ERROR,
|
|
189
|
+
extraSpacingBetweenExports: reportErrors.EXTRA_SPACING_ERROR,
|
|
190
|
+
unexpectedExportsGroupOrder: reportErrors.GROUP_ORDER_ERROR,
|
|
191
|
+
unexpectedExportsOrder: reportErrors.ORDER_ERROR,
|
|
192
|
+
},
|
|
129
193
|
docs: {
|
|
130
194
|
url: 'https://perfectionist.dev/rules/sort-exports',
|
|
131
195
|
description: 'Enforce sorted exports.',
|
|
132
196
|
recommended: true,
|
|
133
197
|
},
|
|
134
|
-
messages: {
|
|
135
|
-
unexpectedExportsOrder: reportErrors.ORDER_ERROR,
|
|
136
|
-
},
|
|
137
198
|
type: 'suggestion',
|
|
138
199
|
fixable: 'code',
|
|
139
200
|
},
|
|
@@ -8,10 +8,10 @@ const reportErrors = require('../utils/report-errors.js')
|
|
|
8
8
|
const sortNodesByGroups = require('../utils/sort-nodes-by-groups.js')
|
|
9
9
|
const createEslintRule = require('../utils/create-eslint-rule.js')
|
|
10
10
|
const reportAllErrors = require('../utils/report-all-errors.js')
|
|
11
|
+
const computeGroup = require('../utils/compute-group.js')
|
|
11
12
|
const rangeToDiff = require('../utils/range-to-diff.js')
|
|
12
13
|
const getSettings = require('../utils/get-settings.js')
|
|
13
14
|
const isSortable = require('../utils/is-sortable.js')
|
|
14
|
-
const useGroups = require('../utils/use-groups.js')
|
|
15
15
|
const complete = require('../utils/complete.js')
|
|
16
16
|
let defaultOptions = {
|
|
17
17
|
fallbackSort: { type: 'unsorted' },
|
|
@@ -83,8 +83,11 @@ let sortHeritageClauses$1 = (context, options, heritageClauses) => {
|
|
|
83
83
|
})
|
|
84
84
|
let nodes = heritageClauses.map(heritageClause => {
|
|
85
85
|
let name = getHeritageClauseExpressionName(heritageClause.expression)
|
|
86
|
-
let
|
|
87
|
-
|
|
86
|
+
let group = computeGroup.computeGroup({
|
|
87
|
+
predefinedGroups: [],
|
|
88
|
+
options,
|
|
89
|
+
name,
|
|
90
|
+
})
|
|
88
91
|
return {
|
|
89
92
|
isEslintDisabled: isNodeEslintDisabled.isNodeEslintDisabled(
|
|
90
93
|
heritageClause,
|
|
@@ -92,7 +95,7 @@ let sortHeritageClauses$1 = (context, options, heritageClauses) => {
|
|
|
92
95
|
),
|
|
93
96
|
size: rangeToDiff.rangeToDiff(heritageClause, sourceCode),
|
|
94
97
|
node: heritageClause,
|
|
95
|
-
group
|
|
98
|
+
group,
|
|
96
99
|
name,
|
|
97
100
|
}
|
|
98
101
|
})
|