@ethang/eslint-config 15.0.16 → 16.0.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.
Files changed (3) hide show
  1. package/build.mjs +1 -1
  2. package/eslint.config.js +602 -35
  3. package/package.json +19 -11
package/build.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  // @ts-check
2
- /* eslint-disable @typescript-eslint/no-unsafe-call */
2
+ /* eslint-disable @typescript-eslint/no-unsafe-call, n/no-unpublished-import */
3
3
  import { projectBuilder } from "@ethang/project-builder/project-builder.js";
4
4
 
5
5
  await projectBuilder("eslint-config-ethang", "master", {
package/eslint.config.js CHANGED
@@ -1,61 +1,628 @@
1
- /* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-call */
2
- import eslint from "@eslint/js";
3
- import eslintConfigPrettier from "eslint-config-prettier";
1
+ // @ts-check
2
+ /* eslint-disable @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access,max-lines */
3
+ import parser from "@typescript-eslint/parser";
4
+ import astro from "eslint-plugin-astro";
5
+ import a11y from "eslint-plugin-jsx-a11y/lib/index.js";
6
+ import n from "eslint-plugin-n";
4
7
  import eslintPluginPrettier from "eslint-plugin-prettier/recommended";
8
+ import react from "eslint-plugin-react";
9
+ import reactHooks from "eslint-plugin-react-hooks";
5
10
  import importSort from "eslint-plugin-simple-import-sort";
6
- import eslintPluginUnicorn from "eslint-plugin-unicorn";
11
+ import unicorn from "eslint-plugin-unicorn";
7
12
  import tseslint from "typescript-eslint";
8
13
 
14
+ const languageOptions = {
15
+ parser,
16
+ parserOptions: {
17
+ project: "./tsconfig.json",
18
+ tsconfigRootDir: import.meta.dirname,
19
+ },
20
+ };
21
+
9
22
  export default tseslint.config(
10
- eslint.configs.all,
11
- ...tseslint.configs.strictTypeChecked,
12
- ...tseslint.configs.stylisticTypeChecked,
13
- eslintPluginUnicorn.configs["flat/all"],
14
- eslintConfigPrettier,
15
23
  eslintPluginPrettier,
16
24
  {
17
- languageOptions: {
18
- parserOptions: {
19
- project: true,
20
- tsconfigRootDir: import.meta.dirname,
21
- },
25
+ files: ["astro"],
26
+ plugins: { astro },
27
+ rules: {
28
+ "astro/missing-client-only-directive-value": "error",
29
+ "astro/no-conflict-set-directives": "error",
30
+ "astro/no-deprecated-astro-canonicalurl": "error",
31
+ "astro/no-deprecated-astro-fetchcontent": "error",
32
+ "astro/no-deprecated-astro-resolve": "error",
33
+ "astro/no-deprecated-getentrybyslug": "error",
34
+ "astro/no-exports-from-components": "error",
35
+ "astro/no-set-text-directive": "error",
36
+ "astro/no-unused-css-selector": "error",
37
+ "astro/no-unused-define-vars-in-style": "error",
38
+ "astro/prefer-class-list-directive": "error",
39
+ "astro/prefer-object-class-list": "error",
40
+ "astro/prefer-split-class-list": "error",
41
+ "astro/semi": "error",
42
+ "astro/valid-compile": "error",
43
+ },
44
+ },
45
+ {
46
+ files: ["jsx", "tsx"],
47
+ plugins: {
48
+ react,
49
+ "react-hooks": reactHooks,
50
+ },
51
+ rules: {
52
+ "react/boolean-prop-naming": "error",
53
+ "react/button-has-type": "error",
54
+ "react/checked-requires-onchange-or-readonly": "error",
55
+ "react/default-props-match-prop-types": "error",
56
+ "react/destructuring-assignment": "error",
57
+ "react/display-name": "error",
58
+ "react/forbid-component-props": "error",
59
+ "react/function-component-definition": "error",
60
+ "react/hook-use-state": "error",
61
+ "react/iframe-missing-sandbox": "error",
62
+ "react/jsx-boolean-value": "error",
63
+ "react/jsx-child-element-spacing": "error",
64
+ "react/jsx-closing-bracket-location": "error",
65
+ "react/jsx-closing-tag-location": "error",
66
+ "react/jsx-curly-brace-presence": "error",
67
+ "react/jsx-curly-newline": "error",
68
+ "react/jsx-curly-spacing": "error",
69
+ "react/jsx-equals-spacing": "error",
70
+ "react/jsx-filename-extension": "error",
71
+ "react/jsx-fragments": "error",
72
+ "react/jsx-handler-names": "error",
73
+ "react/jsx-indent": "error",
74
+ "react/jsx-indent-props": "error",
75
+ "react/jsx-key": "error",
76
+ "react/jsx-max-depth": "error",
77
+ "react/jsx-max-props-per-line": "error",
78
+ "react/jsx-newline": "error",
79
+ "react/jsx-no-bind": "error",
80
+ "react/jsx-no-comment-textnodes": "error",
81
+ "react/jsx-no-constructed-context-values": "error",
82
+ "react/jsx-no-duplicate-props": "error",
83
+ "react/jsx-no-leaked-render": "error",
84
+ "react/jsx-no-script-url": "error",
85
+ "react/jsx-no-target-blank": "error",
86
+ "react/jsx-no-undef": "error",
87
+ "react/jsx-no-useless-fragment": "error",
88
+ "react/jsx-pascal-case": "error",
89
+ "react/jsx-uses-react": "error",
90
+ "react/jsx-uses-vars": "error",
91
+ "react/no-access-state-in-setstate": "error",
92
+ "react/no-adjacent-inline-elements": "error",
93
+ "react/no-array-index-key": "error",
94
+ "react/no-arrow-function-lifecycle": "error",
95
+ "react/no-children-prop": "error",
96
+ "react/no-danger-with-children": "error",
97
+ "react/no-deprecated": "error",
98
+ "react/no-did-mount-set-state": "error",
99
+ "react/no-did-update-set-state": "error",
100
+ "react/no-direct-mutation-state": "error",
101
+ "react/no-find-dom-node": "error",
102
+ "react/no-invalid-html-attribute": "error",
103
+ "react/no-is-mounted": "error",
104
+ "react/no-multi-comp": "error",
105
+ "react/no-namespace": "error",
106
+ "react/no-object-type-as-default-prop": "error",
107
+ "react/no-redundant-should-component-update": "error",
108
+ "react/no-render-return-value": "error",
109
+ "react/no-set-state": "error",
110
+ "react/no-string-refs": "error",
111
+ "react/no-this-in-sfc": "error",
112
+ "react/no-typos": "error",
113
+ "react/no-unescaped-entities": "error",
114
+ "react/no-unknown-property": "error",
115
+ "react/no-unsafe": "error",
116
+ "react/no-unstable-nested-components": "error",
117
+ "react/no-unused-class-component-methods": "error",
118
+ "react/no-unused-prop-types": "error",
119
+ "react/no-unused-state": "error",
120
+ "react/no-will-update-set-state": "error",
121
+ "react/prefer-es6-class": "error",
122
+ "react/prefer-exact-props": "error",
123
+ "react/prefer-read-only-props": "error",
124
+ "react/prefer-stateless-function": "error",
125
+ "react/prop-types": "error",
126
+ "react/require-default-props": "error",
127
+ "react/require-optimization": "error",
128
+ "react/require-render-return": "error",
129
+ "react/self-closing-comp": "error",
130
+ "react/sort-comp": "error",
131
+ "react/sort-default-props": "error",
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
+ // eslint-disable-next-line sort-keys
138
+ "react-hooks/exhaustive-deps": "error",
139
+ "react-hooks/rules-of-hooks": "error",
22
140
  },
141
+ },
142
+ {
143
+ languageOptions,
23
144
  plugins: {
145
+ "@typescript-eslint": tseslint.plugin,
146
+ a11y,
147
+ n,
24
148
  "simple-import-sort": importSort,
149
+ unicorn,
25
150
  },
26
151
  rules: {
27
- "@typescript-eslint/consistent-type-definitions": ["error", "type"],
152
+ "accessor-pairs": "error",
153
+ "array-callback-return": "error",
154
+ "block-scoped-var": "error",
155
+ complexity: "error",
156
+ "consistent-this": "error",
157
+ "constructor-super": "error",
158
+ eqeqeq: "error",
159
+ "for-direction": "error",
160
+ "func-name-matching": "error",
161
+ "func-style": [
162
+ "error",
163
+ "declaration",
164
+ {
165
+ allowArrowFunctions: true,
166
+ },
167
+ ],
168
+ "getter-return": "error",
169
+ "grouped-accessor-pairs": "error",
170
+ "guard-for-in": "error",
171
+ "logical-assignment-operators": "error",
172
+ "max-classes-per-file": "error",
173
+ "max-depth": "error",
174
+ "max-lines": "error",
175
+ "max-lines-per-function": "error",
176
+ "max-nested-callbacks": "error",
177
+ "max-statements": "error",
178
+ "no-alert": "error",
179
+ "no-async-promise-executor": "error",
180
+ "no-await-in-loop": "error",
181
+ "no-bitwise": "error",
182
+ "no-caller": "error",
183
+ "no-case-declarations": "error",
184
+ "no-class-assign": "error",
185
+ "no-compare-neg-zero": "error",
186
+ "no-cond-assign": "error",
187
+ "no-console": "error",
188
+ "no-const-assign": "error",
189
+ "no-constant-binary-expression": "error",
190
+ "no-constant-condition": "error",
191
+ "no-constructor-return": "error",
192
+ "no-control-regex": "error",
193
+ "no-debugger": "error",
194
+ "no-delete-var": "error",
195
+ "no-div-regex": "error",
196
+ "no-dupe-args": "error",
197
+ "no-dupe-else-if": "error",
198
+ "no-dupe-keys": "error",
199
+ "no-duplicate-case": "error",
200
+ "no-duplicate-imports": "error",
201
+ "no-else-return": "error",
202
+ "no-empty": "error",
203
+ "no-empty-character-class": "error",
204
+ "no-empty-pattern": "error",
205
+ "no-empty-static-block": "error",
206
+ "no-eq-null": "error",
207
+ "no-eval": "error",
208
+ "no-ex-assign": "error",
209
+ "no-extend-native": "error",
210
+ "no-extra-bind": "error",
211
+ "no-extra-boolean-cast": "error",
212
+ "no-extra-label": "error",
213
+ "no-fallthrough": "error",
214
+ "no-func-assign": "error",
215
+ "no-global-assign": "error",
216
+ "no-implicit-coercion": "error",
217
+ "no-import-assign": "error",
218
+ "no-inner-declarations": "error",
219
+ "no-invalid-regexp": "error",
220
+ "no-irregular-whitespace": "error",
221
+ "no-iterator": "error",
222
+ "no-label-var": "error",
223
+ "no-labels": "error",
224
+ "no-lone-blocks": "error",
225
+ "no-lonely-if": "error",
226
+ "no-misleading-character-class": "error",
227
+ "no-multi-assign": "error",
228
+ "no-multi-str": "error",
229
+ "no-negated-condition": "error",
230
+ "no-nested-ternary": "error",
231
+ "no-new": "error",
232
+ "no-new-func": "error",
233
+ "no-new-native-nonconstructor": "error",
234
+ "no-new-wrappers": "error",
235
+ "no-nonoctal-decimal-escape": "error",
236
+ "no-obj-calls": "error",
237
+ "no-object-constructor": "error",
238
+ "no-octal": "error",
239
+ "no-octal-escape": "error",
240
+ "no-param-reassign": "error",
241
+ "no-plusplus": "error",
242
+ "no-promise-executor-return": "error",
243
+ "no-proto": "error",
244
+ "no-prototype-builtins": "error",
245
+ "no-regex-spaces": "error",
246
+ "no-return-assign": "error",
247
+ "no-script-url": "error",
248
+ "no-self-assign": "error",
249
+ "no-self-compare": "error",
250
+ "no-sequences": "error",
251
+ "no-setter-return": "error",
252
+ "no-shadow-restricted-names": "error",
253
+ "no-sparse-arrays": "error",
254
+ "no-this-before-super": "error",
255
+ "no-undef": "error",
256
+ "no-undef-init": "error",
257
+ "no-unmodified-loop-condition": "error",
258
+ "no-unneeded-ternary": "error",
259
+ "no-unreachable": "error",
260
+ "no-unreachable-loop": "error",
261
+ "no-unsafe-finally": "error",
262
+ "no-unsafe-negation": "error",
263
+ "no-unsafe-optional-chaining": "error",
264
+ "no-unused-labels": "error",
265
+ "no-unused-private-class-members": "error",
266
+ "no-useless-assignment": "error",
267
+ "no-useless-backreference": "error",
268
+ "no-useless-call": "error",
269
+ "no-useless-catch": "error",
270
+ "no-useless-computed-key": "error",
271
+ "no-useless-concat": "error",
272
+ "no-useless-escape": "error",
273
+ "no-useless-rename": "error",
274
+ "no-useless-return": "error",
275
+ "no-var": "error",
276
+ "no-void": "error",
277
+ "no-with": "error",
278
+ "object-shorthand": "error",
279
+ "one-var": "error",
280
+ "operator-assignment": "error",
281
+ "prefer-const": "error",
282
+ "prefer-exponentiation-operator": "error",
283
+ "prefer-named-capture-group": "error",
284
+ "prefer-numeric-literals": "error",
285
+ "prefer-object-has-own": "error",
286
+ "prefer-object-spread": "error",
287
+ "prefer-regex-literals": "error",
288
+ "prefer-rest-params": "error",
289
+ "prefer-spread": "error",
290
+ "prefer-template": "error",
291
+ radix: "error",
292
+ "require-atomic-updates": "error",
293
+ "require-unicode-regexp": "error",
294
+ "require-yield": "error",
295
+ "sort-keys": "error",
296
+ "sort-vars": "error",
297
+ strict: "error",
298
+ "symbol-description": "error",
299
+ "unicode-bom": "error",
300
+ "use-isnan": "error",
301
+ "valid-typeof": "error",
302
+ "vars-on-top": "error",
303
+ yoda: ["error", "always"],
304
+ // eslint overloads
305
+ // eslint-disable-next-line sort-keys
306
+ "class-methods-use-this": "off", // Handled by tseslint
307
+ "default-param-last": "off", // Handled by tseslint
308
+ "dot-notation": "off", // Handled by tseslint
309
+ "max-params": "off", // Handled by tseslint
310
+ "no-array-constructor": "off", // Handled by tseslint
311
+ "no-dupe-class-members": "off", // Checked by ts compiler
312
+ "no-empty-function": "off", // Handled by tseslint
313
+ "no-implied-eval": "off", // Handled by tseslint
314
+ "no-invalid-this": "off", // Checked by ts compiler
315
+ "no-loop-func": "off", // Handled by tseslint
316
+ "no-loss-of-precision": "off", // Handled by tseslint
317
+ "no-redeclare": "off", // Checked by ts compiler
318
+ "no-restricted-imports": "off", // Handled by tseslint
319
+ "no-return-await": "off", // Handled by tseslint
320
+ "no-shadow": "off", // Handled by tseslint
321
+ "no-throw-literal": "off", // Handled by tseslint
322
+ "no-unused-expressions": "off", // Handled by tseslint
323
+ "no-unused-vars": "off", // Handled by tseslint
324
+ "no-useless-constructor": "off", // Handled by tseslint
325
+ "prefer-destructuring": "off", // Handled by tseslint
326
+ "prefer-promise-reject-errors": "off", // Handled by tseslint
327
+ "require-await": "off", // Handled by tseslint
328
+
329
+ // eslint-disable-next-line sort-keys
330
+ "n/exports-style": ["error", "exports"],
331
+ "n/file-extension-in-import": ["error", "always"],
332
+ "n/no-deprecated-api": "error",
333
+ "n/no-exports-assign": "error",
334
+ "n/no-extraneous-import": "error",
335
+ "n/no-extraneous-require": "error",
336
+ "n/no-missing-import": "error",
337
+ "n/no-missing-require": "error",
338
+ "n/no-unpublished-bin": "error",
339
+ "n/no-unpublished-import": "error",
340
+ "n/no-unpublished-require": "error",
341
+ "n/no-unsupported-features/es-builtins": "error",
342
+ "n/no-unsupported-features/es-syntax": "error",
343
+ "n/no-unsupported-features/node-builtins": "error",
344
+ "n/prefer-node-protocol": "error",
345
+
346
+ // typescript-eslint
347
+ // eslint-disable-next-line sort-keys
348
+ "@typescript-eslint/adjacent-overload-signatures": "error",
349
+ "@typescript-eslint/array-type": "error",
350
+ "@typescript-eslint/await-thenable": "error",
351
+ "@typescript-eslint/ban-ts-comment": "error",
352
+ "@typescript-eslint/ban-tslint-comment": "error",
353
+ "@typescript-eslint/ban-types": "error",
354
+ "@typescript-eslint/class-literal-property-style": "error",
355
+ "@typescript-eslint/class-methods-use-this": "error",
356
+ "@typescript-eslint/consistent-generic-constructors": "error",
357
+ "@typescript-eslint/consistent-indexed-object-style": "error",
358
+ "@typescript-eslint/consistent-type-assertions": "error",
359
+ "@typescript-eslint/consistent-type-definitions": "error",
28
360
  "@typescript-eslint/consistent-type-exports": "error",
29
361
  "@typescript-eslint/consistent-type-imports": "error",
362
+ "@typescript-eslint/default-param-last": "error",
363
+ "@typescript-eslint/dot-notation": "error",
364
+ "@typescript-eslint/explicit-member-accessibility": "error",
365
+ "@typescript-eslint/max-params": "error",
366
+ "@typescript-eslint/member-ordering": "error",
367
+ "@typescript-eslint/method-signature-style": "error",
368
+ "@typescript-eslint/no-array-constructor": "error",
369
+ "@typescript-eslint/no-array-delete": "error",
370
+ "@typescript-eslint/no-base-to-string": "error",
371
+ "@typescript-eslint/no-confusing-non-null-assertion": "error",
372
+ "@typescript-eslint/no-confusing-void-expression": "error",
373
+ "@typescript-eslint/no-duplicate-enum-values": "error",
374
+ "@typescript-eslint/no-duplicate-type-constituents": "error",
375
+ "@typescript-eslint/no-dynamic-delete": "error",
376
+ "@typescript-eslint/no-empty-function": "error",
377
+ "@typescript-eslint/no-empty-interface": "error",
378
+ "@typescript-eslint/no-explicit-any": "error",
379
+ "@typescript-eslint/no-extra-non-null-assertion": "error",
380
+ "@typescript-eslint/no-extraneous-class": "error",
381
+ "@typescript-eslint/no-floating-promises": "error",
382
+ "@typescript-eslint/no-for-in-array": "error",
383
+ "@typescript-eslint/no-implied-eval": "error",
30
384
  "@typescript-eslint/no-import-type-side-effects": "error",
385
+ "@typescript-eslint/no-inferrable-types": "error",
386
+ "@typescript-eslint/no-invalid-void-type": "error",
387
+ "@typescript-eslint/no-loop-func": "error",
388
+ "@typescript-eslint/no-loss-of-precision": "error",
389
+ "@typescript-eslint/no-meaningless-void-operator": "error",
390
+ "@typescript-eslint/no-misused-new": "error",
391
+ "@typescript-eslint/no-misused-promises": "error",
392
+ "@typescript-eslint/no-mixed-enums": "error",
393
+ "@typescript-eslint/no-namespace": "error",
394
+ "@typescript-eslint/no-non-null-asserted-nullish-coalescing": "error",
395
+ "@typescript-eslint/no-non-null-asserted-optional-chain": "error",
396
+ "@typescript-eslint/no-non-null-assertion": "error",
397
+ "@typescript-eslint/no-redundant-type-constituents": "error",
398
+ "@typescript-eslint/no-require-imports": "error",
399
+ "@typescript-eslint/no-restricted-imports": "error",
400
+ "@typescript-eslint/no-shadow": "error",
401
+ "@typescript-eslint/no-this-alias": "error",
402
+ "@typescript-eslint/no-unnecessary-boolean-literal-compare": "error",
403
+ "@typescript-eslint/no-unnecessary-condition": "error",
404
+ "@typescript-eslint/no-unnecessary-qualifier": "error",
405
+ "@typescript-eslint/no-unnecessary-type-arguments": "error",
406
+ "@typescript-eslint/no-unnecessary-type-assertion": "error",
407
+ "@typescript-eslint/no-unnecessary-type-constraint": "error",
408
+ "@typescript-eslint/no-unsafe-argument": "error",
409
+ "@typescript-eslint/no-unsafe-assignment": "error",
410
+ "@typescript-eslint/no-unsafe-call": "error",
411
+ "@typescript-eslint/no-unsafe-declaration-merging": "error",
412
+ "@typescript-eslint/no-unsafe-enum-comparison": "error",
413
+ "@typescript-eslint/no-unsafe-member-access": "error",
414
+ "@typescript-eslint/no-unsafe-return": "error",
415
+ "@typescript-eslint/no-unsafe-unary-minus": "error",
416
+ "@typescript-eslint/no-unused-expressions": "error",
31
417
  "@typescript-eslint/no-unused-vars": [
32
418
  "error",
33
- { args: "all", argsIgnorePattern: "^_" },
419
+ {
420
+ args: "all",
421
+ argsIgnorePattern: "^_",
422
+ caughtErrors: "all",
423
+ caughtErrorsIgnorePattern: "^_",
424
+ destructuredArrayIgnorePattern: "^_",
425
+ ignoreRestSiblings: true,
426
+ varsIgnorePattern: "^_",
427
+ },
34
428
  ],
429
+ "@typescript-eslint/no-useless-constructor": "error",
430
+ "@typescript-eslint/no-useless-empty-export": "error",
431
+ "@typescript-eslint/no-useless-template-literals": "error",
432
+ "@typescript-eslint/no-var-requires": "error",
433
+ "@typescript-eslint/non-nullable-type-assertion-style": "error",
434
+ "@typescript-eslint/only-throw-error": "error",
435
+ "@typescript-eslint/prefer-as-const": "error",
436
+ "@typescript-eslint/prefer-destructuring": "error",
437
+ "@typescript-eslint/prefer-enum-initializers": "error",
438
+ "@typescript-eslint/prefer-find": "error",
439
+ "@typescript-eslint/prefer-for-of": "error",
440
+ "@typescript-eslint/prefer-function-type": "error",
441
+ "@typescript-eslint/prefer-includes": "error",
442
+ "@typescript-eslint/prefer-literal-enum-member": "error",
443
+ "@typescript-eslint/prefer-namespace-keyword": "error",
444
+ "@typescript-eslint/prefer-nullish-coalescing": "error",
445
+ "@typescript-eslint/prefer-optional-chain": "error",
446
+ "@typescript-eslint/prefer-promise-reject-errors": "error",
35
447
  "@typescript-eslint/prefer-readonly": "error",
36
- "@typescript-eslint/prefer-readonly-parameter-types": "off",
448
+ "@typescript-eslint/prefer-readonly-parameter-types": "error",
449
+ "@typescript-eslint/prefer-reduce-type-parameter": "error",
450
+ "@typescript-eslint/prefer-regexp-exec": "error",
451
+ "@typescript-eslint/prefer-return-this-type": "error",
452
+ "@typescript-eslint/prefer-string-starts-ends-with": "error",
453
+ "@typescript-eslint/prefer-ts-expect-error": "error",
454
+ "@typescript-eslint/promise-function-async": "error",
455
+ "@typescript-eslint/require-array-sort-compare": "error",
456
+ "@typescript-eslint/require-await": "error",
457
+ "@typescript-eslint/restrict-plus-operands": "error",
458
+ "@typescript-eslint/restrict-template-expressions": "error",
459
+ "@typescript-eslint/return-await": "error",
460
+ "@typescript-eslint/sort-type-constituents": "error",
37
461
  "@typescript-eslint/strict-boolean-expressions": "error",
38
462
  "@typescript-eslint/switch-exhaustiveness-check": "error",
39
- "arrow-body-style": ["error", "always"],
40
- "capitalized-comments": "off",
41
- "class-methods-use-this": "off",
42
- "consistent-return": "off",
43
- "id-length": ["error", { exceptionPatterns: ["^_"] }],
44
- "line-comment-position": "off",
45
- "multiline-comment-style": "off",
46
- "new-cap": "off",
47
- "no-duplicate-imports": "off",
48
- "no-inline-comments": "off",
49
- "no-magic-numbers": "off",
50
- "no-ternary": "off",
51
- "no-undefined": "off",
52
- "no-underscore-dangle": "off",
53
- "no-use-before-define": "off",
54
- "one-var": ["error", "never"],
463
+ "@typescript-eslint/triple-slash-reference": "error",
464
+ "@typescript-eslint/unbound-method": "error",
465
+ "@typescript-eslint/unified-signatures": "error",
466
+ "@typescript-eslint/use-unknown-in-catch-callback-variable": "error",
467
+
468
+ "unicorn/better-regex": "error",
469
+ "unicorn/catch-error-name": "error",
470
+ "unicorn/consistent-destructuring": "error",
471
+ "unicorn/consistent-empty-array-spread": "error",
472
+ "unicorn/consistent-function-scoping": "error",
473
+ "unicorn/custom-error-definition": "error",
474
+ "unicorn/error-message": "error",
475
+ "unicorn/escape-case": "error",
476
+ "unicorn/expiring-todo-comments": "error",
477
+ "unicorn/explicit-length-check": "error",
478
+ "unicorn/filename-case": "error",
479
+ "unicorn/import-style": "error",
480
+ "unicorn/new-for-builtins": "error",
481
+ "unicorn/no-abusive-eslint-disable": "error",
482
+ "unicorn/no-anonymous-default-export": "error",
483
+ "unicorn/no-array-callback-reference": "error",
484
+ "unicorn/no-array-for-each": "error",
485
+ "unicorn/no-array-method-this-argument": "error",
486
+ "unicorn/no-array-push-push": "error",
487
+ "unicorn/no-array-reduce": "error",
488
+ "unicorn/no-await-expression-member": "error",
489
+ "unicorn/no-await-in-promise-methods": "error",
490
+ "unicorn/no-console-spaces": "error",
491
+ "unicorn/no-document-cookie": "error",
492
+ "unicorn/no-empty-file": "error",
493
+ "unicorn/no-for-loop": "error",
494
+ "unicorn/no-hex-escape": "error",
495
+ "unicorn/no-instanceof-array": "error",
496
+ "unicorn/no-invalid-fetch-options": "error",
497
+ "unicorn/no-invalid-remove-event-listener": "error",
498
+ "unicorn/no-keyword-prefix": "error",
499
+ "unicorn/no-lonely-if": "error",
500
+ "unicorn/no-magic-array-flat-depth": "error",
501
+ "unicorn/no-negated-condition": "error",
502
+ "unicorn/no-nested-ternary": "error",
503
+ "unicorn/no-new-array": "error",
504
+ "unicorn/no-new-buffer": "error",
505
+ "unicorn/no-null": "error",
506
+ "unicorn/no-object-as-default-parameter": "error",
507
+ "unicorn/no-process-exit": "error",
508
+ "unicorn/no-single-promise-in-promise-methods": "error",
509
+ "unicorn/no-static-only-class": "error",
510
+ "unicorn/no-thenable": "error",
511
+ "unicorn/no-this-assignment": "error",
512
+ "unicorn/no-typeof-undefined": "error",
513
+ "unicorn/no-unnecessary-await": "error",
514
+ "unicorn/no-unnecessary-polyfills": "error",
515
+ "unicorn/no-unreadable-array-destructuring": "error",
516
+ "unicorn/no-unreadable-iife": "error",
517
+ "unicorn/no-unused-properties": "error",
518
+ "unicorn/no-useless-fallback-in-spread": "error",
519
+ "unicorn/no-useless-length-check": "error",
520
+ "unicorn/no-useless-promise-resolve-reject": "error",
521
+ "unicorn/no-useless-spread": "error",
522
+ "unicorn/no-useless-switch-case": "error",
523
+ "unicorn/no-useless-undefined": "error",
524
+ "unicorn/no-zero-fractions": "error",
525
+ "unicorn/number-literal-case": "error",
526
+ "unicorn/numeric-separators-style": "error",
527
+ "unicorn/prefer-add-event-listener": "error",
528
+ "unicorn/prefer-array-find": "error",
529
+ "unicorn/prefer-array-flat": "error",
530
+ "unicorn/prefer-array-flat-map": "error",
531
+ "unicorn/prefer-array-index-of": "error",
532
+ "unicorn/prefer-array-some": "error",
533
+ "unicorn/prefer-at": "error",
534
+ "unicorn/prefer-blob-reading-methods": "error",
535
+ "unicorn/prefer-code-point": "error",
536
+ "unicorn/prefer-date-now": "error",
537
+ "unicorn/prefer-default-parameters": "error",
538
+ "unicorn/prefer-dom-node-append": "error",
539
+ "unicorn/prefer-dom-node-dataset": "error",
540
+ "unicorn/prefer-dom-node-remove": "error",
541
+ "unicorn/prefer-dom-node-text-content": "error",
542
+ "unicorn/prefer-event-target": "error",
543
+ "unicorn/prefer-export-from": "error",
544
+ "unicorn/prefer-includes": "error",
545
+ "unicorn/prefer-json-parse-buffer": "error",
546
+ "unicorn/prefer-keyboard-event-key": "error",
547
+ "unicorn/prefer-logical-operator-over-ternary": "error",
548
+ "unicorn/prefer-math-trunc": "error",
549
+ "unicorn/prefer-modern-dom-apis": "error",
550
+ "unicorn/prefer-modern-math-apis": "error",
551
+ "unicorn/prefer-module": "error",
552
+ "unicorn/prefer-native-coercion-functions": "error",
553
+ "unicorn/prefer-negative-index": "error",
554
+ "unicorn/prefer-node-protocol": "error",
555
+ "unicorn/prefer-number-properties": "error",
556
+ "unicorn/prefer-object-from-entries": "error",
557
+ "unicorn/prefer-optional-catch-binding": "error",
558
+ "unicorn/prefer-prototype-methods": "error",
559
+ "unicorn/prefer-query-selector": "error",
560
+ "unicorn/prefer-reflect-apply": "error",
561
+ "unicorn/prefer-regexp-test": "error",
562
+ "unicorn/prefer-set-has": "error",
563
+ "unicorn/prefer-set-size": "error",
564
+ "unicorn/prefer-spread": "error",
565
+ "unicorn/prefer-string-raw": "error",
566
+ "unicorn/prefer-string-replace-all": "error",
567
+ "unicorn/prefer-string-slice": "error",
568
+ "unicorn/prefer-string-starts-ends-with": "error",
569
+ "unicorn/prefer-string-trim-start-end": "error",
570
+ "unicorn/prefer-structured-clone": "error",
571
+ "unicorn/prefer-switch": "error",
572
+ "unicorn/prefer-ternary": "error",
573
+ "unicorn/prefer-top-level-await": "error",
574
+ "unicorn/prefer-type-error": "error",
575
+ "unicorn/prevent-abbreviations": "error",
576
+ "unicorn/relative-url-style": "error",
577
+ "unicorn/require-array-join-separator": "error",
578
+ "unicorn/require-number-to-fixed-digits-argument": "error",
579
+ "unicorn/require-post-message-target-origin": "error",
580
+ "unicorn/string-content": "error",
581
+ "unicorn/switch-case-braces": "error",
582
+ "unicorn/template-indent": "error",
583
+ "unicorn/text-encoding-identifier-case": "error",
584
+ "unicorn/throw-new-error": "error",
585
+
586
+ // eslint-disable-next-line sort-keys
55
587
  "simple-import-sort/exports": "error",
56
588
  "simple-import-sort/imports": "error",
57
- "sort-imports": "off",
58
- "unicorn/no-null": "off",
589
+
590
+ // eslint-disable-next-line sort-keys
591
+ "a11y/alt-text": "error",
592
+ "a11y/anchor-ambiguous-text": "error",
593
+ "a11y/anchor-has-content": "error",
594
+ "a11y/anchor-is-valid": "error",
595
+ "a11y/aria-activedescendant-has-tabindex": "error",
596
+ "a11y/aria-props": "error",
597
+ "a11y/aria-proptypes": "error",
598
+ "a11y/aria-role": "error",
599
+ "a11y/aria-unsupported-elements": "error",
600
+ "a11y/autocomplete-valid": "error",
601
+ "a11y/click-events-have-key-events": "error",
602
+ "a11y/control-has-associated-label": "error",
603
+ "a11y/heading-has-content": "error",
604
+ "a11y/html-has-lang": "error",
605
+ "a11y/iframe-has-title": "error",
606
+ "a11y/img-redundant-alt": "error",
607
+ "a11y/interactive-supports-focus": "error",
608
+ "a11y/label-has-associated-control": "error",
609
+ "a11y/lang": "error",
610
+ "a11y/mouse-events-have-key-events": "error",
611
+ "a11y/no-access-key": "error",
612
+ "a11y/no-aria-hidden-on-focusable": "error",
613
+ "a11y/no-autofocus": "error",
614
+ "a11y/no-distracting-elements": "error",
615
+ "a11y/no-interactive-element-to-noninteractive-role": "error",
616
+ "a11y/no-noninteractive-element-interactions": "error",
617
+ "a11y/no-noninteractive-element-to-interactive-role": "error",
618
+ "a11y/no-noninteractive-tabindex": "error",
619
+ "a11y/no-redundant-roles": "error",
620
+ "a11y/no-static-element-interactions": "error",
621
+ "a11y/prefer-tag-over-role": "error",
622
+ "a11y/role-has-required-aria-props": "error",
623
+ "a11y/role-supports-aria-props": "error",
624
+ "a11y/scope": "error",
625
+ "a11y/tabindex-no-positive": "error",
59
626
  },
60
627
  },
61
628
  );
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ethang/eslint-config",
3
- "version": "15.0.16",
3
+ "version": "16.0.0",
4
4
  "repository": {
5
5
  "url": "git+https://github.com/eglove/eslint-config-ethang.git"
6
6
  },
@@ -13,30 +13,38 @@
13
13
  "author": "Ethan Glover",
14
14
  "license": "ISC",
15
15
  "peerDependencies": {
16
- "@eslint/js": "^9.1.1",
17
- "eslint": "^9.1.1",
16
+ "@eslint/js": "^9.3.0",
17
+ "@typescript-eslint/parser": "^7.10.0",
18
+ "eslint": "^9.3.0",
18
19
  "eslint-config-prettier": "^9.1.0",
20
+ "eslint-plugin-astro": "^1.2.0",
21
+ "eslint-plugin-jsx-a11y": "^6.8.0",
22
+ "eslint-plugin-n": "^17.7.0",
19
23
  "eslint-plugin-prettier": "^5.1.3",
20
24
  "eslint-plugin-react": "^7.34.1",
21
- "eslint-plugin-react-hooks": "^4.6.0",
25
+ "eslint-plugin-react-hooks": "^4.6.2",
22
26
  "eslint-plugin-simple-import-sort": "^12.1.0",
23
- "eslint-plugin-unicorn": "^52.0.0",
27
+ "eslint-plugin-unicorn": "^53.0.0",
24
28
  "prettier": "^3.2.5",
25
29
  "typescript": "^5.4.5",
26
- "typescript-eslint": "^7.7.1"
30
+ "typescript-eslint": "^7.10.0"
27
31
  },
28
32
  "dependencies": {
29
- "@eslint/js": "^9.1.1",
30
- "eslint": "^9.1.1",
33
+ "@eslint/js": "^9.3.0",
34
+ "@typescript-eslint/parser": "^7.10.0",
35
+ "eslint": "^9.3.0",
31
36
  "eslint-config-prettier": "^9.1.0",
37
+ "eslint-plugin-astro": "^1.2.0",
38
+ "eslint-plugin-jsx-a11y": "^6.8.0",
39
+ "eslint-plugin-n": "^17.7.0",
32
40
  "eslint-plugin-prettier": "^5.1.3",
33
41
  "eslint-plugin-react": "^7.34.1",
34
- "eslint-plugin-react-hooks": "^4.6.0",
42
+ "eslint-plugin-react-hooks": "^4.6.2",
35
43
  "eslint-plugin-simple-import-sort": "^12.1.0",
36
- "eslint-plugin-unicorn": "^52.0.0",
44
+ "eslint-plugin-unicorn": "^53.0.0",
37
45
  "prettier": "^3.2.5",
38
46
  "typescript": "^5.4.5",
39
- "typescript-eslint": "^7.7.1"
47
+ "typescript-eslint": "^7.10.0"
40
48
  },
41
49
  "devDependencies": {
42
50
  "@ethang/project-builder": "^1.1.35"