@jimmy.codes/eslint-config 6.11.0 → 6.13.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
@@ -79,7 +79,7 @@ interface RuleOptions {
79
79
  */
80
80
  '@eslint-react/dom/no-missing-button-type'?: Linter.RuleEntry<[]>;
81
81
  /**
82
- * Enforces explicit `sandbox` attribute for `iframe` elements.
82
+ * Enforces explicit `sandbox` prop for `iframe` elements.
83
83
  * @see https://eslint-react.xyz/docs/rules/dom-no-missing-iframe-sandbox
84
84
  */
85
85
  '@eslint-react/dom/no-missing-iframe-sandbox'?: Linter.RuleEntry<[]>;
@@ -133,13 +133,18 @@ interface RuleOptions {
133
133
  * @see https://eslint-react.xyz/docs/rules/dom-no-void-elements-with-children
134
134
  */
135
135
  '@eslint-react/dom/no-void-elements-with-children'?: Linter.RuleEntry<[]>;
136
+ /**
137
+ * Enforces React Dom is imported via a namespace import.
138
+ * @see https://eslint-react.xyz/docs/rules/dom-prefer-namespace-import
139
+ */
140
+ '@eslint-react/dom/prefer-namespace-import'?: Linter.RuleEntry<[]>;
136
141
  /**
137
142
  * Disallow direct calls to the `set` function of `useState` in `useEffect`.
138
143
  * @see https://eslint-react.xyz/docs/rules/hooks-extra-no-direct-set-state-in-use-effect
139
144
  */
140
145
  '@eslint-react/hooks-extra/no-direct-set-state-in-use-effect'?: Linter.RuleEntry<[]>;
141
146
  /**
142
- * Enforces that the 'key' attribute is placed before the spread attribute in JSX elements.
147
+ * Enforces that the 'key' prop is placed before the spread prop in JSX elements.
143
148
  * @see https://eslint-react.xyz/docs/rules/jsx-key-before-spread
144
149
  */
145
150
  '@eslint-react/jsx-key-before-spread'?: Linter.RuleEntry<[]>;
@@ -369,7 +374,7 @@ interface RuleOptions {
369
374
  */
370
375
  '@eslint-react/no-set-state-in-component-did-update'?: Linter.RuleEntry<[]>;
371
376
  /**
372
- * Disallows calling `this.setState` in `componentWillUpdate` outside of functions, such as callbacks.
377
+ * Disallow calling `this.setState` in `componentWillUpdate` outside of functions, such as callbacks.
373
378
  * @see https://eslint-react.xyz/docs/rules/no-set-state-in-component-will-update
374
379
  */
375
380
  '@eslint-react/no-set-state-in-component-will-update'?: Linter.RuleEntry<[]>;
@@ -429,7 +434,7 @@ interface RuleOptions {
429
434
  */
430
435
  '@eslint-react/no-unused-class-component-members'?: Linter.RuleEntry<[]>;
431
436
  /**
432
- * Warns about unused component prop declarations.
437
+ * Warns component props that are defined but never used.
433
438
  * @see https://eslint-react.xyz/docs/rules/no-unused-props
434
439
  */
435
440
  '@eslint-react/no-unused-props'?: Linter.RuleEntry<[]>;
@@ -2996,6 +3001,11 @@ interface RuleOptions {
2996
3001
  * @see https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/empty-tags.md#repos-sticky-header
2997
3002
  */
2998
3003
  'jsdoc/empty-tags'?: Linter.RuleEntry<JsdocEmptyTags>;
3004
+ /**
3005
+ * Reports use of JSDoc tags in non-tag positions (in the default "typescript" mode).
3006
+ * @see https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/escape-inline-tags.md#repos-sticky-header
3007
+ */
3008
+ 'jsdoc/escape-inline-tags'?: Linter.RuleEntry<JsdocEscapeInlineTags>;
2999
3009
  /**
3000
3010
  * Prohibits use of `@implements` on non-constructor functions (to enforce the tag only being used on classes/constructors).
3001
3011
  * @see https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/implements-on-classes.md#repos-sticky-header
@@ -3206,6 +3216,11 @@ interface RuleOptions {
3206
3216
  * @see https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-template.md#repos-sticky-header
3207
3217
  */
3208
3218
  'jsdoc/require-template'?: Linter.RuleEntry<JsdocRequireTemplate>;
3219
+ /**
3220
+ * Requires a description for `@template` tags
3221
+ * @see https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-template-description.md#repos-sticky-header
3222
+ */
3223
+ 'jsdoc/require-template-description'?: Linter.RuleEntry<[]>;
3209
3224
  /**
3210
3225
  * Requires that throw statements are documented with `@throws` tags.
3211
3226
  * @see https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-throws.md#repos-sticky-header
@@ -5132,16 +5147,121 @@ interface RuleOptions {
5132
5147
  * Surfaces diagnostics from React Forget
5133
5148
  */
5134
5149
  'react-compiler/react-compiler'?: Linter.RuleEntry<ReactCompilerReactCompiler>;
5150
+ /**
5151
+ * Verifies that automatic effect dependencies are compiled if opted-in
5152
+ */
5153
+ 'react-hooks/automatic-effect-dependencies'?: Linter.RuleEntry<ReactHooksAutomaticEffectDependencies>;
5154
+ /**
5155
+ * Validates against calling capitalized functions/methods instead of using JSX
5156
+ */
5157
+ 'react-hooks/capitalized-calls'?: Linter.RuleEntry<ReactHooksCapitalizedCalls>;
5158
+ /**
5159
+ * Validates against higher order functions defining nested components or hooks. Components and hooks should be defined at the module level
5160
+ */
5161
+ 'react-hooks/component-hook-factories'?: Linter.RuleEntry<ReactHooksComponentHookFactories>;
5162
+ /**
5163
+ * Validates the compiler configuration options
5164
+ */
5165
+ 'react-hooks/config'?: Linter.RuleEntry<ReactHooksConfig>;
5166
+ /**
5167
+ * Validates usage of error boundaries instead of try/catch for errors in child components
5168
+ */
5169
+ 'react-hooks/error-boundaries'?: Linter.RuleEntry<ReactHooksErrorBoundaries>;
5135
5170
  /**
5136
5171
  * verifies the list of dependencies for Hooks like useEffect and similar
5137
5172
  * @see https://github.com/facebook/react/issues/14920
5138
5173
  */
5139
5174
  'react-hooks/exhaustive-deps'?: Linter.RuleEntry<ReactHooksExhaustiveDeps>;
5175
+ /**
5176
+ * Validates usage of fbt
5177
+ */
5178
+ 'react-hooks/fbt'?: Linter.RuleEntry<ReactHooksFbt>;
5179
+ /**
5180
+ * Validates usage of `fire`
5181
+ */
5182
+ 'react-hooks/fire'?: Linter.RuleEntry<ReactHooksFire>;
5183
+ /**
5184
+ * Validates configuration of [gating mode](https://react.dev/reference/react-compiler/gating)
5185
+ */
5186
+ 'react-hooks/gating'?: Linter.RuleEntry<ReactHooksGating>;
5187
+ /**
5188
+ * Validates against assignment/mutation of globals during render, part of ensuring that [side effects must render outside of render](https://react.dev/reference/rules/components-and-hooks-must-be-pure#side-effects-must-run-outside-of-render)
5189
+ */
5190
+ 'react-hooks/globals'?: Linter.RuleEntry<ReactHooksGlobals>;
5191
+ /**
5192
+ * Validates the rules of hooks
5193
+ */
5194
+ 'react-hooks/hooks'?: Linter.RuleEntry<ReactHooksHooks>;
5195
+ /**
5196
+ * Validates against mutating props, state, and other values that [are immutable](https://react.dev/reference/rules/components-and-hooks-must-be-pure#props-and-state-are-immutable)
5197
+ */
5198
+ 'react-hooks/immutability'?: Linter.RuleEntry<ReactHooksImmutability>;
5199
+ /**
5200
+ * Validates against usage of libraries which are incompatible with memoization (manual or automatic)
5201
+ */
5202
+ 'react-hooks/incompatible-library'?: Linter.RuleEntry<ReactHooksIncompatibleLibrary>;
5203
+ /**
5204
+ * Internal invariants
5205
+ */
5206
+ 'react-hooks/invariant'?: Linter.RuleEntry<ReactHooksInvariant>;
5207
+ /**
5208
+ * Validates that effect dependencies are memoized
5209
+ */
5210
+ 'react-hooks/memoized-effect-dependencies'?: Linter.RuleEntry<ReactHooksMemoizedEffectDependencies>;
5211
+ /**
5212
+ * Validates against deriving values from state in an effect
5213
+ */
5214
+ 'react-hooks/no-deriving-state-in-effects'?: Linter.RuleEntry<ReactHooksNoDerivingStateInEffects>;
5215
+ 'react-hooks/no-unused-directives'?: Linter.RuleEntry<ReactHooksNoUnusedDirectives>;
5216
+ /**
5217
+ * Validates that existing manual memoized is preserved by the compiler. React Compiler will only compile components and hooks if its inference [matches or exceeds the existing manual memoization](https://react.dev/learn/react-compiler/introduction#what-should-i-do-about-usememo-usecallback-and-reactmemo)
5218
+ */
5219
+ 'react-hooks/preserve-manual-memoization'?: Linter.RuleEntry<ReactHooksPreserveManualMemoization>;
5220
+ /**
5221
+ * Validates that [components/hooks are pure](https://react.dev/reference/rules/components-and-hooks-must-be-pure) by checking that they do not call known-impure functions
5222
+ */
5223
+ 'react-hooks/purity'?: Linter.RuleEntry<ReactHooksPurity>;
5224
+ /**
5225
+ * Validates correct usage of refs, not reading/writing during render. See the "pitfalls" section in [`useRef()` usage](https://react.dev/reference/react/useRef#usage)
5226
+ */
5227
+ 'react-hooks/refs'?: Linter.RuleEntry<ReactHooksRefs>;
5228
+ /**
5229
+ * Validates against suppression of other rules
5230
+ */
5231
+ 'react-hooks/rule-suppression'?: Linter.RuleEntry<ReactHooksRuleSuppression>;
5140
5232
  /**
5141
5233
  * enforces the Rules of Hooks
5142
- * @see https://reactjs.org/docs/hooks-rules.html
5234
+ * @see https://react.dev/reference/rules/rules-of-hooks
5235
+ */
5236
+ 'react-hooks/rules-of-hooks'?: Linter.RuleEntry<ReactHooksRulesOfHooks>;
5237
+ /**
5238
+ * Validates against calling setState synchronously in an effect, which can lead to re-renders that degrade performance
5239
+ */
5240
+ 'react-hooks/set-state-in-effect'?: Linter.RuleEntry<ReactHooksSetStateInEffect>;
5241
+ /**
5242
+ * Validates against setting state during render, which can trigger additional renders and potential infinite render loops
5243
+ */
5244
+ 'react-hooks/set-state-in-render'?: Linter.RuleEntry<ReactHooksSetStateInRender>;
5245
+ /**
5246
+ * Validates that components are static, not recreated every render. Components that are recreated dynamically can reset state and trigger excessive re-rendering
5247
+ */
5248
+ 'react-hooks/static-components'?: Linter.RuleEntry<ReactHooksStaticComponents>;
5249
+ /**
5250
+ * Validates against invalid syntax
5143
5251
  */
5144
- 'react-hooks/rules-of-hooks'?: Linter.RuleEntry<[]>;
5252
+ 'react-hooks/syntax'?: Linter.RuleEntry<ReactHooksSyntax>;
5253
+ /**
5254
+ * Unimplemented features
5255
+ */
5256
+ 'react-hooks/todo'?: Linter.RuleEntry<ReactHooksTodo>;
5257
+ /**
5258
+ * Validates against syntax that we do not plan to support in React Compiler
5259
+ */
5260
+ 'react-hooks/unsupported-syntax'?: Linter.RuleEntry<ReactHooksUnsupportedSyntax>;
5261
+ /**
5262
+ * Validates usage of the useMemo() hook against common mistakes. See [`useMemo()` docs](https://react.dev/reference/react/useMemo) for more information.
5263
+ */
5264
+ 'react-hooks/use-memo'?: Linter.RuleEntry<ReactHooksUseMemo>;
5145
5265
  'react-refresh/only-export-components'?: Linter.RuleEntry<ReactRefreshOnlyExportComponents>;
5146
5266
  /**
5147
5267
  * disallow confusing quantifiers
@@ -6800,6 +6920,11 @@ interface RuleOptions {
6800
6920
  * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/padding-around-test-blocks.md
6801
6921
  */
6802
6922
  'vitest/padding-around-test-blocks'?: Linter.RuleEntry<[]>;
6923
+ /**
6924
+ * Prefer `toHaveBeenCalledExactlyOnceWith` over `toHaveBeenCalledOnce` and `toHaveBeenCalledWith`
6925
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-called-exactly-once-with.md
6926
+ */
6927
+ 'vitest/prefer-called-exactly-once-with'?: Linter.RuleEntry<[]>;
6803
6928
  /**
6804
6929
  * enforce using `toBeCalledOnce()` or `toHaveBeenCalledOnce()`
6805
6930
  * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-called-once.md
@@ -6860,6 +6985,11 @@ interface RuleOptions {
6860
6985
  * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-hooks-on-top.md
6861
6986
  */
6862
6987
  'vitest/prefer-hooks-on-top'?: Linter.RuleEntry<[]>;
6988
+ /**
6989
+ * prefer dynamic import in mock
6990
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-import-in-mock.md
6991
+ */
6992
+ 'vitest/prefer-import-in-mock'?: Linter.RuleEntry<[]>;
6863
6993
  /**
6864
6994
  * enforce importing Vitest globals
6865
6995
  * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-importing-vitest-globals.md
@@ -10091,6 +10221,7 @@ type JsdocCheckPropertyNames = [] | [{
10091
10221
  type JsdocCheckTagNames = [] | [{
10092
10222
  definedTags?: string[];
10093
10223
  enableFixer?: boolean;
10224
+ inlineTags?: string[];
10094
10225
  jsxTags?: boolean;
10095
10226
  typed?: boolean;
10096
10227
  }];
@@ -10133,6 +10264,12 @@ type JsdocConvertToJsdocComments = [] | [{
10133
10264
  type JsdocEmptyTags = [] | [{
10134
10265
  tags?: string[];
10135
10266
  }];
10267
+ // ----- jsdoc/escape-inline-tags -----
10268
+ type JsdocEscapeInlineTags = [] | [{
10269
+ allowedInlineTags?: string[];
10270
+ enableFixer?: boolean;
10271
+ fixType?: ("backticks" | "backslash");
10272
+ }];
10136
10273
  // ----- jsdoc/implements-on-classes -----
10137
10274
  type JsdocImplementsOnClasses = [] | [{
10138
10275
  contexts?: (string | {
@@ -10249,6 +10386,7 @@ type JsdocNoTypes = [] | [{
10249
10386
  }];
10250
10387
  // ----- jsdoc/no-undefined-types -----
10251
10388
  type JsdocNoUndefinedTypes = [] | [{
10389
+ checkUsedTypedefs?: boolean;
10252
10390
  definedTypes?: string[];
10253
10391
  disableReporting?: boolean;
10254
10392
  markVariablesAsUsed?: boolean;
@@ -10418,6 +10556,7 @@ type JsdocRequireReturns = [] | [{
10418
10556
  type JsdocRequireReturnsCheck = [] | [{
10419
10557
  exemptAsync?: boolean;
10420
10558
  exemptGenerators?: boolean;
10559
+ noNativeTypes?: boolean;
10421
10560
  reportMissingReturnForUndefinedTypes?: boolean;
10422
10561
  }];
10423
10562
  // ----- jsdoc/require-returns-description -----
@@ -13864,10 +14003,124 @@ type Radix = [] | [("always" | "as-needed")];
13864
14003
  type ReactCompilerReactCompiler = [] | [{
13865
14004
  [k: string]: unknown | undefined;
13866
14005
  }];
14006
+ // ----- react-hooks/automatic-effect-dependencies -----
14007
+ type ReactHooksAutomaticEffectDependencies = [] | [{
14008
+ [k: string]: unknown | undefined;
14009
+ }];
14010
+ // ----- react-hooks/capitalized-calls -----
14011
+ type ReactHooksCapitalizedCalls = [] | [{
14012
+ [k: string]: unknown | undefined;
14013
+ }];
14014
+ // ----- react-hooks/component-hook-factories -----
14015
+ type ReactHooksComponentHookFactories = [] | [{
14016
+ [k: string]: unknown | undefined;
14017
+ }];
14018
+ // ----- react-hooks/config -----
14019
+ type ReactHooksConfig = [] | [{
14020
+ [k: string]: unknown | undefined;
14021
+ }];
14022
+ // ----- react-hooks/error-boundaries -----
14023
+ type ReactHooksErrorBoundaries = [] | [{
14024
+ [k: string]: unknown | undefined;
14025
+ }];
13867
14026
  // ----- react-hooks/exhaustive-deps -----
13868
14027
  type ReactHooksExhaustiveDeps = [] | [{
13869
14028
  additionalHooks?: string;
13870
14029
  enableDangerousAutofixThisMayCauseInfiniteLoops?: boolean;
14030
+ experimental_autoDependenciesHooks?: string[];
14031
+ requireExplicitEffectDeps?: boolean;
14032
+ }];
14033
+ // ----- react-hooks/fbt -----
14034
+ type ReactHooksFbt = [] | [{
14035
+ [k: string]: unknown | undefined;
14036
+ }];
14037
+ // ----- react-hooks/fire -----
14038
+ type ReactHooksFire = [] | [{
14039
+ [k: string]: unknown | undefined;
14040
+ }];
14041
+ // ----- react-hooks/gating -----
14042
+ type ReactHooksGating = [] | [{
14043
+ [k: string]: unknown | undefined;
14044
+ }];
14045
+ // ----- react-hooks/globals -----
14046
+ type ReactHooksGlobals = [] | [{
14047
+ [k: string]: unknown | undefined;
14048
+ }];
14049
+ // ----- react-hooks/hooks -----
14050
+ type ReactHooksHooks = [] | [{
14051
+ [k: string]: unknown | undefined;
14052
+ }];
14053
+ // ----- react-hooks/immutability -----
14054
+ type ReactHooksImmutability = [] | [{
14055
+ [k: string]: unknown | undefined;
14056
+ }];
14057
+ // ----- react-hooks/incompatible-library -----
14058
+ type ReactHooksIncompatibleLibrary = [] | [{
14059
+ [k: string]: unknown | undefined;
14060
+ }];
14061
+ // ----- react-hooks/invariant -----
14062
+ type ReactHooksInvariant = [] | [{
14063
+ [k: string]: unknown | undefined;
14064
+ }];
14065
+ // ----- react-hooks/memoized-effect-dependencies -----
14066
+ type ReactHooksMemoizedEffectDependencies = [] | [{
14067
+ [k: string]: unknown | undefined;
14068
+ }];
14069
+ // ----- react-hooks/no-deriving-state-in-effects -----
14070
+ type ReactHooksNoDerivingStateInEffects = [] | [{
14071
+ [k: string]: unknown | undefined;
14072
+ }];
14073
+ // ----- react-hooks/no-unused-directives -----
14074
+ type ReactHooksNoUnusedDirectives = [] | [{
14075
+ [k: string]: unknown | undefined;
14076
+ }];
14077
+ // ----- react-hooks/preserve-manual-memoization -----
14078
+ type ReactHooksPreserveManualMemoization = [] | [{
14079
+ [k: string]: unknown | undefined;
14080
+ }];
14081
+ // ----- react-hooks/purity -----
14082
+ type ReactHooksPurity = [] | [{
14083
+ [k: string]: unknown | undefined;
14084
+ }];
14085
+ // ----- react-hooks/refs -----
14086
+ type ReactHooksRefs = [] | [{
14087
+ [k: string]: unknown | undefined;
14088
+ }];
14089
+ // ----- react-hooks/rule-suppression -----
14090
+ type ReactHooksRuleSuppression = [] | [{
14091
+ [k: string]: unknown | undefined;
14092
+ }];
14093
+ // ----- react-hooks/rules-of-hooks -----
14094
+ type ReactHooksRulesOfHooks = [] | [{
14095
+ additionalHooks?: string;
14096
+ }];
14097
+ // ----- react-hooks/set-state-in-effect -----
14098
+ type ReactHooksSetStateInEffect = [] | [{
14099
+ [k: string]: unknown | undefined;
14100
+ }];
14101
+ // ----- react-hooks/set-state-in-render -----
14102
+ type ReactHooksSetStateInRender = [] | [{
14103
+ [k: string]: unknown | undefined;
14104
+ }];
14105
+ // ----- react-hooks/static-components -----
14106
+ type ReactHooksStaticComponents = [] | [{
14107
+ [k: string]: unknown | undefined;
14108
+ }];
14109
+ // ----- react-hooks/syntax -----
14110
+ type ReactHooksSyntax = [] | [{
14111
+ [k: string]: unknown | undefined;
14112
+ }];
14113
+ // ----- react-hooks/todo -----
14114
+ type ReactHooksTodo = [] | [{
14115
+ [k: string]: unknown | undefined;
14116
+ }];
14117
+ // ----- react-hooks/unsupported-syntax -----
14118
+ type ReactHooksUnsupportedSyntax = [] | [{
14119
+ [k: string]: unknown | undefined;
14120
+ }];
14121
+ // ----- react-hooks/use-memo -----
14122
+ type ReactHooksUseMemo = [] | [{
14123
+ [k: string]: unknown | undefined;
13871
14124
  }];
13872
14125
  // ----- react-refresh/only-export-components -----
13873
14126
  type ReactRefreshOnlyExportComponents = [] | [{
package/dist/index.js CHANGED
@@ -199,6 +199,7 @@ const jsdocRules = () => {
199
199
  "jsdoc/require-next-description": "error",
200
200
  "jsdoc/require-param": "off",
201
201
  "jsdoc/require-returns": "off",
202
+ "jsdoc/require-template-description": "error",
202
203
  "jsdoc/require-throws-description": "error",
203
204
  "jsdoc/require-yields-description": "error",
204
205
  "jsdoc/tag-lines": [
@@ -483,11 +484,11 @@ const defineConfig = async ({ astro = false, autoDetect = true, gitignore = fals
483
484
  ];
484
485
  const featureConfigs = await Promise.all([
485
486
  isTypescriptEnabled && unwrap(import("./typescript-D8AT5dEv.js")),
486
- isReactEnabled && unwrap(import("./react-ChUgu27j.js")),
487
+ isReactEnabled && unwrap(import("./react-CY7FziwW.js")),
487
488
  isTanstackQueryEnabled && unwrap(import("./tanstack-query-DqqVfxJs.js")),
488
489
  isAstroEnabled && unwrap(import("./astro-Cc3Rxusf.js")),
489
490
  isJestEnabled && unwrap(import("./jest-G-dRTY_j.js")),
490
- isVitestEnabled && unwrap(import("./vitest-Bl4MomP6.js")),
491
+ isVitestEnabled && unwrap(import("./vitest-BP2VqxKz.js")),
491
492
  isTestingLibraryEnabled && unwrap(import("./testing-library-lJsmjyFo.js")),
492
493
  isPlaywrightEnabled && unwrap(import("./playwright-Bbcb5Jsi.js")),
493
494
  isStorybookEnabled && unwrap(import("./storybook-BO4plVPp.js")),
@@ -29,12 +29,10 @@ const reactRules = async () => {
29
29
  ...jsxA11yPlugin.flatConfigs.recommended.rules,
30
30
  ...upwarn(reactPluginRules),
31
31
  "@eslint-react/dom/no-string-style-prop": "error",
32
- "@eslint-react/hooks-extra/no-direct-set-state-in-use-effect": "error",
33
32
  "@eslint-react/jsx-key-before-spread": "error",
34
33
  "@eslint-react/jsx-shorthand-boolean": "error",
35
34
  "@eslint-react/jsx-shorthand-fragment": "error",
36
35
  "@eslint-react/naming-convention/component-name": "error",
37
- "@eslint-react/naming-convention/use-state": "error",
38
36
  "@eslint-react/no-children-prop": "error",
39
37
  "@eslint-react/no-class-component": "error",
40
38
  "@eslint-react/no-missing-context-display-name": "error",
@@ -44,8 +42,21 @@ const reactRules = async () => {
44
42
  "@eslint-react/no-useless-fragment": "error",
45
43
  "@eslint-react/prefer-namespace-import": "error",
46
44
  "react-compiler/react-compiler": "error",
45
+ "react-hooks/component-hook-factories": "error",
46
+ "react-hooks/error-boundaries": "error",
47
47
  "react-hooks/exhaustive-deps": "error",
48
+ "react-hooks/globals": "error",
49
+ "react-hooks/immutability": "error",
50
+ "react-hooks/incompatible-library": "error",
51
+ "react-hooks/preserve-manual-memoization": "error",
52
+ "react-hooks/purity": "error",
53
+ "react-hooks/refs": "error",
48
54
  "react-hooks/rules-of-hooks": "error",
55
+ "react-hooks/set-state-in-effect": "error",
56
+ "react-hooks/set-state-in-render": "error",
57
+ "react-hooks/static-components": "error",
58
+ "react-hooks/unsupported-syntax": "error",
59
+ "react-hooks/use-memo": "error",
49
60
  "react-refresh/only-export-components": ["warn", {
50
61
  allowConstantExport: isUsingVite,
51
62
  allowExportNames: isUsingNextjs ? nextAllowedExportNames : []
@@ -59,8 +70,8 @@ async function reactConfig() {
59
70
  const [reactPlugin, jsxA11yPlugin, reactHooksPlugin, reactRefreshPlugin, reactCompilerPlugin] = await Promise.all([
60
71
  interopDefault(import("@eslint-react/eslint-plugin")),
61
72
  interopDefault(import("eslint-plugin-jsx-a11y")),
62
- import("eslint-plugin-react-hooks"),
63
- interopDefault(import("eslint-plugin-react-refresh")),
73
+ interopDefault(import("eslint-plugin-react-hooks")),
74
+ import("eslint-plugin-react-refresh"),
64
75
  import("eslint-plugin-react-compiler")
65
76
  ]);
66
77
  const reactPlugins = reactPlugin.configs.all.plugins;
@@ -32,6 +32,7 @@ const vitestRules = async () => {
32
32
  "vitest/prefer-called-times": "off",
33
33
  "vitest/prefer-called-with": "error",
34
34
  "vitest/prefer-comparison-matcher": "error",
35
+ "vitest/prefer-describe-function-title": "off",
35
36
  "vitest/prefer-each": "error",
36
37
  "vitest/prefer-equality-matcher": "error",
37
38
  "vitest/prefer-expect-assertions": "off",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jimmy.codes/eslint-config",
3
- "version": "6.11.0",
3
+ "version": "6.13.0",
4
4
  "description": "A simple, modern ESLint config that covers most use cases.",
5
5
  "keywords": [
6
6
  "eslint",
@@ -40,15 +40,15 @@
40
40
  ],
41
41
  "dependencies": {
42
42
  "@eslint-community/eslint-plugin-eslint-comments": "^4.5.0",
43
- "@eslint-react/eslint-plugin": "2.0.0-next.191",
43
+ "@eslint-react/eslint-plugin": "^2.0.6",
44
44
  "@eslint/js": "^9.36.0",
45
45
  "@next/eslint-plugin-next": "^15.5.4",
46
46
  "@stylistic/eslint-plugin": "^5.4.0",
47
- "@tanstack/eslint-plugin-query": "^5.90.1",
47
+ "@tanstack/eslint-plugin-query": "^5.91.0",
48
48
  "@types/eslint": "9.6.1",
49
- "@typescript-eslint/parser": "^8.44.1",
50
- "@typescript-eslint/utils": "^8.44.1",
51
- "@vitest/eslint-plugin": "^1.3.12",
49
+ "@typescript-eslint/parser": "^8.45.0",
50
+ "@typescript-eslint/utils": "^8.45.0",
51
+ "@vitest/eslint-plugin": "^1.3.15",
52
52
  "astro-eslint-parser": "^1.2.2",
53
53
  "eslint-config-flat-gitignore": "^2.1.0",
54
54
  "eslint-config-prettier": "^10.1.8",
@@ -57,21 +57,21 @@
57
57
  "eslint-plugin-import-x": "^4.16.1",
58
58
  "eslint-plugin-jest": "^29.0.1",
59
59
  "eslint-plugin-jest-dom": "^5.5.0",
60
- "eslint-plugin-jsdoc": "^60.2.0",
60
+ "eslint-plugin-jsdoc": "^60.7.1",
61
61
  "eslint-plugin-jsx-a11y": "^6.10.2",
62
62
  "eslint-plugin-n": "^17.23.1",
63
63
  "eslint-plugin-perfectionist": "^4.15.0",
64
64
  "eslint-plugin-playwright": "^2.2.2",
65
65
  "eslint-plugin-react-compiler": "19.1.0-rc.2",
66
- "eslint-plugin-react-hooks": "^5.2.0",
67
- "eslint-plugin-react-refresh": "0.4.21",
66
+ "eslint-plugin-react-hooks": "^6.1.0",
67
+ "eslint-plugin-react-refresh": "0.4.23",
68
68
  "eslint-plugin-regexp": "^2.10.0",
69
69
  "eslint-plugin-storybook": "0.12.0",
70
- "eslint-plugin-testing-library": "^7.9.1",
70
+ "eslint-plugin-testing-library": "^7.11.0",
71
71
  "eslint-plugin-unicorn": "^61.0.2",
72
72
  "globals": "^16.4.0",
73
73
  "local-pkg": "^1.1.2",
74
- "typescript-eslint": "^8.44.1"
74
+ "typescript-eslint": "^8.45.0"
75
75
  },
76
76
  "peerDependencies": {
77
77
  "eslint": "^9.10.0"