eslint-plugin-perfectionist 4.10.0 → 4.11.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 +5 -5
- package/dist/rules/sort-classes.js +3 -4
- package/dist/rules/sort-decorators.js +2 -3
- package/dist/rules/sort-enums.js +5 -4
- package/dist/rules/sort-exports/types.js +14 -0
- package/dist/rules/sort-exports.js +88 -20
- package/dist/rules/sort-heritage-clauses.js +2 -3
- package/dist/rules/sort-imports.js +3 -4
- package/dist/rules/{sort-object-types → sort-jsx-props}/does-custom-group-match.js +2 -2
- package/dist/rules/sort-jsx-props/types.js +15 -0
- package/dist/rules/sort-jsx-props.js +74 -19
- package/dist/rules/sort-maps.js +5 -4
- package/dist/rules/sort-modules.js +3 -4
- package/dist/rules/sort-named-exports.js +2 -3
- package/dist/rules/sort-named-imports.js +2 -3
- package/dist/rules/sort-object-types.js +8 -9
- package/dist/rules/sort-objects.js +11 -6
- package/dist/rules/sort-switch-case.js +1 -2
- package/dist/rules/sort-union-types.js +2 -3
- package/dist/rules/sort-variable-declarations.js +2 -3
- package/dist/utils/common-json-schemas.js +3 -0
- package/dist/utils/compare.js +3 -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 +41 -9
- package/dist/utils/matches.js +5 -0
- package/dist/utils/report-all-errors.js +34 -4
- package/dist/utils/sort-nodes-by-dependencies.js +8 -25
- 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-objects/does-custom-group-match.js +0 -49
- package/dist/utils/get-source-code.js +0 -7
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,16 +10,15 @@ 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 getSourceCode = require('../utils/get-source-code.js')
|
|
23
22
|
const rangeToDiff = require('../utils/range-to-diff.js')
|
|
24
23
|
const getSettings = require('../utils/get-settings.js')
|
|
25
24
|
const isSortable = require('../utils/is-sortable.js')
|
|
@@ -47,8 +46,8 @@ let jsonSchema = {
|
|
|
47
46
|
properties: {
|
|
48
47
|
...commonJsonSchemas.commonJsonSchemas,
|
|
49
48
|
groupKind: {
|
|
49
|
+
description: '[DEPRECATED] Specifies top-level groups.',
|
|
50
50
|
enum: ['mixed', 'literals-first', 'spreads-first'],
|
|
51
|
-
description: 'Specifies top-level groups.',
|
|
52
51
|
type: 'string',
|
|
53
52
|
},
|
|
54
53
|
customGroups: commonJsonSchemas.buildCustomGroupsArrayJsonSchema({
|
|
@@ -118,7 +117,7 @@ let sortArray = ({ availableMessageIds, elements, context }) => {
|
|
|
118
117
|
if (!isSortable.isSortable(elements)) {
|
|
119
118
|
return
|
|
120
119
|
}
|
|
121
|
-
let sourceCode =
|
|
120
|
+
let { sourceCode, id } = context
|
|
122
121
|
let settings = getSettings.getSettings(context.settings)
|
|
123
122
|
let matchedContextOptions =
|
|
124
123
|
getMatchingContextOptions.getMatchingContextOptions({
|
|
@@ -142,7 +141,7 @@ let sortArray = ({ availableMessageIds, elements, context }) => {
|
|
|
142
141
|
options,
|
|
143
142
|
)
|
|
144
143
|
let eslintDisabledLines = getEslintDisabledLines.getEslintDisabledLines({
|
|
145
|
-
ruleName:
|
|
144
|
+
ruleName: id,
|
|
146
145
|
sourceCode,
|
|
147
146
|
})
|
|
148
147
|
let formattedMembers = elements.reduce(
|
|
@@ -175,6 +174,7 @@ let sortArray = ({ availableMessageIds, elements, context }) => {
|
|
|
175
174
|
doesCustomGroupMatch.doesCustomGroupMatch({
|
|
176
175
|
selectors: [selector],
|
|
177
176
|
elementName: name,
|
|
177
|
+
modifiers: [],
|
|
178
178
|
customGroup,
|
|
179
179
|
})
|
|
180
180
|
) {
|
|
@@ -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,7 +19,6 @@ 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 getSourceCode = require('../utils/get-source-code.js')
|
|
23
22
|
const rangeToDiff = require('../utils/range-to-diff.js')
|
|
24
23
|
const getSettings = require('../utils/get-settings.js')
|
|
25
24
|
const isSortable = require('../utils/is-sortable.js')
|
|
@@ -89,9 +88,9 @@ const sortClasses = createEslintRule.createEslintRule({
|
|
|
89
88
|
validateNewlinesAndPartitionConfiguration.validateNewlinesAndPartitionConfiguration(
|
|
90
89
|
options,
|
|
91
90
|
)
|
|
92
|
-
let sourceCode =
|
|
91
|
+
let { sourceCode, id } = context
|
|
93
92
|
let eslintDisabledLines = getEslintDisabledLines.getEslintDisabledLines({
|
|
94
|
-
ruleName:
|
|
93
|
+
ruleName: id,
|
|
95
94
|
sourceCode,
|
|
96
95
|
})
|
|
97
96
|
let className = (_a = node.parent.id) == null ? void 0 : _a.name
|
|
@@ -11,7 +11,6 @@ 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 getSourceCode = require('../utils/get-source-code.js')
|
|
15
14
|
const rangeToDiff = require('../utils/range-to-diff.js')
|
|
16
15
|
const getSettings = require('../utils/get-settings.js')
|
|
17
16
|
const isSortable = require('../utils/is-sortable.js')
|
|
@@ -156,9 +155,9 @@ let sortDecorators$1 = (context, options, decorators) => {
|
|
|
156
155
|
if (!isSortable.isSortable(decorators)) {
|
|
157
156
|
return
|
|
158
157
|
}
|
|
159
|
-
let sourceCode =
|
|
158
|
+
let { sourceCode, id } = context
|
|
160
159
|
let eslintDisabledLines = getEslintDisabledLines.getEslintDisabledLines({
|
|
161
|
-
ruleName:
|
|
160
|
+
ruleName: id,
|
|
162
161
|
sourceCode,
|
|
163
162
|
})
|
|
164
163
|
let formattedMembers = decorators.reduce(
|
package/dist/rules/sort-enums.js
CHANGED
|
@@ -7,15 +7,14 @@ 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 getSourceCode = require('../utils/get-source-code.js')
|
|
19
18
|
const rangeToDiff = require('../utils/range-to-diff.js')
|
|
20
19
|
const getSettings = require('../utils/get-settings.js')
|
|
21
20
|
const isSortable = require('../utils/is-sortable.js')
|
|
@@ -64,9 +63,9 @@ const sortEnums = createEslintRule.createEslintRule({
|
|
|
64
63
|
validateNewlinesAndPartitionConfiguration.validateNewlinesAndPartitionConfiguration(
|
|
65
64
|
options,
|
|
66
65
|
)
|
|
67
|
-
let sourceCode =
|
|
66
|
+
let { sourceCode, id } = context
|
|
68
67
|
let eslintDisabledLines = getEslintDisabledLines.getEslintDisabledLines({
|
|
69
|
-
ruleName:
|
|
68
|
+
ruleName: id,
|
|
70
69
|
sourceCode,
|
|
71
70
|
})
|
|
72
71
|
let extractDependencies = (expression, enumName) => {
|
|
@@ -116,6 +115,8 @@ const sortEnums = createEslintRule.createEslintRule({
|
|
|
116
115
|
doesCustomGroupMatch.doesCustomGroupMatch({
|
|
117
116
|
elementValue: sourceCode.getText(member.initializer),
|
|
118
117
|
elementName: name,
|
|
118
|
+
selectors: [],
|
|
119
|
+
modifiers: [],
|
|
119
120
|
customGroup,
|
|
120
121
|
})
|
|
121
122
|
) {
|
|
@@ -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,28 +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')
|
|
9
|
-
const getSourceCode = require('../utils/get-source-code.js')
|
|
10
17
|
const rangeToDiff = require('../utils/range-to-diff.js')
|
|
11
|
-
const reportErrors = require('../utils/report-errors.js')
|
|
12
18
|
const getSettings = require('../utils/get-settings.js')
|
|
13
|
-
const
|
|
19
|
+
const useGroups = require('../utils/use-groups.js')
|
|
14
20
|
const complete = require('../utils/complete.js')
|
|
21
|
+
let cachedGroupsByModifiersAndSelectors = /* @__PURE__ */ new Map()
|
|
15
22
|
let defaultOptions = {
|
|
16
23
|
fallbackSort: { type: 'unsorted' },
|
|
17
24
|
specialCharacters: 'keep',
|
|
18
25
|
partitionByComment: false,
|
|
26
|
+
newlinesBetween: 'ignore',
|
|
19
27
|
partitionByNewLine: false,
|
|
20
28
|
type: 'alphabetical',
|
|
21
29
|
groupKind: 'mixed',
|
|
30
|
+
customGroups: [],
|
|
22
31
|
ignoreCase: true,
|
|
23
32
|
locales: 'en-US',
|
|
24
33
|
alphabet: '',
|
|
25
34
|
order: 'asc',
|
|
35
|
+
groups: [],
|
|
26
36
|
}
|
|
27
37
|
const sortExports = createEslintRule.createEslintRule({
|
|
28
38
|
create: context => {
|
|
@@ -33,14 +43,54 @@ const sortExports = createEslintRule.createEslintRule({
|
|
|
33
43
|
defaultOptions,
|
|
34
44
|
)
|
|
35
45
|
validateCustomSortConfiguration.validateCustomSortConfiguration(options)
|
|
36
|
-
|
|
46
|
+
validateGeneratedGroupsConfiguration.validateGeneratedGroupsConfiguration({
|
|
47
|
+
modifiers: types.allModifiers,
|
|
48
|
+
selectors: types.allSelectors,
|
|
49
|
+
options,
|
|
50
|
+
})
|
|
51
|
+
validateNewlinesAndPartitionConfiguration.validateNewlinesAndPartitionConfiguration(
|
|
52
|
+
options,
|
|
53
|
+
)
|
|
54
|
+
let { sourceCode, id } = context
|
|
37
55
|
let eslintDisabledLines = getEslintDisabledLines.getEslintDisabledLines({
|
|
38
|
-
ruleName:
|
|
56
|
+
ruleName: id,
|
|
39
57
|
sourceCode,
|
|
40
58
|
})
|
|
41
|
-
let
|
|
59
|
+
let formattedMembers = [[]]
|
|
42
60
|
let registerNode = node => {
|
|
43
61
|
var _a
|
|
62
|
+
let { defineGroup, getGroup } = useGroups.useGroups(options)
|
|
63
|
+
let selector = 'export'
|
|
64
|
+
let modifiers = []
|
|
65
|
+
if (node.exportKind === 'value') {
|
|
66
|
+
modifiers.push('value')
|
|
67
|
+
} else {
|
|
68
|
+
modifiers.push('type')
|
|
69
|
+
}
|
|
70
|
+
let predefinedGroups = generatePredefinedGroups.generatePredefinedGroups({
|
|
71
|
+
cache: cachedGroupsByModifiersAndSelectors,
|
|
72
|
+
selectors: [selector],
|
|
73
|
+
modifiers,
|
|
74
|
+
})
|
|
75
|
+
for (let predefinedGroup of predefinedGroups) {
|
|
76
|
+
defineGroup(predefinedGroup)
|
|
77
|
+
}
|
|
78
|
+
let name = node.source.value
|
|
79
|
+
for (let customGroup of options.customGroups) {
|
|
80
|
+
if (
|
|
81
|
+
doesCustomGroupMatch.doesCustomGroupMatch({
|
|
82
|
+
selectors: [selector],
|
|
83
|
+
elementName: name,
|
|
84
|
+
customGroup,
|
|
85
|
+
modifiers,
|
|
86
|
+
})
|
|
87
|
+
) {
|
|
88
|
+
defineGroup(customGroup.groupName, true)
|
|
89
|
+
if (getGroup() === customGroup.groupName) {
|
|
90
|
+
break
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
44
94
|
let sortingNode = {
|
|
45
95
|
isEslintDisabled: isNodeEslintDisabled.isNodeEslintDisabled(
|
|
46
96
|
node,
|
|
@@ -49,10 +99,11 @@ const sortExports = createEslintRule.createEslintRule({
|
|
|
49
99
|
groupKind: node.exportKind === 'value' ? 'value' : 'type',
|
|
50
100
|
size: rangeToDiff.rangeToDiff(node, sourceCode),
|
|
51
101
|
addSafetySemicolonWhenInline: true,
|
|
52
|
-
|
|
102
|
+
group: getGroup(),
|
|
103
|
+
name,
|
|
53
104
|
node,
|
|
54
105
|
}
|
|
55
|
-
let lastNode = (_a =
|
|
106
|
+
let lastNode = (_a = formattedMembers.at(-1)) == null ? void 0 : _a.at(-1)
|
|
56
107
|
if (
|
|
57
108
|
shouldPartition.shouldPartition({
|
|
58
109
|
lastSortingNode: lastNode,
|
|
@@ -61,9 +112,9 @@ const sortExports = createEslintRule.createEslintRule({
|
|
|
61
112
|
options,
|
|
62
113
|
})
|
|
63
114
|
) {
|
|
64
|
-
|
|
115
|
+
formattedMembers.push([])
|
|
65
116
|
}
|
|
66
|
-
|
|
117
|
+
formattedMembers.at(-1).push(sortingNode)
|
|
67
118
|
}
|
|
68
119
|
return {
|
|
69
120
|
'Program:exit': () => {
|
|
@@ -75,7 +126,7 @@ const sortExports = createEslintRule.createEslintRule({
|
|
|
75
126
|
} else {
|
|
76
127
|
groupKindOrder = ['any']
|
|
77
128
|
}
|
|
78
|
-
for (let nodes of
|
|
129
|
+
for (let nodes of formattedMembers) {
|
|
79
130
|
let filteredGroupKindNodes = groupKindOrder.map(groupKind =>
|
|
80
131
|
nodes.filter(
|
|
81
132
|
currentNode =>
|
|
@@ -84,14 +135,21 @@ const sortExports = createEslintRule.createEslintRule({
|
|
|
84
135
|
)
|
|
85
136
|
let sortNodesExcludingEslintDisabled = ignoreEslintDisabledNodes =>
|
|
86
137
|
filteredGroupKindNodes.flatMap(groupedNodes =>
|
|
87
|
-
|
|
138
|
+
sortNodesByGroups.sortNodesByGroups({
|
|
139
|
+
getOptionsByGroupNumber:
|
|
140
|
+
getCustomGroupsCompareOptions.buildGetCustomGroupOverriddenOptionsFunction(
|
|
141
|
+
options,
|
|
142
|
+
),
|
|
88
143
|
ignoreEslintDisabledNodes,
|
|
144
|
+
groups: options.groups,
|
|
89
145
|
nodes: groupedNodes,
|
|
90
|
-
options,
|
|
91
146
|
}),
|
|
92
147
|
)
|
|
93
148
|
reportAllErrors.reportAllErrors({
|
|
94
149
|
availableMessageIds: {
|
|
150
|
+
missedSpacingBetweenMembers: 'missedSpacingBetweenExports',
|
|
151
|
+
extraSpacingBetweenMembers: 'extraSpacingBetweenExports',
|
|
152
|
+
unexpectedGroupOrder: 'unexpectedExportsGroupOrder',
|
|
95
153
|
unexpectedOrder: 'unexpectedExportsOrder',
|
|
96
154
|
},
|
|
97
155
|
sortNodesExcludingEslintDisabled,
|
|
@@ -111,30 +169,40 @@ const sortExports = createEslintRule.createEslintRule({
|
|
|
111
169
|
}
|
|
112
170
|
},
|
|
113
171
|
meta: {
|
|
114
|
-
schema:
|
|
115
|
-
{
|
|
172
|
+
schema: {
|
|
173
|
+
items: {
|
|
116
174
|
properties: {
|
|
117
175
|
...commonJsonSchemas.commonJsonSchemas,
|
|
118
176
|
groupKind: {
|
|
177
|
+
description: '[DEPRECATED] Specifies top-level groups.',
|
|
119
178
|
enum: ['mixed', 'values-first', 'types-first'],
|
|
120
|
-
description: 'Specifies top-level groups.',
|
|
121
179
|
type: 'string',
|
|
122
180
|
},
|
|
181
|
+
customGroups: commonJsonSchemas.buildCustomGroupsArrayJsonSchema({
|
|
182
|
+
singleCustomGroupJsonSchema: types.singleCustomGroupJsonSchema,
|
|
183
|
+
}),
|
|
123
184
|
partitionByComment: commonJsonSchemas.partitionByCommentJsonSchema,
|
|
124
185
|
partitionByNewLine: commonJsonSchemas.partitionByNewLineJsonSchema,
|
|
186
|
+
newlinesBetween: commonJsonSchemas.newlinesBetweenJsonSchema,
|
|
187
|
+
groups: commonJsonSchemas.groupsJsonSchema,
|
|
125
188
|
},
|
|
126
189
|
additionalProperties: false,
|
|
127
190
|
type: 'object',
|
|
128
191
|
},
|
|
129
|
-
|
|
192
|
+
uniqueItems: true,
|
|
193
|
+
type: 'array',
|
|
194
|
+
},
|
|
195
|
+
messages: {
|
|
196
|
+
missedSpacingBetweenExports: reportErrors.MISSED_SPACING_ERROR,
|
|
197
|
+
extraSpacingBetweenExports: reportErrors.EXTRA_SPACING_ERROR,
|
|
198
|
+
unexpectedExportsGroupOrder: reportErrors.GROUP_ORDER_ERROR,
|
|
199
|
+
unexpectedExportsOrder: reportErrors.ORDER_ERROR,
|
|
200
|
+
},
|
|
130
201
|
docs: {
|
|
131
202
|
url: 'https://perfectionist.dev/rules/sort-exports',
|
|
132
203
|
description: 'Enforce sorted exports.',
|
|
133
204
|
recommended: true,
|
|
134
205
|
},
|
|
135
|
-
messages: {
|
|
136
|
-
unexpectedExportsOrder: reportErrors.ORDER_ERROR,
|
|
137
|
-
},
|
|
138
206
|
type: 'suggestion',
|
|
139
207
|
fixable: 'code',
|
|
140
208
|
},
|
|
@@ -8,7 +8,6 @@ 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 getSourceCode = require('../utils/get-source-code.js')
|
|
12
11
|
const rangeToDiff = require('../utils/range-to-diff.js')
|
|
13
12
|
const getSettings = require('../utils/get-settings.js')
|
|
14
13
|
const isSortable = require('../utils/is-sortable.js')
|
|
@@ -77,9 +76,9 @@ let sortHeritageClauses$1 = (context, options, heritageClauses) => {
|
|
|
77
76
|
if (!isSortable.isSortable(heritageClauses)) {
|
|
78
77
|
return
|
|
79
78
|
}
|
|
80
|
-
let sourceCode =
|
|
79
|
+
let { sourceCode, id } = context
|
|
81
80
|
let eslintDisabledLines = getEslintDisabledLines.getEslintDisabledLines({
|
|
82
|
-
ruleName:
|
|
81
|
+
ruleName: id,
|
|
83
82
|
sourceCode,
|
|
84
83
|
})
|
|
85
84
|
let nodes = heritageClauses.map(heritageClause => {
|
|
@@ -15,7 +15,6 @@ const sortNodesByGroups = require('../utils/sort-nodes-by-groups.js')
|
|
|
15
15
|
const createEslintRule = require('../utils/create-eslint-rule.js')
|
|
16
16
|
const reportAllErrors = require('../utils/report-all-errors.js')
|
|
17
17
|
const shouldPartition = require('../utils/should-partition.js')
|
|
18
|
-
const getSourceCode = require('../utils/get-source-code.js')
|
|
19
18
|
const rangeToDiff = require('../utils/range-to-diff.js')
|
|
20
19
|
const getSettings = require('../utils/get-settings.js')
|
|
21
20
|
const isSortable = require('../utils/is-sortable.js')
|
|
@@ -118,9 +117,9 @@ const sortImports = createEslintRule.createEslintRule({
|
|
|
118
117
|
)
|
|
119
118
|
}
|
|
120
119
|
}
|
|
121
|
-
let sourceCode =
|
|
120
|
+
let { sourceCode, filename, id } = context
|
|
122
121
|
let eslintDisabledLines = getEslintDisabledLines.getEslintDisabledLines({
|
|
123
|
-
ruleName:
|
|
122
|
+
ruleName: id,
|
|
124
123
|
sourceCode,
|
|
125
124
|
})
|
|
126
125
|
let sortingNodes = []
|
|
@@ -221,7 +220,7 @@ const sortImports = createEslintRule.createEslintRule({
|
|
|
221
220
|
}
|
|
222
221
|
let resolution = typescriptImport.resolveModuleName(
|
|
223
222
|
value,
|
|
224
|
-
|
|
223
|
+
filename,
|
|
225
224
|
tsConfigOutput.compilerOptions,
|
|
226
225
|
typescriptImport.sys,
|
|
227
226
|
tsConfigOutput.cache,
|
|
@@ -36,11 +36,11 @@ let doesCustomGroupMatch = props => {
|
|
|
36
36
|
'elementValuePattern' in props.customGroup &&
|
|
37
37
|
props.customGroup.elementValuePattern
|
|
38
38
|
) {
|
|
39
|
-
let
|
|
39
|
+
let matchesElementNamePattern = matches.matches(
|
|
40
40
|
props.elementValue ?? '',
|
|
41
41
|
props.customGroup.elementValuePattern,
|
|
42
42
|
)
|
|
43
|
-
if (!
|
|
43
|
+
if (!matchesElementNamePattern) {
|
|
44
44
|
return false
|
|
45
45
|
}
|
|
46
46
|
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' })
|
|
3
|
+
const commonJsonSchemas = require('../../utils/common-json-schemas.js')
|
|
4
|
+
let allSelectors = ['multiline', 'prop', 'shorthand']
|
|
5
|
+
let allModifiers = ['shorthand', 'multiline']
|
|
6
|
+
let singleCustomGroupJsonSchema = {
|
|
7
|
+
modifiers:
|
|
8
|
+
commonJsonSchemas.buildCustomGroupModifiersJsonSchema(allModifiers),
|
|
9
|
+
selector: commonJsonSchemas.buildCustomGroupSelectorJsonSchema(allSelectors),
|
|
10
|
+
elementValuePattern: commonJsonSchemas.regexJsonSchema,
|
|
11
|
+
elementNamePattern: commonJsonSchemas.regexJsonSchema,
|
|
12
|
+
}
|
|
13
|
+
exports.allModifiers = allModifiers
|
|
14
|
+
exports.allSelectors = allSelectors
|
|
15
|
+
exports.singleCustomGroupJsonSchema = singleCustomGroupJsonSchema
|