-
Notifications
You must be signed in to change notification settings - Fork 61
Expand file tree
/
Copy pathsort-classes.ts
More file actions
86 lines (83 loc) · 2.69 KB
/
sort-classes.ts
File metadata and controls
86 lines (83 loc) · 2.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import { AST_NODE_TYPES } from '@typescript-eslint/utils'
import type { MessageId, Options } from './sort-classes/types'
import {
useExperimentalDependencyDetectionJsonSchema,
buildUseConfigurationIfJsonSchema,
matchesAstSelectorJsonSchema,
buildCommonJsonSchemas,
buildRegexJsonSchema,
} from '../utils/json-schemas/common-json-schemas'
import {
additionalCustomGroupMatchOptionsJsonSchema,
DEPENDENCY_ORDER_ERROR_ID,
MISSED_SPACING_ERROR_ID,
EXTRA_SPACING_ERROR_ID,
GROUP_ORDER_ERROR_ID,
ORDER_ERROR_ID,
} from './sort-classes/types'
import {
DEPENDENCY_ORDER_ERROR,
MISSED_SPACING_ERROR,
EXTRA_SPACING_ERROR,
GROUP_ORDER_ERROR,
ORDER_ERROR,
} from '../utils/report-errors'
import {
partitionByCommentJsonSchema,
partitionByNewLineJsonSchema,
} from '../utils/json-schemas/common-partition-json-schemas'
import { buildCommonGroupsJsonSchemas } from '../utils/json-schemas/common-groups-json-schemas'
import { defaultOptions, sortClass } from './sort-classes/sort-class'
import { buildAstListeners } from '../utils/build-ast-listeners'
import { createEslintRule } from '../utils/create-eslint-rule'
export default createEslintRule<Options, MessageId>({
meta: {
schema: {
items: {
properties: {
...buildCommonJsonSchemas(),
...buildCommonGroupsJsonSchemas({
additionalCustomGroupMatchProperties:
additionalCustomGroupMatchOptionsJsonSchema,
}),
useConfigurationIf: buildUseConfigurationIfJsonSchema({
additionalProperties: {
matchesAstSelector: matchesAstSelectorJsonSchema,
},
}),
useExperimentalDependencyDetection:
useExperimentalDependencyDetectionJsonSchema,
ignoreCallbackDependenciesPatterns: buildRegexJsonSchema(),
partitionByComment: partitionByCommentJsonSchema,
partitionByNewLine: partitionByNewLineJsonSchema,
},
additionalProperties: false,
type: 'object',
},
uniqueItems: true,
type: 'array',
},
messages: {
[DEPENDENCY_ORDER_ERROR_ID]: DEPENDENCY_ORDER_ERROR,
[MISSED_SPACING_ERROR_ID]: MISSED_SPACING_ERROR,
[EXTRA_SPACING_ERROR_ID]: EXTRA_SPACING_ERROR,
[GROUP_ORDER_ERROR_ID]: GROUP_ORDER_ERROR,
[ORDER_ERROR_ID]: ORDER_ERROR,
},
docs: {
url: 'https://perfectionist.dev/rules/sort-classes',
description: 'Enforce sorted classes.',
recommended: true,
},
type: 'suggestion',
fixable: 'code',
},
create: context =>
buildAstListeners({
nodeTypes: [AST_NODE_TYPES.ClassBody],
sorter: sortClass,
context,
}),
defaultOptions: [defaultOptions],
name: 'sort-classes',
})