eslint-plugin-perfectionist 5.2.0 → 5.3.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/package.json.js +1 -1
- package/dist/rules/sort-array-includes/types.d.ts +15 -18
- package/dist/rules/sort-array-includes/types.js +2 -2
- package/dist/rules/sort-array-includes.js +13 -10
- package/dist/rules/sort-classes/compute-dependencies.d.ts +24 -0
- package/dist/rules/sort-classes/compute-dependencies.js +147 -0
- package/dist/rules/sort-classes/compute-dependency-name.d.ts +9 -0
- package/dist/rules/sort-classes/compute-dependency-name.js +8 -0
- package/dist/rules/sort-classes/compute-identifier-name-details.d.ts +16 -0
- package/dist/rules/sort-classes/compute-identifier-name-details.js +27 -0
- package/dist/rules/sort-classes/get-overload-signature-groups.js +4 -3
- package/dist/rules/sort-classes/node-info/common-modifiers.d.ts +39 -0
- package/dist/rules/sort-classes/node-info/common-modifiers.js +62 -0
- package/dist/rules/sort-classes/node-info/compute-accessor-details.d.ts +26 -0
- package/dist/rules/sort-classes/node-info/compute-accessor-details.js +43 -0
- package/dist/rules/sort-classes/node-info/compute-index-signature-details.d.ts +23 -0
- package/dist/rules/sort-classes/node-info/compute-index-signature-details.js +21 -0
- package/dist/rules/sort-classes/node-info/compute-method-details.d.ts +29 -0
- package/dist/rules/sort-classes/node-info/compute-method-details.js +80 -0
- package/dist/rules/sort-classes/node-info/compute-method-or-property-name-details.d.ts +21 -0
- package/dist/rules/sort-classes/node-info/compute-method-or-property-name-details.js +17 -0
- package/dist/rules/sort-classes/node-info/compute-property-details.d.ts +36 -0
- package/dist/rules/sort-classes/node-info/compute-property-details.js +109 -0
- package/dist/rules/sort-classes/node-info/compute-static-block-details.d.ts +26 -0
- package/dist/rules/sort-classes/node-info/compute-static-block-details.js +18 -0
- package/dist/rules/sort-classes/types.d.ts +15 -18
- package/dist/rules/sort-classes/types.js +6 -2
- package/dist/rules/sort-classes.js +79 -291
- package/dist/rules/sort-decorators/types.d.ts +10 -12
- package/dist/rules/sort-decorators.js +57 -56
- package/dist/rules/sort-enums/build-comparator-by-options-computer.js +6 -0
- package/dist/rules/sort-enums/types.d.ts +16 -19
- package/dist/rules/sort-enums/types.js +2 -2
- package/dist/rules/sort-enums.js +13 -11
- package/dist/rules/sort-export-attributes/types.d.ts +6 -8
- package/dist/rules/sort-export-attributes.js +2 -1
- package/dist/rules/sort-exports/types.d.ts +11 -10
- package/dist/rules/sort-exports/types.js +6 -2
- package/dist/rules/sort-exports.js +7 -6
- package/dist/rules/sort-heritage-clauses/types.d.ts +6 -8
- package/dist/rules/sort-heritage-clauses.js +2 -1
- package/dist/rules/sort-import-attributes/types.d.ts +6 -8
- package/dist/rules/sort-import-attributes.js +2 -1
- package/dist/rules/sort-imports/comparator-by-options-computer.js +5 -0
- package/dist/rules/sort-imports/compute-specifier-modifiers.js +1 -1
- package/dist/rules/sort-imports/is-non-external-reference-ts-import-equals.js +1 -1
- package/dist/rules/sort-imports/is-side-effect-import.js +1 -1
- package/dist/rules/sort-imports/types.d.ts +18 -24
- package/dist/rules/sort-imports/types.js +9 -6
- package/dist/rules/sort-imports.js +25 -17
- package/dist/rules/sort-jsx-props/types.d.ts +18 -18
- package/dist/rules/sort-jsx-props/types.js +6 -2
- package/dist/rules/sort-jsx-props.js +14 -7
- package/dist/rules/sort-maps/types.d.ts +10 -16
- package/dist/rules/sort-maps.js +11 -6
- package/dist/rules/sort-modules/build-comparator-by-options-computer.js +2 -0
- package/dist/rules/sort-modules/compute-dependencies.d.ts +2 -5
- package/dist/rules/sort-modules/compute-dependencies.js +3 -0
- package/dist/rules/sort-modules/compute-node-details.d.ts +38 -0
- package/dist/rules/sort-modules/compute-node-details.js +127 -0
- package/dist/rules/sort-modules/is-arrow-function-node.js +1 -1
- package/dist/rules/sort-modules/is-property-or-accessor-node.js +1 -1
- package/dist/rules/sort-modules/types.d.ts +24 -17
- package/dist/rules/sort-modules/types.js +2 -2
- package/dist/rules/sort-modules.js +72 -141
- package/dist/rules/sort-named-exports/compute-node-name.js +1 -1
- package/dist/rules/sort-named-exports/types.d.ts +16 -16
- package/dist/rules/sort-named-exports/types.js +6 -2
- package/dist/rules/sort-named-exports.js +6 -5
- package/dist/rules/sort-named-imports/compute-node-name.js +1 -1
- package/dist/rules/sort-named-imports/types.d.ts +16 -17
- package/dist/rules/sort-named-imports/types.js +6 -2
- package/dist/rules/sort-named-imports.js +7 -6
- package/dist/rules/sort-object-types/comparator-by-options-computer.js +3 -0
- package/dist/rules/sort-object-types/is-member-optional.js +1 -1
- package/dist/rules/sort-object-types/is-node-function-type.js +20 -0
- package/dist/rules/sort-object-types/types.d.ts +21 -34
- package/dist/rules/sort-object-types/types.js +9 -6
- package/dist/rules/sort-object-types.js +7 -6
- package/dist/rules/sort-objects/types.d.ts +17 -21
- package/dist/rules/sort-objects/types.js +3 -3
- package/dist/rules/sort-objects.js +5 -3
- package/dist/rules/sort-sets.js +5 -4
- package/dist/rules/sort-switch-case.js +6 -4
- package/dist/rules/sort-union-types/types.d.ts +12 -12
- package/dist/rules/sort-union-types/types.js +2 -2
- package/dist/rules/sort-union-types.js +37 -35
- package/dist/rules/sort-variable-declarations/types.d.ts +12 -13
- package/dist/rules/sort-variable-declarations/types.js +2 -2
- package/dist/rules/sort-variable-declarations.js +14 -12
- package/dist/types/all-common-options.d.ts +14 -0
- package/dist/types/common-groups-options.d.ts +73 -95
- package/dist/types/common-options.d.ts +60 -55
- package/dist/utils/build-default-options-by-group-index-computer.d.ts +1 -1
- package/dist/utils/compare/build-string-formatter.d.ts +4 -5
- package/dist/utils/compare/build-subgroup-order-comparator.d.ts +10 -0
- package/dist/utils/compare/build-subgroup-order-comparator.js +49 -0
- package/dist/utils/compare/default-comparator-by-options-computer.d.ts +4 -1
- package/dist/utils/compare/default-comparator-by-options-computer.js +9 -0
- package/dist/utils/compute-group.d.ts +9 -9
- package/dist/utils/compute-overridden-options-by-group-index.d.ts +1 -1
- package/dist/utils/does-custom-group-match.d.ts +6 -4
- package/dist/utils/get-comment-above-that-should-exist.d.ts +1 -1
- package/dist/utils/get-newlines-between-errors.d.ts +1 -1
- package/dist/utils/get-newlines-between-option.d.ts +1 -7
- package/dist/utils/get-node-range.d.ts +2 -9
- package/dist/utils/get-settings.d.ts +1 -1
- package/dist/utils/is-group-with-overrides-option.d.ts +3 -6
- package/dist/utils/json-schemas/common-groups-json-schemas.d.ts +6 -6
- package/dist/utils/json-schemas/common-groups-json-schemas.js +12 -10
- package/dist/utils/json-schemas/common-json-schemas.d.ts +5 -5
- package/dist/utils/json-schemas/common-json-schemas.js +13 -12
- package/dist/utils/make-comment-above-fixes.d.ts +1 -1
- package/dist/utils/make-fixes.d.ts +3 -5
- package/dist/utils/make-newlines-between-fixes.d.ts +1 -1
- package/dist/utils/make-order-fixes.d.ts +2 -5
- package/dist/utils/report-all-errors.d.ts +19 -17
- package/dist/utils/report-errors.d.ts +3 -1
- package/dist/utils/should-partition.d.ts +2 -5
- package/dist/utils/validate-custom-sort-configuration.d.ts +1 -1
- package/dist/utils/validate-groups-configuration.d.ts +1 -1
- package/dist/utils/validate-newlines-and-partition-configuration.d.ts +1 -1
- package/package.json +2 -2
- package/readme.md +1 -1
- package/dist/types/join.d.ts +0 -19
- package/dist/utils/is-node-function-type.js +0 -13
- /package/dist/{utils → rules/sort-object-types}/is-node-function-type.d.ts +0 -0
package/dist/package.json.js
CHANGED
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
import { JSONSchema4 } from '@typescript-eslint/utils/json-schema'
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
RegexOption,
|
|
5
|
-
TypeOption,
|
|
6
|
-
} from '../../types/common-options.js'
|
|
7
|
-
import { CommonPartitionOptions } from '../../types/common-partition-options.js'
|
|
8
|
-
import { CommonGroupsOptions } from '../../types/common-groups-options.js'
|
|
2
|
+
import { RegexOption, TypeOption } from '../../types/common-options.js'
|
|
3
|
+
import { AllCommonOptions } from '../../types/all-common-options.js'
|
|
9
4
|
/**
|
|
10
5
|
* Configuration options for the sort-array-includes rule.
|
|
11
6
|
*
|
|
@@ -26,13 +21,11 @@ export type Options = Partial<
|
|
|
26
21
|
*/
|
|
27
22
|
allNamesMatchPattern?: RegexOption
|
|
28
23
|
}
|
|
29
|
-
} &
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
>
|
|
34
|
-
CommonOptions<TypeOption> &
|
|
35
|
-
CommonPartitionOptions
|
|
24
|
+
} & AllCommonOptions<
|
|
25
|
+
TypeOption,
|
|
26
|
+
AdditionalSortOptions,
|
|
27
|
+
CustomGroupMatchOptions
|
|
28
|
+
>
|
|
36
29
|
>[]
|
|
37
30
|
/**
|
|
38
31
|
* Represents the type of array element selector. Used to distinguish between
|
|
@@ -50,21 +43,25 @@ export type Selector = (typeof allSelectors)[number]
|
|
|
50
43
|
* "selector": "literal"
|
|
51
44
|
* }
|
|
52
45
|
*/
|
|
53
|
-
interface
|
|
46
|
+
interface CustomGroupMatchOptions {
|
|
54
47
|
/**
|
|
55
48
|
* Specifies the type of array elements to include in this group. Can be
|
|
56
49
|
* 'literal' for literal values or 'spread' for spread elements.
|
|
57
50
|
*/
|
|
58
51
|
selector?: Selector
|
|
59
52
|
}
|
|
53
|
+
type AdditionalSortOptions = object
|
|
60
54
|
/**
|
|
61
55
|
* Complete list of available selectors for array elements. Used for validation
|
|
62
56
|
* and JSON schema generation.
|
|
63
57
|
*/
|
|
64
58
|
export declare let allSelectors: readonly ['literal', 'spread']
|
|
65
59
|
/**
|
|
66
|
-
* JSON schema
|
|
67
|
-
*
|
|
60
|
+
* Additional custom group match options JSON schema. Used by ESLint to validate
|
|
61
|
+
* rule options at configuration time.
|
|
68
62
|
*/
|
|
69
|
-
export declare let
|
|
63
|
+
export declare let additionalCustomGroupMatchOptionsJsonSchema: Record<
|
|
64
|
+
string,
|
|
65
|
+
JSONSchema4
|
|
66
|
+
>
|
|
70
67
|
export {}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { buildCustomGroupSelectorJsonSchema } from '../../utils/json-schemas/common-groups-json-schemas.js'
|
|
2
2
|
let allSelectors = ['literal', 'spread']
|
|
3
|
-
let
|
|
3
|
+
let additionalCustomGroupMatchOptionsJsonSchema = {
|
|
4
4
|
selector: buildCustomGroupSelectorJsonSchema(allSelectors),
|
|
5
5
|
}
|
|
6
|
-
export {
|
|
6
|
+
export { additionalCustomGroupMatchOptionsJsonSchema, allSelectors }
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { AST_NODE_TYPES } from '@typescript-eslint/utils'
|
|
1
2
|
import {
|
|
2
3
|
partitionByNewLineJsonSchema,
|
|
3
4
|
partitionByCommentJsonSchema,
|
|
@@ -15,12 +16,12 @@ import {
|
|
|
15
16
|
import { validateNewlinesAndPartitionConfiguration } from '../utils/validate-newlines-and-partition-configuration.js'
|
|
16
17
|
import { buildDefaultOptionsByGroupIndexComputer } from '../utils/build-default-options-by-group-index-computer.js'
|
|
17
18
|
import { defaultComparatorByOptionsComputer } from '../utils/compare/default-comparator-by-options-computer.js'
|
|
18
|
-
import { buildCommonGroupsJsonSchemas } from '../utils/json-schemas/common-groups-json-schemas.js'
|
|
19
|
-
import { validateCustomSortConfiguration } from '../utils/validate-custom-sort-configuration.js'
|
|
20
19
|
import {
|
|
21
|
-
|
|
20
|
+
additionalCustomGroupMatchOptionsJsonSchema,
|
|
22
21
|
allSelectors,
|
|
23
22
|
} from './sort-array-includes/types.js'
|
|
23
|
+
import { buildCommonGroupsJsonSchemas } from '../utils/json-schemas/common-groups-json-schemas.js'
|
|
24
|
+
import { validateCustomSortConfiguration } from '../utils/validate-custom-sort-configuration.js'
|
|
24
25
|
import { filterOptionsByAllNamesMatch } from '../utils/filter-options-by-all-names-match.js'
|
|
25
26
|
import { validateGroupsConfiguration } from '../utils/validate-groups-configuration.js'
|
|
26
27
|
import { generatePredefinedGroups } from '../utils/generate-predefined-groups.js'
|
|
@@ -62,7 +63,8 @@ let jsonSchema = {
|
|
|
62
63
|
properties: {
|
|
63
64
|
...buildCommonJsonSchemas(),
|
|
64
65
|
...buildCommonGroupsJsonSchemas({
|
|
65
|
-
|
|
66
|
+
additionalCustomGroupMatchProperties:
|
|
67
|
+
additionalCustomGroupMatchOptionsJsonSchema,
|
|
66
68
|
}),
|
|
67
69
|
useConfigurationIf: buildUseConfigurationIfJsonSchema(),
|
|
68
70
|
partitionByComment: partitionByCommentJsonSchema,
|
|
@@ -78,13 +80,13 @@ const sortArrayIncludes = createEslintRule({
|
|
|
78
80
|
create: context => ({
|
|
79
81
|
MemberExpression: node => {
|
|
80
82
|
if (
|
|
81
|
-
(node.object.type ===
|
|
82
|
-
node.object.type ===
|
|
83
|
-
node.property.type ===
|
|
83
|
+
(node.object.type === AST_NODE_TYPES.ArrayExpression ||
|
|
84
|
+
node.object.type === AST_NODE_TYPES.NewExpression) &&
|
|
85
|
+
node.property.type === AST_NODE_TYPES.Identifier &&
|
|
84
86
|
node.property.name === 'includes'
|
|
85
87
|
) {
|
|
86
88
|
let elements =
|
|
87
|
-
node.object.type ===
|
|
89
|
+
node.object.type === AST_NODE_TYPES.ArrayExpression
|
|
88
90
|
? node.object.elements
|
|
89
91
|
: node.object.arguments
|
|
90
92
|
sortArray({
|
|
@@ -149,7 +151,8 @@ function sortArray({ availableMessageIds, elements, context }) {
|
|
|
149
151
|
return accumulator
|
|
150
152
|
}
|
|
151
153
|
let name = getNodeName({ sourceCode, element })
|
|
152
|
-
let selector =
|
|
154
|
+
let selector =
|
|
155
|
+
element.type === AST_NODE_TYPES.SpreadElement ? 'spread' : 'literal'
|
|
153
156
|
let predefinedGroups = generatePredefinedGroups({
|
|
154
157
|
cache: cachedGroupsByModifiersAndSelectors,
|
|
155
158
|
selectors: [selector],
|
|
@@ -214,7 +217,7 @@ function sortArray({ availableMessageIds, elements, context }) {
|
|
|
214
217
|
})
|
|
215
218
|
}
|
|
216
219
|
function getNodeName({ sourceCode, element }) {
|
|
217
|
-
return element.type ===
|
|
220
|
+
return element.type === AST_NODE_TYPES.Literal
|
|
218
221
|
? `${element.value}`
|
|
219
222
|
: sourceCode.getText(element)
|
|
220
223
|
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { TSESTree } from '@typescript-eslint/types'
|
|
2
|
+
import { RegexOption } from '../../types/common-options.js'
|
|
3
|
+
/**
|
|
4
|
+
* Computes the dependencies of a class member AST node.
|
|
5
|
+
*
|
|
6
|
+
* @param params - Parameters object.
|
|
7
|
+
* @param params.ignoreCallbackDependenciesPatterns - Patterns to ignore
|
|
8
|
+
* callback dependencies.
|
|
9
|
+
* @param params.isMemberStatic - Indicates if the member is static.
|
|
10
|
+
* @param params.expression - The AST node expression to analyze.
|
|
11
|
+
* @param params.className - The name of the class, if available.
|
|
12
|
+
* @returns The names of the dependencies.
|
|
13
|
+
*/
|
|
14
|
+
export declare function computeDependencies({
|
|
15
|
+
ignoreCallbackDependenciesPatterns,
|
|
16
|
+
isMemberStatic,
|
|
17
|
+
expression,
|
|
18
|
+
className,
|
|
19
|
+
}: {
|
|
20
|
+
expression: TSESTree.StaticBlock | TSESTree.Expression
|
|
21
|
+
ignoreCallbackDependenciesPatterns: RegexOption
|
|
22
|
+
className: undefined | string
|
|
23
|
+
isMemberStatic: boolean
|
|
24
|
+
}): string[]
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { AST_NODE_TYPES } from '@typescript-eslint/utils'
|
|
2
|
+
import { computeIdentifierNameDetails } from './compute-identifier-name-details.js'
|
|
3
|
+
import { computeDependencyName } from './compute-dependency-name.js'
|
|
4
|
+
import { matches } from '../../utils/matches.js'
|
|
5
|
+
function computeDependencies({
|
|
6
|
+
ignoreCallbackDependenciesPatterns,
|
|
7
|
+
isMemberStatic,
|
|
8
|
+
expression,
|
|
9
|
+
className,
|
|
10
|
+
}) {
|
|
11
|
+
let dependencies = []
|
|
12
|
+
function checkNode(nodeValue) {
|
|
13
|
+
switch (nodeValue.type) {
|
|
14
|
+
case AST_NODE_TYPES.ConditionalExpression:
|
|
15
|
+
traverseNode(nodeValue.test)
|
|
16
|
+
traverseNode(nodeValue.consequent)
|
|
17
|
+
traverseNode(nodeValue.alternate)
|
|
18
|
+
break
|
|
19
|
+
case AST_NODE_TYPES.MemberExpression:
|
|
20
|
+
dependencies = [
|
|
21
|
+
...dependencies,
|
|
22
|
+
...computeMemberExpressionDependencies({
|
|
23
|
+
memberExpression: nodeValue,
|
|
24
|
+
isMemberStatic,
|
|
25
|
+
className,
|
|
26
|
+
}),
|
|
27
|
+
]
|
|
28
|
+
break
|
|
29
|
+
case AST_NODE_TYPES.CallExpression:
|
|
30
|
+
if (!('name' in nodeValue.callee)) {
|
|
31
|
+
traverseNode(nodeValue.arguments)
|
|
32
|
+
break
|
|
33
|
+
}
|
|
34
|
+
if (
|
|
35
|
+
matches(nodeValue.callee.name, ignoreCallbackDependenciesPatterns)
|
|
36
|
+
) {
|
|
37
|
+
break
|
|
38
|
+
}
|
|
39
|
+
traverseNode(nodeValue.arguments)
|
|
40
|
+
break
|
|
41
|
+
case AST_NODE_TYPES.NewExpression:
|
|
42
|
+
traverseNode(nodeValue.arguments)
|
|
43
|
+
break
|
|
44
|
+
case AST_NODE_TYPES.Property:
|
|
45
|
+
traverseNode(nodeValue.key)
|
|
46
|
+
traverseNode(nodeValue.value)
|
|
47
|
+
break
|
|
48
|
+
}
|
|
49
|
+
if ('argument' in nodeValue && nodeValue.argument) {
|
|
50
|
+
traverseNode(nodeValue.argument)
|
|
51
|
+
}
|
|
52
|
+
if ('body' in nodeValue && nodeValue.body) {
|
|
53
|
+
traverseNode(nodeValue.body)
|
|
54
|
+
}
|
|
55
|
+
if ('callee' in nodeValue) {
|
|
56
|
+
traverseNode(nodeValue.callee)
|
|
57
|
+
}
|
|
58
|
+
if ('declarations' in nodeValue) {
|
|
59
|
+
traverseNode(nodeValue.declarations)
|
|
60
|
+
}
|
|
61
|
+
if ('elements' in nodeValue) {
|
|
62
|
+
let elements = nodeValue.elements.filter(
|
|
63
|
+
currentNode => currentNode !== null,
|
|
64
|
+
)
|
|
65
|
+
traverseNode(elements)
|
|
66
|
+
}
|
|
67
|
+
if (
|
|
68
|
+
'expression' in nodeValue &&
|
|
69
|
+
typeof nodeValue.expression !== 'boolean'
|
|
70
|
+
) {
|
|
71
|
+
traverseNode(nodeValue.expression)
|
|
72
|
+
}
|
|
73
|
+
if ('expressions' in nodeValue) {
|
|
74
|
+
traverseNode(nodeValue.expressions)
|
|
75
|
+
}
|
|
76
|
+
if ('init' in nodeValue && nodeValue.init) {
|
|
77
|
+
traverseNode(nodeValue.init)
|
|
78
|
+
}
|
|
79
|
+
if ('left' in nodeValue) {
|
|
80
|
+
traverseNode(nodeValue.left)
|
|
81
|
+
}
|
|
82
|
+
if ('object' in nodeValue) {
|
|
83
|
+
traverseNode(nodeValue.object)
|
|
84
|
+
}
|
|
85
|
+
if ('properties' in nodeValue) {
|
|
86
|
+
traverseNode(nodeValue.properties)
|
|
87
|
+
}
|
|
88
|
+
if ('right' in nodeValue) {
|
|
89
|
+
traverseNode(nodeValue.right)
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
function traverseNode(nodeValue) {
|
|
93
|
+
if (Array.isArray(nodeValue)) {
|
|
94
|
+
for (let nodeItem of nodeValue) {
|
|
95
|
+
traverseNode(nodeItem)
|
|
96
|
+
}
|
|
97
|
+
} else {
|
|
98
|
+
checkNode(nodeValue)
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
traverseNode(expression)
|
|
102
|
+
return dependencies
|
|
103
|
+
}
|
|
104
|
+
function computeMemberExpressionDependencies({
|
|
105
|
+
memberExpression,
|
|
106
|
+
isMemberStatic,
|
|
107
|
+
className,
|
|
108
|
+
}) {
|
|
109
|
+
switch (memberExpression.object.type) {
|
|
110
|
+
case AST_NODE_TYPES.ThisExpression:
|
|
111
|
+
return computeIdentifierOrThisExpressionDependencies()
|
|
112
|
+
case AST_NODE_TYPES.Identifier:
|
|
113
|
+
return memberExpression.object.name === className
|
|
114
|
+
? computeIdentifierOrThisExpressionDependencies()
|
|
115
|
+
: []
|
|
116
|
+
default:
|
|
117
|
+
return []
|
|
118
|
+
}
|
|
119
|
+
function computeIdentifierOrThisExpressionDependencies() {
|
|
120
|
+
let dependency = computeDependencyFromProperty()
|
|
121
|
+
if (!dependency) {
|
|
122
|
+
return []
|
|
123
|
+
}
|
|
124
|
+
return [dependency]
|
|
125
|
+
}
|
|
126
|
+
function computeDependencyFromProperty() {
|
|
127
|
+
switch (memberExpression.property.type) {
|
|
128
|
+
case AST_NODE_TYPES.PrivateIdentifier:
|
|
129
|
+
case AST_NODE_TYPES.Identifier:
|
|
130
|
+
case AST_NODE_TYPES.Literal: {
|
|
131
|
+
let { nameWithoutStartingHash, hasPrivateHash } =
|
|
132
|
+
computeIdentifierNameDetails(memberExpression.property)
|
|
133
|
+
return computeDependencyName({
|
|
134
|
+
isStatic:
|
|
135
|
+
isMemberStatic ||
|
|
136
|
+
memberExpression.object.type === AST_NODE_TYPES.Identifier,
|
|
137
|
+
nodeNameWithoutStartingHash: nameWithoutStartingHash,
|
|
138
|
+
hasPrivateHash,
|
|
139
|
+
})
|
|
140
|
+
}
|
|
141
|
+
/* v8 ignore next 2 -- @preserve Unhandled cases */
|
|
142
|
+
default:
|
|
143
|
+
return null
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
export { computeDependencies }
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { TSESTree } from '@typescript-eslint/types'
|
|
2
|
+
export interface NodeNameDetails {
|
|
3
|
+
nameWithoutStartingHash: string
|
|
4
|
+
hasPrivateHash: boolean
|
|
5
|
+
name: string
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Computes the name details of an identifier.
|
|
9
|
+
*
|
|
10
|
+
* @param node - The node to compute the name details for.
|
|
11
|
+
* @returns An object containing the name, whether it has a private hash, and
|
|
12
|
+
* the name without the starting hash.
|
|
13
|
+
*/
|
|
14
|
+
export declare function computeIdentifierNameDetails(
|
|
15
|
+
node: TSESTree.PrivateIdentifier | TSESTree.Identifier | TSESTree.Literal,
|
|
16
|
+
): NodeNameDetails
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { AST_NODE_TYPES } from '@typescript-eslint/utils'
|
|
2
|
+
import { UnreachableCaseError } from '../../utils/unreachable-case-error.js'
|
|
3
|
+
function computeIdentifierNameDetails(node) {
|
|
4
|
+
switch (node.type) {
|
|
5
|
+
case AST_NODE_TYPES.PrivateIdentifier:
|
|
6
|
+
return {
|
|
7
|
+
nameWithoutStartingHash: node.name,
|
|
8
|
+
name: `#${node.name}`,
|
|
9
|
+
hasPrivateHash: true,
|
|
10
|
+
}
|
|
11
|
+
case AST_NODE_TYPES.Identifier:
|
|
12
|
+
return buildNonPrivateHashDetails(node.name)
|
|
13
|
+
case AST_NODE_TYPES.Literal:
|
|
14
|
+
return buildNonPrivateHashDetails(`${node.value}`)
|
|
15
|
+
/* v8 ignore next 2 -- @preserve Exhaustive guard. */
|
|
16
|
+
default:
|
|
17
|
+
throw new UnreachableCaseError(node)
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function buildNonPrivateHashDetails(name) {
|
|
21
|
+
return {
|
|
22
|
+
nameWithoutStartingHash: name,
|
|
23
|
+
hasPrivateHash: false,
|
|
24
|
+
name,
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export { computeIdentifierNameDetails }
|
|
@@ -1,16 +1,17 @@
|
|
|
1
|
+
import { AST_NODE_TYPES } from '@typescript-eslint/utils'
|
|
1
2
|
import { isSortable } from '../../utils/is-sortable.js'
|
|
2
3
|
function getOverloadSignatureGroups(members) {
|
|
3
4
|
let methods = members
|
|
4
5
|
.filter(
|
|
5
6
|
member =>
|
|
6
|
-
member.type ===
|
|
7
|
-
member.type ===
|
|
7
|
+
member.type === AST_NODE_TYPES.MethodDefinition ||
|
|
8
|
+
member.type === AST_NODE_TYPES.TSAbstractMethodDefinition,
|
|
8
9
|
)
|
|
9
10
|
.filter(member => member.kind === 'method')
|
|
10
11
|
let staticOverloadSignaturesByName = /* @__PURE__ */ new Map()
|
|
11
12
|
let overloadSignaturesByName = /* @__PURE__ */ new Map()
|
|
12
13
|
for (let method of methods) {
|
|
13
|
-
if (method.key.type !==
|
|
14
|
+
if (method.key.type !== AST_NODE_TYPES.Identifier) {
|
|
14
15
|
continue
|
|
15
16
|
}
|
|
16
17
|
let { name } = method.key
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { TSESTree } from '@typescript-eslint/types'
|
|
2
|
+
import { Modifier } from '../types.js'
|
|
3
|
+
type Property =
|
|
4
|
+
| TSESTree.TSAbstractPropertyDefinition
|
|
5
|
+
| TSESTree.PropertyDefinition
|
|
6
|
+
type Accessor = TSESTree.TSAbstractAccessorProperty | TSESTree.AccessorProperty
|
|
7
|
+
type Method = TSESTree.TSAbstractMethodDefinition | TSESTree.MethodDefinition
|
|
8
|
+
export declare function computeAbstractModifier(
|
|
9
|
+
node: Accessor | Property | Method,
|
|
10
|
+
): Modifier[]
|
|
11
|
+
export declare function computeAccessibilityModifier({
|
|
12
|
+
hasPrivateHash,
|
|
13
|
+
node,
|
|
14
|
+
}: {
|
|
15
|
+
node: Accessor | Property | Method
|
|
16
|
+
hasPrivateHash: boolean
|
|
17
|
+
}): Modifier[]
|
|
18
|
+
export declare function computeAsyncModifier(
|
|
19
|
+
node:
|
|
20
|
+
| TSESTree.TSEmptyBodyFunctionExpression
|
|
21
|
+
| TSESTree.ArrowFunctionExpression
|
|
22
|
+
| TSESTree.FunctionExpression,
|
|
23
|
+
): Modifier[]
|
|
24
|
+
export declare function computeStaticModifier(
|
|
25
|
+
node: TSESTree.TSIndexSignature | Accessor | Property | Method,
|
|
26
|
+
): Modifier[]
|
|
27
|
+
export declare function computeReadonlyModifier(
|
|
28
|
+
node: TSESTree.TSIndexSignature | Property,
|
|
29
|
+
): Modifier[]
|
|
30
|
+
export declare function computeOverrideModifier(
|
|
31
|
+
node: Accessor | Property | Method,
|
|
32
|
+
): Modifier[]
|
|
33
|
+
export declare function computeOptionalModifier(
|
|
34
|
+
node: Property | Method,
|
|
35
|
+
): Modifier[]
|
|
36
|
+
export declare function computeDecoratedModifier(
|
|
37
|
+
isDecorated: boolean,
|
|
38
|
+
): Modifier[]
|
|
39
|
+
export {}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { AST_NODE_TYPES } from '@typescript-eslint/utils'
|
|
2
|
+
import { UnreachableCaseError } from '../../../utils/unreachable-case-error.js'
|
|
3
|
+
function computeAbstractModifier(node) {
|
|
4
|
+
switch (node.type) {
|
|
5
|
+
case AST_NODE_TYPES.TSAbstractPropertyDefinition:
|
|
6
|
+
case AST_NODE_TYPES.TSAbstractMethodDefinition:
|
|
7
|
+
case AST_NODE_TYPES.TSAbstractAccessorProperty:
|
|
8
|
+
return ['abstract']
|
|
9
|
+
case AST_NODE_TYPES.PropertyDefinition:
|
|
10
|
+
case AST_NODE_TYPES.MethodDefinition:
|
|
11
|
+
case AST_NODE_TYPES.AccessorProperty:
|
|
12
|
+
return []
|
|
13
|
+
/* v8 ignore next 2 -- @preserve Exhaustive guard. */
|
|
14
|
+
default:
|
|
15
|
+
throw new UnreachableCaseError(node)
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
function computeAccessibilityModifier({ hasPrivateHash, node }) {
|
|
19
|
+
if (hasPrivateHash) {
|
|
20
|
+
return ['private']
|
|
21
|
+
}
|
|
22
|
+
switch (node.accessibility) {
|
|
23
|
+
case 'protected':
|
|
24
|
+
return ['protected']
|
|
25
|
+
case 'private':
|
|
26
|
+
return ['private']
|
|
27
|
+
case void 0:
|
|
28
|
+
case 'public':
|
|
29
|
+
return ['public']
|
|
30
|
+
/* v8 ignore next 2 -- @preserve Exhaustive guard. */
|
|
31
|
+
default:
|
|
32
|
+
throw new UnreachableCaseError(node.accessibility)
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function computeAsyncModifier(node) {
|
|
36
|
+
return node.async ? ['async'] : []
|
|
37
|
+
}
|
|
38
|
+
function computeStaticModifier(node) {
|
|
39
|
+
return node.static ? ['static'] : []
|
|
40
|
+
}
|
|
41
|
+
function computeReadonlyModifier(node) {
|
|
42
|
+
return node.readonly ? ['readonly'] : []
|
|
43
|
+
}
|
|
44
|
+
function computeOverrideModifier(node) {
|
|
45
|
+
return node.override ? ['override'] : []
|
|
46
|
+
}
|
|
47
|
+
function computeOptionalModifier(node) {
|
|
48
|
+
return node.optional ? ['optional'] : []
|
|
49
|
+
}
|
|
50
|
+
function computeDecoratedModifier(isDecorated) {
|
|
51
|
+
return isDecorated ? ['decorated'] : []
|
|
52
|
+
}
|
|
53
|
+
export {
|
|
54
|
+
computeAbstractModifier,
|
|
55
|
+
computeAccessibilityModifier,
|
|
56
|
+
computeAsyncModifier,
|
|
57
|
+
computeDecoratedModifier,
|
|
58
|
+
computeOptionalModifier,
|
|
59
|
+
computeOverrideModifier,
|
|
60
|
+
computeReadonlyModifier,
|
|
61
|
+
computeStaticModifier,
|
|
62
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { TSESTree } from '@typescript-eslint/types'
|
|
2
|
+
import { TSESLint } from '@typescript-eslint/utils'
|
|
3
|
+
import { Modifier, Selector } from '../types.js'
|
|
4
|
+
/**
|
|
5
|
+
* Computes details related to an accessor property.
|
|
6
|
+
*
|
|
7
|
+
* @param params - Parameters object.
|
|
8
|
+
* @param params.isDecorated - Whether the accessor is decorated.
|
|
9
|
+
* @param params.sourceCode - The source code object.
|
|
10
|
+
* @param params.accessor - The accessor node to compute information for.
|
|
11
|
+
* @returns An object containing various details about the accessor.
|
|
12
|
+
*/
|
|
13
|
+
export declare function computeAccessorDetails({
|
|
14
|
+
isDecorated,
|
|
15
|
+
sourceCode,
|
|
16
|
+
accessor,
|
|
17
|
+
}: {
|
|
18
|
+
accessor: TSESTree.TSAbstractAccessorProperty | TSESTree.AccessorProperty
|
|
19
|
+
sourceCode: TSESLint.SourceCode
|
|
20
|
+
isDecorated: boolean
|
|
21
|
+
}): {
|
|
22
|
+
dependencyNames: string[]
|
|
23
|
+
modifiers: Modifier[]
|
|
24
|
+
selectors: Selector[]
|
|
25
|
+
name: string
|
|
26
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import {
|
|
2
|
+
computeStaticModifier,
|
|
3
|
+
computeAbstractModifier,
|
|
4
|
+
computeDecoratedModifier,
|
|
5
|
+
computeOverrideModifier,
|
|
6
|
+
computeAccessibilityModifier,
|
|
7
|
+
} from './common-modifiers.js'
|
|
8
|
+
import { computeMethodOrPropertyNameDetails } from './compute-method-or-property-name-details.js'
|
|
9
|
+
import { computeDependencyName } from '../compute-dependency-name.js'
|
|
10
|
+
function computeAccessorDetails({ isDecorated, sourceCode, accessor }) {
|
|
11
|
+
let { nameWithoutStartingHash, hasPrivateHash, name } =
|
|
12
|
+
computeMethodOrPropertyNameDetails(accessor, sourceCode)
|
|
13
|
+
let modifiers = computeModifiers({
|
|
14
|
+
hasPrivateHash,
|
|
15
|
+
isDecorated,
|
|
16
|
+
accessor,
|
|
17
|
+
})
|
|
18
|
+
return {
|
|
19
|
+
dependencyNames: [
|
|
20
|
+
computeDependencyName({
|
|
21
|
+
nodeNameWithoutStartingHash: nameWithoutStartingHash,
|
|
22
|
+
isStatic: modifiers.includes('static'),
|
|
23
|
+
hasPrivateHash,
|
|
24
|
+
}),
|
|
25
|
+
],
|
|
26
|
+
selectors: ['accessor-property'],
|
|
27
|
+
modifiers,
|
|
28
|
+
name,
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
function computeModifiers({ hasPrivateHash, isDecorated, accessor }) {
|
|
32
|
+
return [
|
|
33
|
+
...computeStaticModifier(accessor),
|
|
34
|
+
...computeAbstractModifier(accessor),
|
|
35
|
+
...computeDecoratedModifier(isDecorated),
|
|
36
|
+
...computeOverrideModifier(accessor),
|
|
37
|
+
...computeAccessibilityModifier({
|
|
38
|
+
hasPrivateHash,
|
|
39
|
+
node: accessor,
|
|
40
|
+
}),
|
|
41
|
+
]
|
|
42
|
+
}
|
|
43
|
+
export { computeAccessorDetails }
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { TSESTree } from '@typescript-eslint/types'
|
|
2
|
+
import { TSESLint } from '@typescript-eslint/utils'
|
|
3
|
+
import { Modifier, Selector } from '../types.js'
|
|
4
|
+
/**
|
|
5
|
+
* Computes details related to an index-signature.
|
|
6
|
+
*
|
|
7
|
+
* @param params - Parameters object.
|
|
8
|
+
* @param params.indexSignature - The index signature node to compute
|
|
9
|
+
* information for.
|
|
10
|
+
* @param params.sourceCode - The source code object.
|
|
11
|
+
* @returns An object containing various details about the index-signature.
|
|
12
|
+
*/
|
|
13
|
+
export declare function computeIndexSignatureDetails({
|
|
14
|
+
indexSignature,
|
|
15
|
+
sourceCode,
|
|
16
|
+
}: {
|
|
17
|
+
indexSignature: TSESTree.TSIndexSignature
|
|
18
|
+
sourceCode: TSESLint.SourceCode
|
|
19
|
+
}): {
|
|
20
|
+
modifiers: Modifier[]
|
|
21
|
+
selectors: Selector[]
|
|
22
|
+
name: string
|
|
23
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import {
|
|
2
|
+
computeStaticModifier,
|
|
3
|
+
computeReadonlyModifier,
|
|
4
|
+
} from './common-modifiers.js'
|
|
5
|
+
function computeIndexSignatureDetails({ indexSignature, sourceCode }) {
|
|
6
|
+
return {
|
|
7
|
+
name: sourceCode.text.slice(
|
|
8
|
+
indexSignature.range.at(0),
|
|
9
|
+
indexSignature.typeAnnotation?.range.at(0) ?? indexSignature.range.at(1),
|
|
10
|
+
),
|
|
11
|
+
modifiers: computeModifiers(indexSignature),
|
|
12
|
+
selectors: ['index-signature'],
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
function computeModifiers(indexSignature) {
|
|
16
|
+
return [
|
|
17
|
+
...computeStaticModifier(indexSignature),
|
|
18
|
+
...computeReadonlyModifier(indexSignature),
|
|
19
|
+
]
|
|
20
|
+
}
|
|
21
|
+
export { computeIndexSignatureDetails }
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { TSESTree } from '@typescript-eslint/types'
|
|
2
|
+
import { TSESLint } from '@typescript-eslint/utils'
|
|
3
|
+
import { Modifier, Selector } from '../types.js'
|
|
4
|
+
/**
|
|
5
|
+
* Computes details related to a method.
|
|
6
|
+
*
|
|
7
|
+
* @param params - Parameters object.
|
|
8
|
+
* @param params.isDecorated - Whether the accessor is decorated.
|
|
9
|
+
* @param params.method - The method node to compute information for.
|
|
10
|
+
* @param params.sourceCode - The source code object.
|
|
11
|
+
* @param params.hasParentDeclare - Whether the parent class is a declare class.
|
|
12
|
+
* @returns An object containing various details about the method.
|
|
13
|
+
*/
|
|
14
|
+
export declare function computeMethodDetails({
|
|
15
|
+
hasParentDeclare,
|
|
16
|
+
isDecorated,
|
|
17
|
+
sourceCode,
|
|
18
|
+
method,
|
|
19
|
+
}: {
|
|
20
|
+
method: TSESTree.TSAbstractMethodDefinition | TSESTree.MethodDefinition
|
|
21
|
+
sourceCode: TSESLint.SourceCode
|
|
22
|
+
hasParentDeclare: boolean
|
|
23
|
+
isDecorated: boolean
|
|
24
|
+
}): {
|
|
25
|
+
addSafetySemicolonWhenInline: boolean
|
|
26
|
+
modifiers: Modifier[]
|
|
27
|
+
selectors: Selector[]
|
|
28
|
+
name: string
|
|
29
|
+
}
|