-
Notifications
You must be signed in to change notification settings - Fork 2
/
.eslintrc.cjs
124 lines (124 loc) · 3.01 KB
/
.eslintrc.cjs
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
/** @type {import('eslint').Linter.Config} */
module.exports = {
root: true,
plugins: ['@typescript-eslint', 'import'],
extends: [
// The order of these matter:
// eslint baseline
'eslint:recommended',
// disables eslint rules in favor of using prettier separately
'prettier',
],
rules: {
// https://typescript-eslint.io/linting/troubleshooting/#i-get-errors-from-the-no-undef-rule-about-global-variables-not-being-defined-even-though-there-are-no-typescript-errors
'no-undef': 'off',
},
ignorePatterns: [
'artifacts/**/*',
'**/generated/**/*',
'*/dev-dist/**/*',
'Server/wwwroot/assets/**/*',
],
parserOptions: {
ecmaVersion: 'latest',
sourceType: 'module',
},
overrides: [
{
files: ['**/*.{ts,tsx}'],
extends: [
// Recommended typescript changes, which removes some "no-undef" checks that TS handles
'plugin:@typescript-eslint/eslint-recommended',
'plugin:@typescript-eslint/recommended-type-checked',
'plugin:@typescript-eslint/recommended',
],
rules: {
'@typescript-eslint/array-type': ['error', { default: 'array-simple' }],
'@typescript-eslint/consistent-type-imports': [
'error',
{
disallowTypeAnnotations: false,
},
],
// no-unsafe-assignment complains when passing components as variables
'@typescript-eslint/no-unsafe-assignment': [0],
// Adds naming conventions
'@typescript-eslint/naming-convention': [
'error',
{
selector: 'default',
// React requires PascalCase for components, which can
// be functions, variables, parameters, etc.
format: ['camelCase', 'PascalCase'],
leadingUnderscore: 'forbid',
},
{
selector: 'class',
format: ['PascalCase'],
},
{
selector: 'classProperty',
modifiers: ['private'],
format: ['camelCase'],
leadingUnderscore: 'require',
},
{
selector: 'typeParameter',
format: ['PascalCase'],
prefix: ['T'],
},
{
selector: 'typeAlias',
format: ['PascalCase'],
},
{
selector: 'interface',
format: ['PascalCase'],
},
{
selector: ['objectLiteralProperty', 'import'], // This effectively disables the rule for object literal properties and imports, which we do not always control
format: null,
},
],
'import/order': [
'error',
{
pathGroupsExcludedImportTypes: ['react'],
'newlines-between': 'never',
alphabetize: {
order: 'asc',
caseInsensitive: true,
},
groups: [
'external',
'builtin',
'internal',
'parent',
'sibling',
'index',
'object',
'unknown',
],
pathGroups: [
{
pattern: 'react**',
group: 'external',
position: 'before',
},
{
pattern: '@!(/)*/**',
group: 'external',
position: 'before',
},
{
pattern: '@/**',
group: 'internal',
position: 'before',
},
],
},
],
},
},
],
};