@jimmy.codes/eslint-config 6.1.0 → 6.2.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/dist/index.d.ts CHANGED
@@ -51,18 +51,15 @@ interface RuleOptions {
51
51
  /**
52
52
  * Enforces explicit boolean values for boolean attributes.
53
53
  * @see https://eslint-react.xyz/docs/rules/avoid-shorthand-boolean
54
+ * @deprecated
54
55
  */
55
56
  '@eslint-react/avoid-shorthand-boolean'?: Linter.RuleEntry<[]>;
56
57
  /**
57
58
  * Enforces explicit `<Fragment>` components instead of the shorthand `<>` or `</>` syntax.
58
59
  * @see https://eslint-react.xyz/docs/rules/avoid-shorthand-fragment
60
+ * @deprecated
59
61
  */
60
62
  '@eslint-react/avoid-shorthand-fragment'?: Linter.RuleEntry<[]>;
61
- /**
62
- * Disallow `children` in void DOM elements.
63
- * @see https://eslint-react.xyz/docs/rules/dom-no-void-elements-with-children
64
- */
65
- '@eslint-react/dom/no-children-in-void-dom-elements'?: Linter.RuleEntry<[]>;
66
63
  /**
67
64
  * Disallow `dangerouslySetInnerHTML`.
68
65
  * @see https://eslint-react.xyz/docs/rules/dom-no-dangerously-set-innerhtml
@@ -143,26 +140,6 @@ interface RuleOptions {
143
140
  * @see https://eslint-react.xyz/docs/rules/dom-no-void-elements-with-children
144
141
  */
145
142
  '@eslint-react/dom/no-void-elements-with-children'?: Linter.RuleEntry<[]>;
146
- /**
147
- * Disallow useless `forwardRef` calls on components that don't use `ref`s.
148
- * @see https://eslint-react.xyz/docs/rules/no-useless-forward-ref
149
- */
150
- '@eslint-react/ensure-forward-ref-using-ref'?: Linter.RuleEntry<[]>;
151
- /**
152
- * Enforces that a function with the `use` prefix should use at least one Hook inside of it.
153
- * @see https://eslint-react.xyz/docs/rules/hooks-extra-no-unnecessary-use-prefix
154
- */
155
- '@eslint-react/hooks-extra/ensure-custom-hooks-using-other-hooks'?: Linter.RuleEntry<[]>;
156
- /**
157
- * Disallow unnecessary usage of `useCallback`.
158
- * @see https://eslint-react.xyz/docs/rules/hooks-extra-no-unnecessary-use-callback
159
- */
160
- '@eslint-react/hooks-extra/ensure-use-callback-has-non-empty-deps'?: Linter.RuleEntry<[]>;
161
- /**
162
- * Disallow unnecessary usage of `useMemo`.
163
- * @see https://eslint-react.xyz/docs/rules/hooks-extra-no-unnecessary-use-memo
164
- */
165
- '@eslint-react/hooks-extra/ensure-use-memo-has-non-empty-deps'?: Linter.RuleEntry<[]>;
166
143
  /**
167
144
  * Disallow direct calls to the `set` function of `useState` in `useEffect`.
168
145
  * @see https://eslint-react.xyz/docs/rules/hooks-extra-no-direct-set-state-in-use-effect
@@ -173,34 +150,28 @@ interface RuleOptions {
173
150
  * @see https://eslint-react.xyz/docs/rules/hooks-extra-no-direct-set-state-in-use-layout-effect
174
151
  */
175
152
  '@eslint-react/hooks-extra/no-direct-set-state-in-use-layout-effect'?: Linter.RuleEntry<[]>;
176
- /**
177
- * Enforces that a function with the `use` prefix should use at least one Hook inside of it.
178
- * @see https://eslint-react.xyz/docs/rules/hooks-extra-no-unnecessary-use-prefix
179
- */
180
- '@eslint-react/hooks-extra/no-redundant-custom-hook'?: Linter.RuleEntry<[]>;
181
153
  /**
182
154
  * Disallow unnecessary usage of `useCallback`.
183
155
  * @see https://eslint-react.xyz/docs/rules/hooks-extra-no-unnecessary-use-callback
156
+ * @deprecated
184
157
  */
185
158
  '@eslint-react/hooks-extra/no-unnecessary-use-callback'?: Linter.RuleEntry<[]>;
186
159
  /**
187
160
  * Disallow unnecessary usage of `useMemo`.
188
161
  * @see https://eslint-react.xyz/docs/rules/hooks-extra-no-unnecessary-use-memo
162
+ * @deprecated
189
163
  */
190
164
  '@eslint-react/hooks-extra/no-unnecessary-use-memo'?: Linter.RuleEntry<[]>;
191
165
  /**
192
166
  * Enforces that a function with the `use` prefix should use at least one Hook inside of it.
193
167
  * @see https://eslint-react.xyz/docs/rules/hooks-extra-no-unnecessary-use-prefix
168
+ * @deprecated
194
169
  */
195
170
  '@eslint-react/hooks-extra/no-unnecessary-use-prefix'?: Linter.RuleEntry<[]>;
196
- /**
197
- * Enforces that a function with the `use` prefix should use at least one Hook inside of it.
198
- * @see https://eslint-react.xyz/docs/rules/hooks-extra-no-unnecessary-use-prefix
199
- */
200
- '@eslint-react/hooks-extra/no-useless-custom-hooks'?: Linter.RuleEntry<[]>;
201
171
  /**
202
172
  * Enforces function calls made inside `useState` to be wrapped in an `initializer function`.
203
173
  * @see https://eslint-react.xyz/docs/rules/hooks-extra-prefer-use-state-lazy-initialization
174
+ * @deprecated
204
175
  */
205
176
  '@eslint-react/hooks-extra/prefer-use-state-lazy-initialization'?: Linter.RuleEntry<[]>;
206
177
  /**
@@ -208,6 +179,11 @@ interface RuleOptions {
208
179
  * @see https://eslint-react.xyz/docs/rules/jsx-key-before-spread
209
180
  */
210
181
  '@eslint-react/jsx-key-before-spread'?: Linter.RuleEntry<[]>;
182
+ /**
183
+ * Prevents comments from being inserted as text nodes.
184
+ * @see https://eslint-react.xyz/docs/rules/jsx-no-comment-textnodes
185
+ */
186
+ '@eslint-react/jsx-no-comment-textnodes'?: Linter.RuleEntry<[]>;
211
187
  /**
212
188
  * Disallow duplicate props in JSX elements.
213
189
  * @see https://eslint-react.xyz/docs/rules/jsx-no-duplicate-props
@@ -223,6 +199,16 @@ interface RuleOptions {
223
199
  * @see https://eslint-react.xyz/docs/rules/jsx-no-undef
224
200
  */
225
201
  '@eslint-react/jsx-no-undef'?: Linter.RuleEntry<[]>;
202
+ /**
203
+ * Enforces shorthand syntax for boolean attributes.
204
+ * @see https://eslint-react.xyz/docs/rules/jsx-shorthand-boolean
205
+ */
206
+ '@eslint-react/jsx-shorthand-boolean'?: Linter.RuleEntry<EslintReactJsxShorthandBoolean>;
207
+ /**
208
+ * Enforces shorthand syntax for fragments.
209
+ * @see https://eslint-react.xyz/docs/rules/jsx-shorthand-fragment
210
+ */
211
+ '@eslint-react/jsx-shorthand-fragment'?: Linter.RuleEntry<EslintReactJsxShorthandFragment>;
226
212
  /**
227
213
  * Marks React variables as used when JSX is used.
228
214
  * @see https://eslint-react.xyz/docs/rules/jsx-uses-react
@@ -311,18 +297,15 @@ interface RuleOptions {
311
297
  /**
312
298
  * Prevents comments from being inserted as text nodes.
313
299
  * @see https://eslint-react.xyz/docs/rules/no-comment-textnodes
300
+ * @deprecated
314
301
  */
315
302
  '@eslint-react/no-comment-textnodes'?: Linter.RuleEntry<[]>;
316
303
  /**
317
304
  * Disallow complex conditional rendering in JSX expressions.
318
305
  * @see https://eslint-react.xyz/docs/rules/no-complex-conditional-rendering
306
+ * @deprecated
319
307
  */
320
308
  '@eslint-react/no-complex-conditional-rendering'?: Linter.RuleEntry<[]>;
321
- /**
322
- * Disallow complex conditional rendering in JSX expressions.
323
- * @see https://eslint-react.xyz/docs/rules/no-complex-conditional-rendering
324
- */
325
- '@eslint-react/no-complicated-conditional-rendering'?: Linter.RuleEntry<[]>;
326
309
  /**
327
310
  * Replace usages of `componentWillMount` with `UNSAFE_componentWillMount`.
328
311
  * @see https://eslint-react.xyz/docs/rules/no-component-will-mount
@@ -358,11 +341,6 @@ interface RuleOptions {
358
341
  * @see https://eslint-react.xyz/docs/rules/no-direct-mutation-state
359
342
  */
360
343
  '@eslint-react/no-direct-mutation-state'?: Linter.RuleEntry<[]>;
361
- /**
362
- * Disallow duplicate props in JSX elements.
363
- * @see https://eslint-react.xyz/docs/rules/jsx-no-duplicate-props
364
- */
365
- '@eslint-react/no-duplicate-jsx-props'?: Linter.RuleEntry<[]>;
366
344
  /**
367
345
  * Disallow duplicate `key` on elements in the same array or a list of `children`.
368
346
  * @see https://eslint-react.xyz/docs/rules/no-duplicate-key
@@ -408,11 +386,6 @@ interface RuleOptions {
408
386
  * @see https://eslint-react.xyz/docs/rules/no-nested-component-definitions
409
387
  */
410
388
  '@eslint-react/no-nested-component-definitions'?: Linter.RuleEntry<[]>;
411
- /**
412
- * Disallow nesting component definitions inside other components.
413
- * @see https://eslint-react.xyz/docs/rules/no-nested-component-definitions
414
- */
415
- '@eslint-react/no-nested-components'?: Linter.RuleEntry<[]>;
416
389
  /**
417
390
  * Disallow nesting lazy component declarations inside other components.
418
391
  * @see https://eslint-react.xyz/docs/rules/no-nested-component-definitions
@@ -448,6 +421,21 @@ interface RuleOptions {
448
421
  * @see https://eslint-react.xyz/docs/rules/no-string-refs
449
422
  */
450
423
  '@eslint-react/no-string-refs'?: Linter.RuleEntry<[]>;
424
+ /**
425
+ * Disallow unnecessary usage of `useCallback`.
426
+ * @see https://eslint-react.xyz/docs/rules/no-unnecessary-use-callback
427
+ */
428
+ '@eslint-react/no-unnecessary-use-callback'?: Linter.RuleEntry<[]>;
429
+ /**
430
+ * Disallow unnecessary usage of `useMemo`.
431
+ * @see https://eslint-react.xyz/docs/rules/no-unnecessary-use-memo
432
+ */
433
+ '@eslint-react/no-unnecessary-use-memo'?: Linter.RuleEntry<[]>;
434
+ /**
435
+ * Enforces that a function with the `use` prefix should use at least one Hook inside of it.
436
+ * @see https://eslint-react.xyz/docs/rules/no-unnecessary-use-prefix
437
+ */
438
+ '@eslint-react/no-unnecessary-use-prefix'?: Linter.RuleEntry<[]>;
451
439
  /**
452
440
  * Warns the usage of `UNSAFE_componentWillMount` in class components.
453
441
  * @see https://eslint-react.xyz/docs/rules/no-unsafe-component-will-mount
@@ -478,6 +466,11 @@ interface RuleOptions {
478
466
  * @see https://eslint-react.xyz/docs/rules/no-unused-class-component-members
479
467
  */
480
468
  '@eslint-react/no-unused-class-component-members'?: Linter.RuleEntry<[]>;
469
+ /**
470
+ * Warns about unused component prop declarations.
471
+ * @see https://eslint-react.xyz/docs/rules/no-unused-props
472
+ */
473
+ '@eslint-react/no-unused-props'?: Linter.RuleEntry<[]>;
481
474
  /**
482
475
  * Warns unused class component state.
483
476
  * @see https://eslint-react.xyz/docs/rules/no-unused-state
@@ -503,9 +496,15 @@ interface RuleOptions {
503
496
  * @see https://eslint-react.xyz/docs/rules/prefer-destructuring-assignment
504
497
  */
505
498
  '@eslint-react/prefer-destructuring-assignment'?: Linter.RuleEntry<[]>;
499
+ /**
500
+ * Enforces React is imported via a namespace import.
501
+ * @see https://eslint-react.xyz/docs/rules/prefer-namespace-import
502
+ */
503
+ '@eslint-react/prefer-namespace-import'?: Linter.RuleEntry<[]>;
506
504
  /**
507
505
  * Enforces React is imported via a namespace import.
508
506
  * @see https://eslint-react.xyz/docs/rules/prefer-react-namespace-import
507
+ * @deprecated
509
508
  */
510
509
  '@eslint-react/prefer-react-namespace-import'?: Linter.RuleEntry<[]>;
511
510
  /**
@@ -516,18 +515,20 @@ interface RuleOptions {
516
515
  /**
517
516
  * Enforces shorthand syntax for boolean attributes.
518
517
  * @see https://eslint-react.xyz/docs/rules/prefer-shorthand-boolean
518
+ * @deprecated
519
519
  */
520
520
  '@eslint-react/prefer-shorthand-boolean'?: Linter.RuleEntry<[]>;
521
521
  /**
522
522
  * Enforces shorthand syntax for fragments.
523
523
  * @see https://eslint-react.xyz/docs/rules/prefer-shorthand-fragment
524
+ * @deprecated
524
525
  */
525
526
  '@eslint-react/prefer-shorthand-fragment'?: Linter.RuleEntry<[]>;
526
527
  /**
527
- * Marks variables used in JSX elements as used.
528
- * @see https://eslint-react.xyz/docs/rules/jsx-uses-vars
528
+ * Enforces function calls made inside `useState` to be wrapped in an `initializer function`.
529
+ * @see https://eslint-react.xyz/docs/rules/prefer-use-state-lazy-initialization
529
530
  */
530
- '@eslint-react/use-jsx-vars'?: Linter.RuleEntry<[]>;
531
+ '@eslint-react/prefer-use-state-lazy-initialization'?: Linter.RuleEntry<[]>;
531
532
  /**
532
533
  * Prevents leaked `addEventListener` in a component or custom Hook.
533
534
  * @see https://eslint-react.xyz/docs/rules/web-api-no-leaked-event-listener
@@ -6994,11 +6995,13 @@ type EslintReactDomNoUnknownProperty = [] | [{
6994
6995
  ignore?: string[];
6995
6996
  requireDataLowercase?: boolean;
6996
6997
  }];
6998
+ // ----- @eslint-react/jsx-shorthand-boolean -----
6999
+ type EslintReactJsxShorthandBoolean = [] | [(-1 | 1)];
7000
+ // ----- @eslint-react/jsx-shorthand-fragment -----
7001
+ type EslintReactJsxShorthandFragment = [] | [(-1 | 1)];
6997
7002
  // ----- @eslint-react/naming-convention/component-name -----
6998
7003
  type EslintReactNamingConventionComponentName = [] | [(("PascalCase" | "CONSTANT_CASE") | {
6999
7004
  allowAllCaps?: boolean;
7000
- allowLeadingUnderscore?: boolean;
7001
- allowNamespace?: boolean;
7002
7005
  excepts?: string[];
7003
7006
  rule?: ("PascalCase" | "CONSTANT_CASE");
7004
7007
  })];
@@ -11616,10 +11619,17 @@ type NoRestrictedExports = [] | [({
11616
11619
  };
11617
11620
  })];
11618
11621
  // ----- no-restricted-globals -----
11619
- type NoRestrictedGlobals = (string | {
11622
+ type NoRestrictedGlobals = ((string | {
11620
11623
  name: string;
11621
11624
  message?: string;
11622
- })[];
11625
+ })[] | [] | [{
11626
+ globals: (string | {
11627
+ name: string;
11628
+ message?: string;
11629
+ })[];
11630
+ checkGlobalObject?: boolean;
11631
+ globalObjects?: string[];
11632
+ }]);
11623
11633
  // ----- no-restricted-imports -----
11624
11634
  type NoRestrictedImports = ((string | {
11625
11635
  name: string;
@@ -11847,6 +11857,8 @@ type OneVar = [] | [(("always" | "never" | "consecutive") | {
11847
11857
  var?: ("always" | "never" | "consecutive");
11848
11858
  let?: ("always" | "never" | "consecutive");
11849
11859
  const?: ("always" | "never" | "consecutive");
11860
+ using?: ("always" | "never" | "consecutive");
11861
+ awaitUsing?: ("always" | "never" | "consecutive");
11850
11862
  } | {
11851
11863
  initialized?: ("always" | "never" | "consecutive");
11852
11864
  uninitialized?: ("always" | "never" | "consecutive");
@@ -13657,11 +13669,9 @@ type PlaywrightValidExpect = [] | [{
13657
13669
  type PlaywrightValidTestTags = [] | [{
13658
13670
  allowedTags?: (string | {
13659
13671
  source?: string;
13660
- [k: string]: unknown | undefined;
13661
13672
  })[];
13662
13673
  disallowedTags?: (string | {
13663
13674
  source?: string;
13664
- [k: string]: unknown | undefined;
13665
13675
  })[];
13666
13676
  }];
13667
13677
  // ----- playwright/valid-title -----
package/dist/index.js CHANGED
@@ -471,8 +471,8 @@ const defineConfig = async ({ astro = false, autoDetect = true, ignores = [], je
471
471
  stylisticConfig()
472
472
  ];
473
473
  const featureConfigs = await Promise.all([
474
- isTypescriptEnabled && unwrap(import("./typescript-fvBsWGqo.js")),
475
- isReactEnabled && unwrap(import("./react-BE1N8MTt.js")),
474
+ isTypescriptEnabled && unwrap(import("./typescript-DhqJ_65V.js")),
475
+ isReactEnabled && unwrap(import("./react-w3cMDj2s.js")),
476
476
  isTanstackQueryEnabled && unwrap(import("./tanstack-query-DF8OWtLq.js")),
477
477
  isAstroEnabled && unwrap(import("./astro-CqgWkoKy.js")),
478
478
  isJestEnabled && unwrap(import("./jest-CzZHXxA7.js")),
@@ -29,18 +29,20 @@ const reactRules = async () => {
29
29
  return {
30
30
  ...jsxA11yPlugin.configs.recommended.rules,
31
31
  ...upwarn(reactPluginRules),
32
- "@eslint-react/avoid-shorthand-boolean": "off",
33
- "@eslint-react/avoid-shorthand-fragment": "off",
34
- "@eslint-react/hooks-extra/no-unnecessary-use-callback": "error",
35
- "@eslint-react/hooks-extra/no-unnecessary-use-memo": "error",
36
- "@eslint-react/hooks-extra/no-unnecessary-use-prefix": "error",
37
- "@eslint-react/hooks-extra/prefer-use-state-lazy-initialization": "error",
32
+ "@eslint-react/hooks-extra/no-direct-set-state-in-use-effect": "error",
33
+ "@eslint-react/hooks-extra/no-direct-set-state-in-use-layout-effect": "error",
34
+ "@eslint-react/jsx-key-before-spread": "error",
35
+ "@eslint-react/jsx-shorthand-boolean": "error",
36
+ "@eslint-react/jsx-shorthand-fragment": "error",
37
+ "@eslint-react/naming-convention/component-name": "error",
38
+ "@eslint-react/naming-convention/use-state": "error",
38
39
  "@eslint-react/no-children-prop": "error",
39
- "@eslint-react/no-complex-conditional-rendering": "error",
40
+ "@eslint-react/no-class-component": "error",
41
+ "@eslint-react/no-missing-context-display-name": "error",
42
+ "@eslint-react/no-unnecessary-use-callback": "error",
43
+ "@eslint-react/no-unnecessary-use-memo": "error",
40
44
  "@eslint-react/no-useless-fragment": "error",
41
- "@eslint-react/prefer-react-namespace-import": "error",
42
- "@eslint-react/prefer-shorthand-boolean": "error",
43
- "@eslint-react/prefer-shorthand-fragment": "error",
45
+ "@eslint-react/prefer-namespace-import": "error",
44
46
  "react-compiler/react-compiler": "error",
45
47
  "react-hooks/exhaustive-deps": "error",
46
48
  "react-hooks/rules-of-hooks": "error",
@@ -1,6 +1,7 @@
1
1
  import { GLOB_JS, GLOB_JSX, GLOB_TESTS } from "./constants-dep165g5.js";
2
2
 
3
3
  //#region src/rules/typescript.ts
4
+ const disabledEslintRules = { "no-use-before-define": "off" };
4
5
  const typescriptRules = {
5
6
  "@typescript-eslint/consistent-type-exports": ["error", { fixMixedExportsWithInlineTypeSpecifier: false }],
6
7
  "@typescript-eslint/consistent-type-imports": ["error", { fixStyle: "separate-type-imports" }],
@@ -22,8 +23,9 @@ const typescriptRules = {
22
23
  functions: false,
23
24
  variables: true
24
25
  }],
26
+ "@typescript-eslint/no-useless-empty-export": "error",
25
27
  "@typescript-eslint/restrict-template-expressions": ["error", { allowNumber: true }],
26
- "no-use-before-define": "off"
28
+ ...disabledEslintRules
27
29
  };
28
30
 
29
31
  //#endregion
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jimmy.codes/eslint-config",
3
- "version": "6.1.0",
3
+ "version": "6.2.0",
4
4
  "description": "A simple, modern ESLint config that covers most use cases.",
5
5
  "keywords": [
6
6
  "eslint",
@@ -33,14 +33,14 @@
33
33
  ],
34
34
  "dependencies": {
35
35
  "@eslint-community/eslint-plugin-eslint-comments": "^4.5.0",
36
- "@eslint-react/eslint-plugin": "^1.52.3",
37
- "@eslint/js": "^9.32.0",
38
- "@next/eslint-plugin-next": "^15.4.4",
39
- "@stylistic/eslint-plugin": "^5.2.2",
40
- "@tanstack/eslint-plugin-query": "^5.81.2",
36
+ "@eslint-react/eslint-plugin": "2.0.0-beta.23",
37
+ "@eslint/js": "^9.33.0",
38
+ "@next/eslint-plugin-next": "^15.4.6",
39
+ "@stylistic/eslint-plugin": "^5.2.3",
40
+ "@tanstack/eslint-plugin-query": "^5.83.1",
41
41
  "@types/eslint": "9.6.1",
42
- "@typescript-eslint/parser": "^8.38.0",
43
- "@typescript-eslint/utils": "^8.38.0",
42
+ "@typescript-eslint/parser": "^8.39.0",
43
+ "@typescript-eslint/utils": "^8.39.0",
44
44
  "@vitest/eslint-plugin": "^1.3.4",
45
45
  "astro-eslint-parser": "^1.2.2",
46
46
  "eslint-config-prettier": "^10.1.8",
@@ -49,21 +49,21 @@
49
49
  "eslint-plugin-import-x": "^4.16.1",
50
50
  "eslint-plugin-jest": "^29.0.1",
51
51
  "eslint-plugin-jest-dom": "^5.5.0",
52
- "eslint-plugin-jsdoc": "^52.0.0",
52
+ "eslint-plugin-jsdoc": "^52.0.4",
53
53
  "eslint-plugin-jsx-a11y": "^6.10.2",
54
54
  "eslint-plugin-n": "^17.21.3",
55
55
  "eslint-plugin-perfectionist": "^4.15.0",
56
- "eslint-plugin-playwright": "^2.2.1",
56
+ "eslint-plugin-playwright": "^2.2.2",
57
57
  "eslint-plugin-react-compiler": "19.1.0-rc.2",
58
58
  "eslint-plugin-react-hooks": "^5.2.0",
59
59
  "eslint-plugin-react-refresh": "0.4.20",
60
- "eslint-plugin-regexp": "^2.9.0",
60
+ "eslint-plugin-regexp": "^2.10.0",
61
61
  "eslint-plugin-storybook": "0.12.0",
62
62
  "eslint-plugin-testing-library": "^7.6.3",
63
63
  "eslint-plugin-unicorn": "^60.0.0",
64
64
  "globals": "^16.3.0",
65
65
  "local-pkg": "^1.1.1",
66
- "typescript-eslint": "^8.38.0"
66
+ "typescript-eslint": "^8.39.0"
67
67
  },
68
68
  "peerDependencies": {
69
69
  "eslint": "^9.10.0"