-
Notifications
You must be signed in to change notification settings - Fork 26
/
.eslintrc.js
133 lines (126 loc) · 4.22 KB
/
.eslintrc.js
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
125
126
127
128
129
130
131
132
133
module.exports = {
root: true,
env: {
es6: true,
node: true,
browser: true,
jest: true,
},
extends: [
'airbnb',
'plugin:@typescript-eslint/recommended',
'plugin:@typescript-eslint/eslint-recommended',
'prettier',
'plugin:prettier/recommended',
],
parser: '@typescript-eslint/parser',
plugins: ['@typescript-eslint', 'prettier'],
rules: {
'dot-notation': 'off',
'jsx-a11y/anchor-is-valid': 'off',
'jsx-a11y/label-has-associated-control': 'off',
'react/jsx-closing-tag-location': 'off',
'react/jsx-curly-brace-presence': 'off',
'react/jsx-filename-extension': ['error', { extensions: ['.jsx', '.tsx'] }],
'react/jsx-one-expression-per-line': 'off',
'react/jsx-props-no-spreading': 'off',
'react/jsx-wrap-multilines': 'off',
// Cannot use `Component.displayName` pattern on class components in TS.
'react/static-property-placement': 'off',
// Require or disallow a space immediately following the // or /* in a comment
// https://eslint.org/docs/rules/spaced-comment
'spaced-comment': [
'error',
'always',
{
line: {
exceptions: ['-', '+'],
markers: ['=', '!', '#region', '#endregion', '/'], // space here to support sprockets directives and typescript reference comments
},
block: {
exceptions: ['-', '+'],
markers: ['=', '!', '#region', '#endregion', ':', '::'], // space here to support sprockets directives and flow comment types
balanced: true,
},
},
],
},
settings: {
'import/resolver': {
node: {
extensions: ['.js', '.mjs', '.jsx', '.ts', '.tsx', '.json'],
},
typescript: {},
},
'import/extensions': ['.js', '.mjs', '.jsx', '.ts', '.tsx'],
},
overrides: [
{
files: ['**/*.ts', '**/*.tsx'],
parserOptions: {
// typescript-eslint specific options
warnOnUnsupportedTypeScriptVersion: true,
},
rules: {
// Allow unused variables that starts with, or is `_`
'no-unused-vars': 'off',
'@typescript-eslint/no-unused-vars': [
'warn',
{
vars: 'all',
args: 'after-used',
ignoreRestSiblings: true,
argsIgnorePattern: '^_',
varsIgnorePattern: '^_',
},
],
// Override the base rules so to not clash with each other.
// https://github.com/typescript-eslint/typescript-eslint/issues/2540
'no-use-before-define': 'off',
'@typescript-eslint/no-use-before-define': ['error', { functions: true, classes: true, variables: true }],
// Allow `.ts` and `.tsx` extensions to be omitted
'import/extensions': [
'error',
'ignorePackages',
{
js: 'never',
mjs: 'never',
jsx: 'never',
ts: 'never',
tsx: 'never',
},
],
// Extend this config for TypeScript files
'import/no-extraneous-dependencies': [
'error',
{
devDependencies: [
'test/**', // tape, common npm pattern
'tests/**', // also common npm pattern
'spec/**', // mocha, rspec-like pattern
'**/jest.config.ts', // jest config
'**/jest.setup.ts', // jest setup
'**/__tests__/**', // jest pattern
'**/__mocks__/**', // jest pattern
'**/__stories__/**', // storybook files
'test.{ts,tsx}', // repos with a single test file
'test-*.{ts,tsx}', // repos with multiple top-level test files
'**/*{.,_}{test,spec}.{ts,tsx}', // tests where the extension or filename suffix denotes that it is a test
'**/*{.,_}{stories,story}.{ts,tsx}', // storybook files
],
optionalDependencies: false,
},
],
// No need to use prop types on TS files.
'react/prop-types': 'off',
'@typescript-eslint/camelcase': 'off',
'@typescript-eslint/explicit-module-boundary-types': ['off'],
},
},
{
files: ['.eslintrc.js', '*.config.js'],
parserOptions: { sourceType: 'script' },
env: { node: true },
},
],
};