@egy186/eslint-config 0.63.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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2016 egy186
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,18 @@
1
+ # @egy186/eslint-config
2
+
3
+ [![CI](https://github.com/egy186/eslint-config/workflows/CI/badge.svg)](https://github.com/egy186/eslint-config/actions?query=workflow%3ACI)
4
+ [![dependencies Status](https://david-dm.org/egy186/eslint-config/status.svg)](https://david-dm.org/egy186/eslint-config)
5
+
6
+ ## Install
7
+
8
+ ```sh
9
+ npm install @egy186/eslint-config
10
+ ```
11
+
12
+ ## `.eslintrc.json`
13
+
14
+ ```json
15
+ {
16
+ "extends": ["@egy186/eslint-config"]
17
+ }
18
+ ```
package/base.js ADDED
@@ -0,0 +1,372 @@
1
+ 'use strict';
2
+
3
+ /* eslint max-lines: "off" */
4
+
5
+ module.exports = {
6
+ env: { es2017: true },
7
+ parserOptions: { ecmaVersion: 2018 },
8
+ reportUnusedDisableDirectives: true,
9
+ rules: {
10
+ ...{
11
+ // Possible Errors
12
+ 'for-direction': 'error',
13
+ 'getter-return': 'error',
14
+ 'no-async-promise-executor': 'error',
15
+ 'no-await-in-loop': 'error',
16
+ 'no-compare-neg-zero': 'error',
17
+ 'no-cond-assign': ['error', 'always'],
18
+ 'no-console': 'warn',
19
+ 'no-constant-condition': 'error',
20
+ 'no-control-regex': 'error',
21
+ 'no-debugger': 'error',
22
+ 'no-dupe-args': 'error',
23
+ 'no-dupe-else-if': 'error',
24
+ 'no-dupe-keys': 'error',
25
+ 'no-duplicate-case': 'error',
26
+ 'no-empty': 'error',
27
+ 'no-empty-character-class': 'error',
28
+ 'no-ex-assign': 'error',
29
+ 'no-extra-boolean-cast': 'error',
30
+ 'no-extra-parens': [
31
+ 'error',
32
+ 'all',
33
+ {
34
+ ignoreJSX: 'multi-line',
35
+ nestedBinaryExpressions: false
36
+ }
37
+ ],
38
+ 'no-extra-semi': 'error',
39
+ 'no-func-assign': 'error',
40
+ 'no-import-assign': 'error',
41
+ 'no-inner-declarations': 'error',
42
+ 'no-invalid-regexp': 'error',
43
+ 'no-irregular-whitespace': 'error',
44
+ 'no-loss-of-precision': 'error',
45
+ 'no-misleading-character-class': 'error',
46
+ 'no-obj-calls': 'error',
47
+ 'no-promise-executor-return': 'error',
48
+ 'no-prototype-builtins': 'error',
49
+ 'no-regex-spaces': 'error',
50
+ 'no-setter-return': 'error',
51
+ 'no-sparse-arrays': 'error',
52
+ 'no-template-curly-in-string': 'error',
53
+ 'no-unexpected-multiline': 'error',
54
+ 'no-unreachable': 'error',
55
+ 'no-unreachable-loop': 'error',
56
+ 'no-unsafe-finally': 'error',
57
+ 'no-unsafe-negation': 'error',
58
+ 'no-unsafe-optional-chaining': ['error', { disallowArithmeticOperators: true }],
59
+ 'no-useless-backreference': 'error',
60
+ 'require-atomic-updates': 'error',
61
+ 'use-isnan': 'error',
62
+ 'valid-typeof': 'error'
63
+ },
64
+ ...{
65
+ // Best Practices
66
+ 'accessor-pairs': 'error',
67
+ 'array-callback-return': ['error', { checkForEach: true }],
68
+ 'block-scoped-var': 'error',
69
+ 'class-methods-use-this': 'error',
70
+ complexity: ['warn', 12],
71
+ 'consistent-return': 'error',
72
+ curly: ['error', 'all'],
73
+ 'default-case': 'error',
74
+ 'default-case-last': 'error',
75
+ 'default-param-last': 'error',
76
+ 'dot-location': ['error', 'property'],
77
+ 'dot-notation': 'error',
78
+ eqeqeq: 'error',
79
+ 'grouped-accessor-pairs': ['error', 'getBeforeSet'],
80
+ 'guard-for-in': 'error',
81
+ 'max-classes-per-file': 'error',
82
+ 'no-alert': 'error',
83
+ 'no-caller': 'error',
84
+ 'no-case-declarations': 'error',
85
+ 'no-constructor-return': 'error',
86
+ 'no-div-regex': 'error',
87
+ 'no-else-return': 'error',
88
+ 'no-empty-function': 'error',
89
+ 'no-empty-pattern': 'error',
90
+ 'no-eq-null': 'error',
91
+ 'no-eval': 'error',
92
+ 'no-extend-native': 'error',
93
+ 'no-extra-bind': 'error',
94
+ 'no-extra-label': 'off',
95
+ 'no-fallthrough': 'error',
96
+ 'no-floating-decimal': 'error',
97
+ 'no-global-assign': 'error',
98
+ 'no-implicit-coercion': 'error',
99
+ 'no-implicit-globals': 'error',
100
+ 'no-implied-eval': 'error',
101
+ 'no-invalid-this': 'error',
102
+ 'no-iterator': 'error',
103
+ 'no-labels': 'error',
104
+ 'no-lone-blocks': 'error',
105
+ 'no-loop-func': 'error',
106
+ 'no-magic-numbers': 'off',
107
+ 'no-multi-spaces': 'error',
108
+ 'no-multi-str': 'error',
109
+ 'no-new': 'error',
110
+ 'no-new-func': 'error',
111
+ 'no-new-wrappers': 'error',
112
+ 'no-nonoctal-decimal-escape': 'error',
113
+ 'no-octal': 'error',
114
+ 'no-octal-escape': 'error',
115
+ 'no-param-reassign': ['error', { props: false }],
116
+ 'no-proto': 'error',
117
+ 'no-redeclare': 'error',
118
+ 'no-restricted-properties': 'off',
119
+ 'no-return-assign': 'error',
120
+ 'no-return-await': 'error',
121
+ 'no-script-url': 'error',
122
+ 'no-self-assign': 'error',
123
+ 'no-self-compare': 'error',
124
+ 'no-sequences': 'error',
125
+ 'no-throw-literal': 'error',
126
+ 'no-unmodified-loop-condition': 'error',
127
+ 'no-unused-expressions': ['error', { enforceForJSX: true }],
128
+ 'no-unused-labels': 'off',
129
+ 'no-useless-call': 'error',
130
+ 'no-useless-catch': 'error',
131
+ 'no-useless-concat': 'error',
132
+ 'no-useless-escape': 'error',
133
+ 'no-useless-return': 'error',
134
+ 'no-void': 'error',
135
+ 'no-warning-comments': 'error',
136
+ 'no-with': 'error',
137
+ 'prefer-named-capture-group': 'error',
138
+ 'prefer-promise-reject-errors': 'error',
139
+ 'prefer-regex-literals': 'error',
140
+ radix: 'error',
141
+ 'require-await': 'error',
142
+ 'require-unicode-regexp': 'error',
143
+ 'vars-on-top': 'error',
144
+ 'wrap-iife': ['error', 'inside'],
145
+ yoda: 'error'
146
+ },
147
+ ...{
148
+ // Strict Mode
149
+ strict: ['error', 'safe']
150
+ },
151
+ ...{
152
+ // Variables
153
+ 'init-declarations': 'error',
154
+ 'no-delete-var': 'error',
155
+ 'no-label-var': 'off',
156
+ 'no-restricted-globals': 'off',
157
+ 'no-shadow': 'error',
158
+ 'no-shadow-restricted-names': 'error',
159
+ 'no-undef': 'error',
160
+ 'no-undef-init': 'error',
161
+ 'no-undefined': 'off',
162
+ 'no-unused-vars': [
163
+ 'error',
164
+ {
165
+ args: 'after-used',
166
+ caughtErrors: 'all',
167
+ vars: 'all'
168
+ }
169
+ ],
170
+ 'no-use-before-define': 'error'
171
+ },
172
+ ...{
173
+ // Stylistic Issues
174
+ 'array-bracket-newline': 'error',
175
+ 'array-bracket-spacing': ['error', 'never'],
176
+ 'array-element-newline': [
177
+ 'error',
178
+ {
179
+ minItems: 3,
180
+ multiline: true
181
+ }
182
+ ],
183
+ 'block-spacing': ['error', 'always'],
184
+ 'brace-style': [
185
+ 'error',
186
+ '1tbs',
187
+ { allowSingleLine: false }
188
+ ],
189
+ camelcase: ['error', { properties: 'never' }],
190
+ 'capitalized-comments': 'error',
191
+ 'comma-dangle': ['error', 'never'],
192
+ 'comma-spacing': [
193
+ 'error',
194
+ {
195
+ after: true,
196
+ before: false
197
+ }
198
+ ],
199
+ 'comma-style': ['error', 'last'],
200
+ 'computed-property-spacing': ['error', 'never'],
201
+ 'consistent-this': 'off',
202
+ 'eol-last': 'error',
203
+ 'func-call-spacing': ['error', 'never'],
204
+ 'func-name-matching': 'error',
205
+ 'func-names': ['error', 'as-needed'],
206
+ 'func-style': ['error', 'expression'],
207
+ 'function-call-argument-newline': ['error', 'consistent'],
208
+ 'function-paren-newline': ['error', 'multiline'],
209
+ 'id-denylist': 'off',
210
+ 'id-length': 'off',
211
+ 'id-match': 'off',
212
+ 'implicit-arrow-linebreak': ['error', 'beside'],
213
+ indent: [
214
+ 'error',
215
+ 2,
216
+ {
217
+ MemberExpression: 1,
218
+ SwitchCase: 1
219
+ }
220
+ ],
221
+ 'jsx-quotes': ['error', 'prefer-double'],
222
+ 'key-spacing': [
223
+ 'error',
224
+ {
225
+ afterColon: true,
226
+ beforeColon: false
227
+ }
228
+ ],
229
+ 'keyword-spacing': [
230
+ 'error',
231
+ {
232
+ after: true,
233
+ before: true
234
+ }
235
+ ],
236
+ 'line-comment-position': 'off',
237
+ 'linebreak-style': 'error',
238
+ 'lines-around-comment': 'off',
239
+ 'lines-between-class-members': 'error',
240
+ 'max-depth': 'error',
241
+ 'max-len': 'off',
242
+ 'max-lines': 'warn',
243
+ 'max-lines-per-function': 'warn',
244
+ 'max-nested-callbacks': 'error',
245
+ 'max-params': 'off',
246
+ 'max-statements': 'warn',
247
+ 'max-statements-per-line': 'error',
248
+ 'multiline-comment-style': 'error',
249
+ 'multiline-ternary': ['error', 'always-multiline'],
250
+ 'new-cap': 'error',
251
+ 'new-parens': 'error',
252
+ 'newline-per-chained-call': 'off',
253
+ 'no-array-constructor': 'error',
254
+ 'no-bitwise': 'off',
255
+ 'no-continue': 'off',
256
+ 'no-inline-comments': 'off',
257
+ 'no-lonely-if': 'error',
258
+ 'no-mixed-operators': 'error',
259
+ 'no-mixed-spaces-and-tabs': 'error',
260
+ 'no-multi-assign': 'error',
261
+ 'no-multiple-empty-lines': [
262
+ 'error',
263
+ {
264
+ max: 2,
265
+ maxBOF: 0,
266
+ maxEOF: 1
267
+ }
268
+ ],
269
+ 'no-negated-condition': 'error',
270
+ 'no-nested-ternary': 'error',
271
+ 'no-new-object': 'error',
272
+ 'no-plusplus': 'off',
273
+ 'no-restricted-syntax': 'off',
274
+ 'no-tabs': 'off',
275
+ 'no-ternary': 'off',
276
+ 'no-trailing-spaces': 'error',
277
+ 'no-underscore-dangle': ['error', { allowAfterThis: true }],
278
+ 'no-unneeded-ternary': ['error', { defaultAssignment: false }],
279
+ 'no-whitespace-before-property': 'error',
280
+ 'nonblock-statement-body-position': 'error',
281
+ 'object-curly-newline': ['error', { multiline: true }],
282
+ 'object-curly-spacing': ['error', 'always'],
283
+ 'object-property-newline': 'error',
284
+ 'one-var': ['error', 'never'],
285
+ 'one-var-declaration-per-line': 'off',
286
+ 'operator-assignment': 'off',
287
+ 'operator-linebreak': ['error', 'before'],
288
+ 'padded-blocks': ['error', 'never'],
289
+ 'padding-line-between-statements': 'error',
290
+ 'prefer-exponentiation-operator': 'error',
291
+ 'prefer-object-spread': 'error',
292
+ 'quote-props': ['error', 'as-needed'],
293
+ quotes: [
294
+ 'error',
295
+ 'single',
296
+ 'avoid-escape'
297
+ ],
298
+ semi: ['error', 'always'],
299
+ 'semi-spacing': [
300
+ 'error',
301
+ {
302
+ after: true,
303
+ before: false
304
+ }
305
+ ],
306
+ 'semi-style': ['error', 'last'],
307
+ 'sort-keys': 'error',
308
+ 'sort-vars': 'error',
309
+ 'space-before-blocks': 'error',
310
+ 'space-before-function-paren': ['error', 'always'],
311
+ 'space-in-parens': ['error', 'never'],
312
+ 'space-infix-ops': 'error',
313
+ 'space-unary-ops': 'error',
314
+ 'spaced-comment': [
315
+ 'error',
316
+ 'always',
317
+ { block: { balanced: true } }
318
+ ],
319
+ 'switch-colon-spacing': 'error',
320
+ 'template-tag-spacing': ['error', 'never'],
321
+ 'unicode-bom': ['error', 'never'],
322
+ 'wrap-regex': 'off'
323
+ },
324
+ ...{
325
+ // ECMAScript 6
326
+ 'arrow-body-style': ['error', 'as-needed'],
327
+ 'arrow-parens': ['error', 'as-needed'],
328
+ 'arrow-spacing': [
329
+ 'error',
330
+ {
331
+ after: true,
332
+ before: true
333
+ }
334
+ ],
335
+ 'constructor-super': 'error',
336
+ 'generator-star-spacing': ['error', 'after'],
337
+ 'no-class-assign': 'error',
338
+ 'no-confusing-arrow': ['error', { allowParens: false }],
339
+ 'no-const-assign': 'error',
340
+ 'no-dupe-class-members': 'error',
341
+ 'no-duplicate-imports': 'error',
342
+ 'no-new-symbol': 'error',
343
+ 'no-restricted-exports': 'off',
344
+ 'no-restricted-imports': 'off',
345
+ 'no-this-before-super': 'error',
346
+ 'no-useless-computed-key': 'error',
347
+ 'no-useless-constructor': 'error',
348
+ 'no-useless-rename': 'error',
349
+ 'no-var': 'error',
350
+ 'object-shorthand': ['error', 'always'],
351
+ 'prefer-arrow-callback': 'error',
352
+ 'prefer-const': 'error',
353
+ 'prefer-destructuring': 'error',
354
+ 'prefer-numeric-literals': 'error',
355
+ 'prefer-rest-params': 'error',
356
+ 'prefer-spread': 'error',
357
+ 'prefer-template': 'error',
358
+ 'require-yield': 'error',
359
+ 'rest-spread-spacing': ['error', 'never'],
360
+ 'sort-imports': 'error',
361
+ 'symbol-description': 'error',
362
+ 'template-curly-spacing': ['error', 'never'],
363
+ 'yield-star-spacing': [
364
+ 'error',
365
+ {
366
+ after: true,
367
+ before: false
368
+ }
369
+ ]
370
+ }
371
+ }
372
+ };
package/browser.js ADDED
@@ -0,0 +1,13 @@
1
+ 'use strict';
2
+
3
+ const _ = require('lodash');
4
+ const node = require('./node');
5
+
6
+ module.exports = {
7
+ env: {
8
+ browser: true,
9
+ node: false
10
+ },
11
+ // Disable all node rules
12
+ rules: _.mapValues(node.rules, () => 'off')
13
+ };
package/index.js ADDED
@@ -0,0 +1,7 @@
1
+ 'use strict';
2
+
3
+ const _ = require('lodash');
4
+ const base = require('./base');
5
+ const jsdoc = require('./jsdoc');
6
+
7
+ module.exports = _.merge(base, jsdoc);
package/jsdoc.js ADDED
@@ -0,0 +1,55 @@
1
+ 'use strict';
2
+
3
+ module.exports = {
4
+ plugins: ['jsdoc'],
5
+ rules: {
6
+ 'jsdoc/check-access': 'error',
7
+ 'jsdoc/check-alignment': 'error',
8
+ 'jsdoc/check-examples': 'error',
9
+ 'jsdoc/check-indentation': 'error',
10
+ 'jsdoc/check-line-alignment': 'off',
11
+ 'jsdoc/check-param-names': 'error',
12
+ 'jsdoc/check-property-names': 'error',
13
+ 'jsdoc/check-syntax': 'error',
14
+ 'jsdoc/check-tag-names': 'error',
15
+ 'jsdoc/check-types': 'error',
16
+ 'jsdoc/check-values': 'error',
17
+ 'jsdoc/empty-tags': 'error',
18
+ 'jsdoc/implements-on-classes': 'error',
19
+ 'jsdoc/match-description': 'error',
20
+ 'jsdoc/match-name': 'off',
21
+ 'jsdoc/multiline-blocks': 'error',
22
+ 'jsdoc/newline-after-description': 'error',
23
+ 'jsdoc/no-bad-blocks': 'error',
24
+ 'jsdoc/no-defaults': 'error',
25
+ 'jsdoc/no-missing-syntax': ['off', { contexts: [] }],
26
+ 'jsdoc/no-multi-asterisks': 'error',
27
+ 'jsdoc/no-restricted-syntax': 'off',
28
+ 'jsdoc/no-types': 'off',
29
+ 'jsdoc/no-undefined-types': 'error',
30
+ 'jsdoc/require-asterisk-prefix': 'error',
31
+ 'jsdoc/require-description': 'off',
32
+ 'jsdoc/require-description-complete-sentence': 'error',
33
+ 'jsdoc/require-example': 'off',
34
+ 'jsdoc/require-file-overview': 'off',
35
+ 'jsdoc/require-hyphen-before-param-description': 'error',
36
+ 'jsdoc/require-jsdoc': 'off',
37
+ 'jsdoc/require-param': 'error',
38
+ 'jsdoc/require-param-description': 'error',
39
+ 'jsdoc/require-param-name': 'error',
40
+ 'jsdoc/require-param-type': 'error',
41
+ 'jsdoc/require-property': 'error',
42
+ 'jsdoc/require-property-description': 'error',
43
+ 'jsdoc/require-property-name': 'error',
44
+ 'jsdoc/require-property-type': 'error',
45
+ 'jsdoc/require-returns': 'error',
46
+ 'jsdoc/require-returns-check': 'error',
47
+ 'jsdoc/require-returns-description': 'error',
48
+ 'jsdoc/require-returns-type': 'error',
49
+ 'jsdoc/require-throws': 'error',
50
+ 'jsdoc/require-yields': 'error',
51
+ 'jsdoc/require-yields-check': 'error',
52
+ 'jsdoc/tag-lines': 'error',
53
+ 'jsdoc/valid-types': 'error'
54
+ }
55
+ };
package/modules.js ADDED
@@ -0,0 +1,50 @@
1
+ 'use strict';
2
+
3
+ module.exports = {
4
+ parserOptions: { sourceType: 'module' },
5
+ plugins: ['import'],
6
+ rules: {
7
+ 'import/default': 'error',
8
+ 'import/dynamic-import-chunkname': 'error',
9
+ 'import/export': 'error',
10
+ 'import/exports-last': 'error',
11
+ 'import/extensions': 'error',
12
+ 'import/first': 'error',
13
+ 'import/group-exports': 'error',
14
+ 'import/max-dependencies': 'error',
15
+ 'import/named': 'error',
16
+ 'import/namespace': 'error',
17
+ 'import/newline-after-import': 'error',
18
+ 'import/no-absolute-path': 'error',
19
+ 'import/no-amd': 'error',
20
+ 'import/no-anonymous-default-export': 'error',
21
+ 'import/no-commonjs': 'error',
22
+ 'import/no-cycle': 'error',
23
+ 'import/no-default-export': 'off',
24
+ 'import/no-deprecated': 'error',
25
+ 'import/no-duplicates': 'error',
26
+ 'import/no-dynamic-require': 'error',
27
+ 'import/no-extraneous-dependencies': 'off',
28
+ 'import/no-import-module-exports': 'error',
29
+ 'import/no-internal-modules': 'off',
30
+ 'import/no-mutable-exports': 'error',
31
+ 'import/no-named-as-default': 'error',
32
+ 'import/no-named-as-default-member': 'error',
33
+ 'import/no-named-default': 'error',
34
+ 'import/no-named-export': 'off',
35
+ 'import/no-namespace': 'error',
36
+ 'import/no-nodejs-modules': 'error',
37
+ 'import/no-relative-packages': 'error',
38
+ 'import/no-relative-parent-imports': 'off',
39
+ 'import/no-restricted-paths': 'off',
40
+ 'import/no-self-import': 'error',
41
+ 'import/no-unassigned-import': 'error',
42
+ 'import/no-unresolved': 'error',
43
+ 'import/no-unused-modules': 'error',
44
+ 'import/no-useless-path-segments': 'error',
45
+ 'import/no-webpack-loader-syntax': 'error',
46
+ 'import/order': 'off',
47
+ 'import/prefer-default-export': 'error',
48
+ 'import/unambiguous': 'error'
49
+ }
50
+ };
package/node.js ADDED
@@ -0,0 +1,45 @@
1
+ 'use strict';
2
+
3
+ module.exports = {
4
+ env: { node: true },
5
+ plugins: ['node'],
6
+ rules: {
7
+ 'node/callback-return': 'error',
8
+ 'node/exports-style': 'error',
9
+ 'node/file-extension-in-import': 'error',
10
+ 'node/global-require': 'error',
11
+ 'node/handle-callback-err': ['error', '^(err|error)$'],
12
+ 'node/no-callback-literal': 'error',
13
+ 'node/no-deprecated-api': 'error',
14
+ 'node/no-exports-assign': 'error',
15
+ 'node/no-extraneous-import': 'error',
16
+ 'node/no-extraneous-require': 'error',
17
+ 'node/no-missing-import': 'error',
18
+ 'node/no-missing-require': 'error',
19
+ 'node/no-mixed-requires': 'error',
20
+ 'node/no-new-require': 'error',
21
+ 'node/no-path-concat': 'error',
22
+ 'node/no-process-env': 'warn',
23
+ 'node/no-process-exit': 'warn',
24
+ 'node/no-restricted-import': 'off',
25
+ 'node/no-restricted-require': 'off',
26
+ 'node/no-sync': 'error',
27
+ 'node/no-unpublished-bin': 'error',
28
+ 'node/no-unpublished-import': 'error',
29
+ 'node/no-unpublished-require': 'error',
30
+ 'node/no-unsupported-features/es-builtins': 'error',
31
+ 'node/no-unsupported-features/es-syntax': 'error',
32
+ 'node/no-unsupported-features/node-builtins': 'error',
33
+ 'node/prefer-global/buffer': 'error',
34
+ 'node/prefer-global/console': 'error',
35
+ 'node/prefer-global/process': 'error',
36
+ 'node/prefer-global/text-decoder': 'error',
37
+ 'node/prefer-global/text-encoder': 'error',
38
+ 'node/prefer-global/url': 'error',
39
+ 'node/prefer-global/url-search-params': 'error',
40
+ 'node/prefer-promises/dns': 'error',
41
+ 'node/prefer-promises/fs': 'error',
42
+ 'node/process-exit-as-throw': 'error',
43
+ 'node/shebang': 'error'
44
+ }
45
+ };
package/package.json ADDED
@@ -0,0 +1,88 @@
1
+ {
2
+ "name": "@egy186/eslint-config",
3
+ "description": "Eslint shareable config",
4
+ "version": "0.63.0",
5
+ "author": "egy186",
6
+ "bugs": {
7
+ "url": "https://github.com/egy186/eslint-config/issues"
8
+ },
9
+ "dependencies": {
10
+ "lodash": "^4.17.21"
11
+ },
12
+ "devDependencies": {
13
+ "@typescript-eslint/eslint-plugin": "~4.33.0",
14
+ "@typescript-eslint/parser": "~4.33.0",
15
+ "eslint": "~7.32.0",
16
+ "eslint-plugin-import": "~2.24.2",
17
+ "eslint-plugin-jsdoc": "~36.1.1",
18
+ "eslint-plugin-node": "~11.1.0",
19
+ "eslint-plugin-react": "~7.26.1",
20
+ "eslint-plugin-react-hooks": "~4.2.0",
21
+ "husky": "^7.0.1",
22
+ "require-dir": "^1.2.0",
23
+ "typescript": "^4.4.3"
24
+ },
25
+ "engines": {
26
+ "node": ">=12"
27
+ },
28
+ "files": [
29
+ "base.js",
30
+ "browser.js",
31
+ "index.js",
32
+ "jsdoc.js",
33
+ "modules.js",
34
+ "node.js",
35
+ "react.js",
36
+ "typescript.js"
37
+ ],
38
+ "homepage": "https://github.com/egy186/eslint-config#readme",
39
+ "keywords": [
40
+ "eslint",
41
+ "eslintconfig"
42
+ ],
43
+ "license": "MIT",
44
+ "main": "index.js",
45
+ "peerDependencies": {
46
+ "@typescript-eslint/eslint-plugin": "^4.33.0",
47
+ "@typescript-eslint/parser": "^4.33.0",
48
+ "eslint": "^7.21.0",
49
+ "eslint-plugin-import": "^2.23.2",
50
+ "eslint-plugin-jsdoc": "^36.0.7",
51
+ "eslint-plugin-node": "^11.1.0",
52
+ "eslint-plugin-react": "^7.26.1",
53
+ "eslint-plugin-react-hooks": "^4.1.0",
54
+ "typescript": "^4.0.3"
55
+ },
56
+ "peerDependenciesMeta": {
57
+ "@typescript-eslint/eslint-plugin": {
58
+ "optional": true
59
+ },
60
+ "@typescript-eslint/parser": {
61
+ "optional": true
62
+ },
63
+ "eslint-plugin-import": {
64
+ "optional": true
65
+ },
66
+ "eslint-plugin-node": {
67
+ "optional": true
68
+ },
69
+ "eslint-plugin-react": {
70
+ "optional": true
71
+ },
72
+ "eslint-plugin-react-hooks": {
73
+ "optional": true
74
+ },
75
+ "typescript": {
76
+ "optional": true
77
+ }
78
+ },
79
+ "repository": {
80
+ "type": "git",
81
+ "url": "git+https://github.com/egy186/eslint-config.git"
82
+ },
83
+ "scripts": {
84
+ "husky": "husky install",
85
+ "lint": "cd lib && eslint ..",
86
+ "test": "cd lib && node test.js"
87
+ }
88
+ }
package/react.js ADDED
@@ -0,0 +1,139 @@
1
+ 'use strict';
2
+
3
+ module.exports = {
4
+ parserOptions: { ecmaFeatures: { jsx: true } },
5
+ plugins: ['react', 'react-hooks'],
6
+ rules: {
7
+ 'react-hooks/exhaustive-deps': 'error',
8
+ 'react-hooks/rules-of-hooks': 'error',
9
+ 'react/boolean-prop-naming': 'error',
10
+ 'react/button-has-type': 'error',
11
+ 'react/default-props-match-prop-types': 'error',
12
+ 'react/destructuring-assignment': ['error', 'always'],
13
+ 'react/display-name': 'error',
14
+ 'react/forbid-component-props': 'error',
15
+ 'react/forbid-dom-props': 'off',
16
+ 'react/forbid-elements': 'off',
17
+ 'react/forbid-foreign-prop-types': 'error',
18
+ 'react/forbid-prop-types': 'error',
19
+ 'react/function-component-definition': [
20
+ 'error',
21
+ {
22
+ namedComponents: 'arrow-function',
23
+ unnamedComponents: 'arrow-function'
24
+ }
25
+ ],
26
+ 'react/jsx-boolean-value': 'error',
27
+ 'react/jsx-child-element-spacing': 'error',
28
+ 'react/jsx-closing-bracket-location': 'error',
29
+ 'react/jsx-closing-tag-location': 'error',
30
+ 'react/jsx-curly-brace-presence': [
31
+ 'error',
32
+ {
33
+ children: 'ignore',
34
+ props: 'never'
35
+ }
36
+ ],
37
+ 'react/jsx-curly-newline': ['error', 'never'],
38
+ 'react/jsx-curly-spacing': 'error',
39
+ 'react/jsx-equals-spacing': 'error',
40
+ 'react/jsx-filename-extension': ['error', { extensions: ['.jsx', '.tsx'] }],
41
+ 'react/jsx-first-prop-new-line': 'error',
42
+ 'react/jsx-fragments': ['error', 'element'],
43
+ 'react/jsx-handler-names': [
44
+ 'error',
45
+ {
46
+ checkInlineFunction: true,
47
+ checkLocalVariables: true
48
+ }
49
+ ],
50
+ 'react/jsx-indent': ['error', 2],
51
+ 'react/jsx-indent-props': ['error', 2],
52
+ 'react/jsx-key': 'error',
53
+ 'react/jsx-max-depth': 'error',
54
+ 'react/jsx-max-props-per-line': 'error',
55
+ 'react/jsx-newline': 'off',
56
+ 'react/jsx-no-bind': 'error',
57
+ 'react/jsx-no-comment-textnodes': 'error',
58
+ 'react/jsx-no-constructed-context-values': 'error',
59
+ 'react/jsx-no-duplicate-props': 'error',
60
+ 'react/jsx-no-literals': 'error',
61
+ 'react/jsx-no-script-url': [
62
+ 'error',
63
+ [
64
+ {
65
+ name: 'Link',
66
+ props: ['to']
67
+ }
68
+ ]
69
+ ],
70
+ 'react/jsx-no-target-blank': 'error',
71
+ 'react/jsx-no-undef': 'error',
72
+ 'react/jsx-no-useless-fragment': 'error',
73
+ 'react/jsx-one-expression-per-line': 'error',
74
+ 'react/jsx-pascal-case': 'error',
75
+ 'react/jsx-props-no-multi-spaces': 'error',
76
+ 'react/jsx-props-no-spreading': 'off',
77
+ 'react/jsx-sort-default-props': 'error',
78
+ 'react/jsx-sort-props': 'error',
79
+ 'react/jsx-tag-spacing': ['error', { beforeClosing: 'never' }],
80
+ 'react/jsx-uses-react': 'error',
81
+ 'react/jsx-uses-vars': 'error',
82
+ 'react/jsx-wrap-multilines': 'error',
83
+ 'react/no-access-state-in-setstate': 'error',
84
+ 'react/no-adjacent-inline-elements': 'error',
85
+ 'react/no-array-index-key': 'error',
86
+ 'react/no-children-prop': 'error',
87
+ 'react/no-danger': 'error',
88
+ 'react/no-danger-with-children': 'error',
89
+ 'react/no-deprecated': 'error',
90
+ 'react/no-did-mount-set-state': 'error',
91
+ 'react/no-did-update-set-state': 'error',
92
+ 'react/no-direct-mutation-state': 'error',
93
+ 'react/no-find-dom-node': 'error',
94
+ 'react/no-is-mounted': 'error',
95
+ 'react/no-multi-comp': 'error',
96
+ 'react/no-namespace': 'error',
97
+ 'react/no-redundant-should-component-update': 'error',
98
+ 'react/no-render-return-value': 'error',
99
+ 'react/no-set-state': 'warn',
100
+ 'react/no-string-refs': 'error',
101
+ 'react/no-this-in-sfc': 'error',
102
+ 'react/no-typos': 'error',
103
+ 'react/no-unescaped-entities': 'error',
104
+ 'react/no-unknown-property': 'error',
105
+ 'react/no-unsafe': 'error',
106
+ 'react/no-unstable-nested-components': 'error',
107
+ 'react/no-unused-prop-types': 'error',
108
+ 'react/no-unused-state': 'error',
109
+ 'react/no-will-update-set-state': 'error',
110
+ 'react/prefer-es6-class': 'error',
111
+ 'react/prefer-exact-props': 'error',
112
+ 'react/prefer-read-only-props': 'error',
113
+ 'react/prefer-stateless-function': 'error',
114
+ 'react/prop-types': 'error',
115
+ 'react/react-in-jsx-scope': 'error',
116
+ 'react/require-default-props': 'error',
117
+ 'react/require-optimization': 'error',
118
+ 'react/require-render-return': 'error',
119
+ 'react/self-closing-comp': 'error',
120
+ 'react/sort-comp': [
121
+ 'error',
122
+ {
123
+ order: [
124
+ 'constructor',
125
+ 'static-methods',
126
+ 'lifecycle',
127
+ 'everything-else',
128
+ 'render'
129
+ ]
130
+ }
131
+ ],
132
+ 'react/sort-prop-types': 'error',
133
+ 'react/state-in-constructor': 'error',
134
+ 'react/static-property-placement': 'error',
135
+ 'react/style-prop-object': 'error',
136
+ 'react/void-dom-elements-no-children': 'error'
137
+ },
138
+ settings: { react: { version: 'detect' } }
139
+ };
package/typescript.js ADDED
@@ -0,0 +1,198 @@
1
+ 'use strict';
2
+
3
+ module.exports = {
4
+ parser: '@typescript-eslint/parser',
5
+ plugins: ['@typescript-eslint'],
6
+ rules: {
7
+ '@typescript-eslint/adjacent-overload-signatures': 'error',
8
+ '@typescript-eslint/array-type': 'error',
9
+ '@typescript-eslint/await-thenable': 'error',
10
+ '@typescript-eslint/ban-ts-comment': 'error',
11
+ '@typescript-eslint/ban-tslint-comment': 'error',
12
+ '@typescript-eslint/ban-types': 'error',
13
+ '@typescript-eslint/brace-style': 'error',
14
+ '@typescript-eslint/class-literal-property-style': 'error',
15
+ '@typescript-eslint/comma-dangle': ['error', 'never'],
16
+ '@typescript-eslint/comma-spacing': 'error',
17
+ '@typescript-eslint/consistent-indexed-object-style': ['error', 'index-signature'],
18
+ '@typescript-eslint/consistent-type-assertions': 'error',
19
+ '@typescript-eslint/consistent-type-definitions': 'error',
20
+ '@typescript-eslint/consistent-type-imports': 'error',
21
+ '@typescript-eslint/default-param-last': 'error',
22
+ '@typescript-eslint/dot-notation': 'error',
23
+ '@typescript-eslint/explicit-function-return-type': 'error',
24
+ '@typescript-eslint/explicit-member-accessibility': 'error',
25
+ '@typescript-eslint/explicit-module-boundary-types': 'error',
26
+ '@typescript-eslint/func-call-spacing': 'error',
27
+ '@typescript-eslint/indent': ['error', 2],
28
+ '@typescript-eslint/init-declarations': 'error',
29
+ '@typescript-eslint/keyword-spacing': [
30
+ 'error',
31
+ {
32
+ after: true,
33
+ before: true
34
+ }
35
+ ],
36
+ '@typescript-eslint/lines-between-class-members': 'error',
37
+ '@typescript-eslint/member-delimiter-style': 'error',
38
+ '@typescript-eslint/member-ordering': 'error',
39
+ '@typescript-eslint/method-signature-style': 'error',
40
+ '@typescript-eslint/naming-convention': [
41
+ 'error',
42
+ {
43
+ format: ['camelCase'],
44
+ selector: 'default'
45
+ },
46
+ {
47
+ format: ['camelCase', 'UPPER_CASE'],
48
+ selector: 'variable'
49
+ },
50
+ {
51
+ format: ['camelCase', 'snake_case'],
52
+ leadingUnderscore: 'allow',
53
+ selector: 'property'
54
+ },
55
+ {
56
+ format: ['camelCase'],
57
+ leadingUnderscore: 'allow',
58
+ selector: 'parameter'
59
+ },
60
+ {
61
+ format: ['camelCase'],
62
+ leadingUnderscore: 'require',
63
+ modifiers: ['private'],
64
+ selector: 'memberLike'
65
+ },
66
+ {
67
+ format: ['PascalCase'],
68
+ selector: 'typeLike'
69
+ }
70
+ ],
71
+ '@typescript-eslint/no-array-constructor': 'error',
72
+ '@typescript-eslint/no-base-to-string': 'error',
73
+ '@typescript-eslint/no-confusing-non-null-assertion': 'error',
74
+ '@typescript-eslint/no-confusing-void-expression': ['error', { ignoreVoidOperator: true }],
75
+ '@typescript-eslint/no-dupe-class-members': 'error',
76
+ '@typescript-eslint/no-duplicate-imports': 'error',
77
+ '@typescript-eslint/no-dynamic-delete': 'error',
78
+ '@typescript-eslint/no-empty-function': 'error',
79
+ '@typescript-eslint/no-empty-interface': 'error',
80
+ '@typescript-eslint/no-explicit-any': 'error',
81
+ '@typescript-eslint/no-extra-non-null-assertion': 'error',
82
+ '@typescript-eslint/no-extra-parens': [
83
+ 'error',
84
+ 'all',
85
+ {
86
+ ignoreJSX: 'multi-line',
87
+ nestedBinaryExpressions: false
88
+ }
89
+ ],
90
+ '@typescript-eslint/no-extra-semi': 'error',
91
+ '@typescript-eslint/no-extraneous-class': 'error',
92
+ '@typescript-eslint/no-floating-promises': ['error', { ignoreVoid: true }],
93
+ '@typescript-eslint/no-for-in-array': 'error',
94
+ '@typescript-eslint/no-implicit-any-catch': 'error',
95
+ '@typescript-eslint/no-implied-eval': 'error',
96
+ '@typescript-eslint/no-inferrable-types': 'error',
97
+ '@typescript-eslint/no-invalid-this': 'error',
98
+ '@typescript-eslint/no-invalid-void-type': 'error',
99
+ '@typescript-eslint/no-loop-func': 'error',
100
+ '@typescript-eslint/no-loss-of-precision': 'error',
101
+ '@typescript-eslint/no-magic-numbers': 'off',
102
+ '@typescript-eslint/no-meaningless-void-operator': 'error',
103
+ '@typescript-eslint/no-misused-new': 'error',
104
+ '@typescript-eslint/no-misused-promises': 'error',
105
+ '@typescript-eslint/no-namespace': 'error',
106
+ '@typescript-eslint/no-non-null-asserted-nullish-coalescing': 'error',
107
+ '@typescript-eslint/no-non-null-asserted-optional-chain': 'error',
108
+ '@typescript-eslint/no-non-null-assertion': 'error',
109
+ '@typescript-eslint/no-parameter-properties': 'error',
110
+ '@typescript-eslint/no-redeclare': 'error',
111
+ '@typescript-eslint/no-require-imports': 'error',
112
+ '@typescript-eslint/no-restricted-imports': 'error',
113
+ '@typescript-eslint/no-shadow': 'error',
114
+ '@typescript-eslint/no-this-alias': 'error',
115
+ '@typescript-eslint/no-throw-literal': 'error',
116
+ '@typescript-eslint/no-type-alias': ['error', { allowAliases: 'in-unions-and-intersections' }],
117
+ '@typescript-eslint/no-unnecessary-boolean-literal-compare': 'error',
118
+ '@typescript-eslint/no-unnecessary-condition': 'error',
119
+ '@typescript-eslint/no-unnecessary-qualifier': 'error',
120
+ '@typescript-eslint/no-unnecessary-type-arguments': 'error',
121
+ '@typescript-eslint/no-unnecessary-type-assertion': 'error',
122
+ '@typescript-eslint/no-unnecessary-type-constraint': 'error',
123
+ '@typescript-eslint/no-unsafe-argument': 'error',
124
+ '@typescript-eslint/no-unsafe-assignment': 'error',
125
+ '@typescript-eslint/no-unsafe-call': 'error',
126
+ '@typescript-eslint/no-unsafe-member-access': 'error',
127
+ '@typescript-eslint/no-unsafe-return': 'error',
128
+ '@typescript-eslint/no-unused-expressions': ['error', { enforceForJSX: true }],
129
+ '@typescript-eslint/no-unused-vars': 'error',
130
+ '@typescript-eslint/no-use-before-define': 'error',
131
+ '@typescript-eslint/no-useless-constructor': 'error',
132
+ '@typescript-eslint/no-var-requires': 'error',
133
+ '@typescript-eslint/non-nullable-type-assertion-style': 'off',
134
+ '@typescript-eslint/object-curly-spacing': ['error', 'always'],
135
+ '@typescript-eslint/padding-line-between-statements': 'error',
136
+ '@typescript-eslint/prefer-as-const': 'error',
137
+ '@typescript-eslint/prefer-enum-initializers': 'error',
138
+ '@typescript-eslint/prefer-for-of': 'error',
139
+ '@typescript-eslint/prefer-function-type': 'off',
140
+ '@typescript-eslint/prefer-includes': 'error',
141
+ '@typescript-eslint/prefer-literal-enum-member': 'error',
142
+ '@typescript-eslint/prefer-namespace-keyword': 'error',
143
+ '@typescript-eslint/prefer-nullish-coalescing': 'error',
144
+ '@typescript-eslint/prefer-optional-chain': 'error',
145
+ '@typescript-eslint/prefer-readonly': 'error',
146
+ '@typescript-eslint/prefer-readonly-parameter-types': 'error',
147
+ '@typescript-eslint/prefer-reduce-type-parameter': 'error',
148
+ '@typescript-eslint/prefer-regexp-exec': 'error',
149
+ '@typescript-eslint/prefer-return-this-type': 'error',
150
+ '@typescript-eslint/prefer-string-starts-ends-with': 'error',
151
+ '@typescript-eslint/prefer-ts-expect-error': 'error',
152
+ '@typescript-eslint/promise-function-async': 'error',
153
+ '@typescript-eslint/quotes': [
154
+ 'error',
155
+ 'single',
156
+ 'avoid-escape'
157
+ ],
158
+ '@typescript-eslint/require-array-sort-compare': 'error',
159
+ '@typescript-eslint/require-await': 'error',
160
+ '@typescript-eslint/restrict-plus-operands': 'error',
161
+ '@typescript-eslint/restrict-template-expressions': 'error',
162
+ '@typescript-eslint/return-await': 'error',
163
+ '@typescript-eslint/semi': 'error',
164
+ '@typescript-eslint/sort-type-union-intersection-members': 'error',
165
+ '@typescript-eslint/space-before-function-paren': ['error', 'always'],
166
+ '@typescript-eslint/space-infix-ops': 'error',
167
+ '@typescript-eslint/strict-boolean-expressions': 'error',
168
+ '@typescript-eslint/switch-exhaustiveness-check': 'error',
169
+ '@typescript-eslint/triple-slash-reference': 'error',
170
+ '@typescript-eslint/type-annotation-spacing': 'error',
171
+ '@typescript-eslint/typedef': 'error',
172
+ '@typescript-eslint/unbound-method': 'error',
173
+ '@typescript-eslint/unified-signatures': 'error',
174
+ camelcase: 'off',
175
+ 'comma-dangle': 'off',
176
+ 'dot-notation': 'off',
177
+ 'init-declarations': 'off',
178
+ 'keyword-spacing': 'off',
179
+ 'lines-between-class-members': 'off',
180
+ 'no-dupe-class-members': 'off',
181
+ 'no-duplicate-imports': 'off',
182
+ 'no-extra-parens': 'off',
183
+ 'no-extra-semi': 'off',
184
+ 'no-invalid-this': 'off',
185
+ 'no-loop-func': 'off',
186
+ 'no-loss-of-precision': 'off',
187
+ 'no-redeclare': 'off',
188
+ 'no-restricted-imports': 'off',
189
+ 'no-shadow': 'off',
190
+ 'no-unused-expressions': 'off',
191
+ 'no-use-before-define': 'off',
192
+ 'object-curly-spacing': 'off',
193
+ 'padding-line-between-statements': 'off',
194
+ 'require-await': 'off',
195
+ 'space-before-function-paren': 'off',
196
+ 'space-infix-ops': 'off'
197
+ }
198
+ };