diff --git a/VERSION b/VERSION index 9cd1526d2c..1afb6aea6f 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.34.2-beta.3 +1.35.0-next.0 diff --git a/apps/website/content/docs/deprecated.md b/apps/website/content/docs/deprecated.md index d7fcfeb11b..7bf680e51b 100644 --- a/apps/website/content/docs/deprecated.md +++ b/apps/website/content/docs/deprecated.md @@ -8,7 +8,7 @@ full: true | Rule | Replaced by | Deprecated in | | :--------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------- | :------------ | -| [`ensure-custom-hooks-using-other-hooks`](/docs/rules/hooks-extra-no-useless-custom-hooks) | [`no-useless-custom-hooks`](/docs/rules/hooks-extra-no-useless-custom-hooks) | 1.13.0 | +| [`ensure-custom-hooks-using-other-hooks`](/docs/rules/hooks-extra-no-unnecessary-use-prefix) | [`no-unnecessary-use-prefix`](/docs/rules/hooks-extra-no-unnecessary-use-prefix) | 1.13.0 | | [`ensure-forward-ref-using-ref`](/docs/rules/ensure-forward-ref-using-ref) | [`no-useless-forward-ref`](/docs/rules/no-useless-forward-ref) | 1.33.0 | | [`ensure-use-callback-has-non-empty-deps`](/docs/rules/hooks-extra-ensure-use-callback-has-non-empty-deps) | [`no-unnecessary-use-callback`](/docs/rules/hooks-extra-no-unnecessary-use-callback) | 1.13.0 | | [`ensure-use-memo-has-non-empty-deps`](/docs/rules/hooks-extra-ensure-use-memo-has-non-empty-deps) | [`no-unnecessary-use-memo`](/docs/rules/hooks-extra-no-unnecessary-use-memo) | 1.13.0 | @@ -17,7 +17,8 @@ full: true | [`no-children-in-void-dom-elements`](/docs/rules/dom-no-children-in-void-dom-elements) | [`no-void-elements-with-children`](/docs/rules/dom-no-void-elements-with-children) | 1.22.0 | | [`no-complicated-conditional-rendering`](/docs/rules/no-complicated-conditional-rendering) | [`no-complex-conditional-rendering`](/docs/rules/no-complex-conditional-rendering) | 1.6.0 | | [`no-nested-components`](/docs/rules/no-nested-components) | [`no-nested-component-definitions`](/docs/rules/no-nested-component-definitions) | 1.34.0 | -| [`no-redundant-custom-hook`](/docs/rules/hooks-extra-no-useless-custom-hooks) | [`no-useless-custom-hooks`](/docs/rules/hooks-extra-no-useless-custom-hooks) | 1.21.0 | +| [`no-redundant-custom-hook`](/docs/rules/hooks-extra-no-unnecessary-use-prefix) | [`no-unnecessary-use-prefix`](/docs/rules/hooks-extra-no-unnecessary-use-prefix) | 1.21.0 | +| [`no-useless-custom-hooks`](/docs/rules/hooks-extra-no-unnecessary-use-prefix) | [`no-unnecessary-use-prefix`](/docs/rules/hooks-extra-no-unnecessary-use-prefix) | 1.21.0 | ## Presets diff --git a/apps/website/content/docs/rules/meta.json b/apps/website/content/docs/rules/meta.json index b8788b1b77..dfc259201c 100644 --- a/apps/website/content/docs/rules/meta.json +++ b/apps/website/content/docs/rules/meta.json @@ -81,7 +81,7 @@ "hooks-extra-no-direct-set-state-in-use-layout-effect", "hooks-extra-no-unnecessary-use-callback", "hooks-extra-no-unnecessary-use-memo", - "hooks-extra-no-useless-custom-hooks", + "hooks-extra-no-unnecessary-use-prefix", "hooks-extra-prefer-use-state-lazy-initialization", "---Naming Convention Rules---", "naming-convention-component-name", diff --git a/apps/website/content/docs/rules/overview.md b/apps/website/content/docs/rules/overview.md index b523270253..12a5d48e6b 100644 --- a/apps/website/content/docs/rules/overview.md +++ b/apps/website/content/docs/rules/overview.md @@ -109,7 +109,7 @@ full: true | [`no-direct-set-state-in-use-layout-effect`](./hooks-extra-no-direct-set-state-in-use-layout-effect) | 0️⃣ | `🔍` | Disallow direct calls to the `set` function of `useState` in `useLayoutEffect`. | | [`no-unnecessary-use-callback`](./hooks-extra-no-unnecessary-use-callback) | 0️⃣ | `🔍` | Disallow unnecessary usage of `useCallback`. | | [`no-unnecessary-use-memo`](./hooks-extra-no-unnecessary-use-memo) | 0️⃣ | `🔍` | Disallow unnecessary usage of `useMemo`. | -| [`no-useless-custom-hooks`](./hooks-extra-no-useless-custom-hooks) | 1️⃣ | `🔍` | Enforces custom Hooks to use at least one other Hook inside. | +| [`no-unnecessary-use-prefix`](./hooks-extra-no-unnecessary-use-prefix) | 1️⃣ | `🔍` | Enforces custom Hooks to use at least one other Hook inside. | | [`prefer-use-state-lazy-initialization`](./hooks-extra-prefer-use-state-lazy-initialization) | 1️⃣ | `🔍` | Enforces function calls made inside `useState` to be wrapped in an `initializer function`. | ## Naming Convention Rules diff --git a/apps/website/next.config.mjs b/apps/website/next.config.mjs index ed194549fe..a88f403315 100644 --- a/apps/website/next.config.mjs +++ b/apps/website/next.config.mjs @@ -116,12 +116,17 @@ const config = { }, { source: "/docs/rules/hooks-extra-ensure-custom-hooks-using-other-hooks", - destination: "/docs/rules/hooks-extra-no-useless-custom-hooks", + destination: "/docs/rules/hooks-extra-no-unnecessary-use-prefix", permanent: true, }, { source: "/docs/rules/hooks-extra-no-redundant-custom-hook", - destination: "/docs/rules/hooks-extra-no-useless-custom-hooks", + destination: "/docs/rules/hooks-extra-no-unnecessary-use-prefix", + permanent: true, + }, + { + source: "/docs/rules/hooks-extra-no-useless-custom-hooks", + destination: "/docs/rules/hooks-extra-no-unnecessary-use-prefix", permanent: true, }, ]; diff --git a/package.json b/package.json index 18140fbaa2..70da71b4d7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@eslint-react/monorepo", - "version": "1.34.2-beta.3", + "version": "1.35.0-next.0", "private": true, "description": "Monorepo for eslint-plugin-react-[x, dom, web-api, hooks-extra, naming-convention].", "keywords": [ diff --git a/packages/core/package.json b/packages/core/package.json index e23e31d751..e1879f0502 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@eslint-react/core", - "version": "1.34.2-beta.3", + "version": "1.35.0-next.0", "description": "ESLint React's ESLint utility module for static analysis of React core APIs and patterns.", "homepage": "https://github.com/Rel1cx/eslint-react", "bugs": { diff --git a/packages/plugins/eslint-plugin-react-debug/package.json b/packages/plugins/eslint-plugin-react-debug/package.json index 18ff77acc2..0a1f42ec40 100644 --- a/packages/plugins/eslint-plugin-react-debug/package.json +++ b/packages/plugins/eslint-plugin-react-debug/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-react-debug", - "version": "1.34.2-beta.3", + "version": "1.35.0-next.0", "description": "ESLint React's ESLint plugin for debugging related rules.", "keywords": [ "react", diff --git a/packages/plugins/eslint-plugin-react-dom/package.json b/packages/plugins/eslint-plugin-react-dom/package.json index bdb28b5a89..7c1bb9f020 100644 --- a/packages/plugins/eslint-plugin-react-dom/package.json +++ b/packages/plugins/eslint-plugin-react-dom/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-react-dom", - "version": "1.34.2-beta.3", + "version": "1.35.0-next.0", "description": "ESLint React's ESLint plugin for React DOM related rules.", "keywords": [ "react", diff --git a/packages/plugins/eslint-plugin-react-hooks-extra/README.md b/packages/plugins/eslint-plugin-react-hooks-extra/README.md index 2dfa99943e..42fdbc7478 100644 --- a/packages/plugins/eslint-plugin-react-hooks-extra/README.md +++ b/packages/plugins/eslint-plugin-react-hooks-extra/README.md @@ -34,7 +34,7 @@ export default tseslint.config({ }, rules: { // Put rules you want to override here - "react-hooks-extra/no-useless-custom-hooks": "warn", + "react-hooks-extra/no-unnecessary-use-prefix": "warn", }, }); ``` diff --git a/packages/plugins/eslint-plugin-react-hooks-extra/package.json b/packages/plugins/eslint-plugin-react-hooks-extra/package.json index 4e3a52edfb..68a37deb25 100644 --- a/packages/plugins/eslint-plugin-react-hooks-extra/package.json +++ b/packages/plugins/eslint-plugin-react-hooks-extra/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-react-hooks-extra", - "version": "1.34.2-beta.3", + "version": "1.35.0-next.0", "description": "ESLint React's ESLint plugin for React Hooks related rules.", "keywords": [ "react", diff --git a/packages/plugins/eslint-plugin-react-hooks-extra/src/configs/recommended.ts b/packages/plugins/eslint-plugin-react-hooks-extra/src/configs/recommended.ts index 3f09f320d4..a7cf3e1f8c 100644 --- a/packages/plugins/eslint-plugin-react-hooks-extra/src/configs/recommended.ts +++ b/packages/plugins/eslint-plugin-react-hooks-extra/src/configs/recommended.ts @@ -4,6 +4,6 @@ export const name = "react-hooks-extra/recommended"; export const rules = { "react-hooks-extra/no-direct-set-state-in-use-effect": "warn", - "react-hooks-extra/no-useless-custom-hooks": "warn", + "react-hooks-extra/no-unnecessary-use-prefix": "warn", "react-hooks-extra/prefer-use-state-lazy-initialization": "warn", } as const satisfies RulePreset; diff --git a/packages/plugins/eslint-plugin-react-hooks-extra/src/plugin.ts b/packages/plugins/eslint-plugin-react-hooks-extra/src/plugin.ts index 1bdb6ba829..5442fbbd13 100644 --- a/packages/plugins/eslint-plugin-react-hooks-extra/src/plugin.ts +++ b/packages/plugins/eslint-plugin-react-hooks-extra/src/plugin.ts @@ -3,7 +3,7 @@ import noDirectSetStateInUseEffect from "./rules/no-direct-set-state-in-use-effe import noDirectSetStateInUseLayoutEffect from "./rules/no-direct-set-state-in-use-layout-effect"; import noUnnecessaryUseCallback from "./rules/no-unnecessary-use-callback"; import noUnnecessaryUseMemo from "./rules/no-unnecessary-use-memo"; -import noUselessCustomHooks from "./rules/no-useless-custom-hooks"; +import noUnnecessaryUsePrefix from "./rules/no-unnecessary-use-prefix"; import preferUseStateLazyInitialization from "./rules/prefer-use-state-lazy-initialization"; export const plugin = { @@ -16,17 +16,19 @@ export const plugin = { "no-direct-set-state-in-use-layout-effect": noDirectSetStateInUseLayoutEffect, "no-unnecessary-use-callback": noUnnecessaryUseCallback, "no-unnecessary-use-memo": noUnnecessaryUseMemo, - "no-useless-custom-hooks": noUselessCustomHooks, + "no-unnecessary-use-prefix": noUnnecessaryUsePrefix, "prefer-use-state-lazy-initialization": preferUseStateLazyInitialization, // Part: deprecated rules - /** @deprecated Use `no-useless-custom-hooks` instead */ - "ensure-custom-hooks-using-other-hooks": noUselessCustomHooks, + /** @deprecated Use `no-unnecessary-use-prefix` instead */ + "ensure-custom-hooks-using-other-hooks": noUnnecessaryUsePrefix, /** @deprecated Use `no-unnecessary-use-callback` instead */ "ensure-use-callback-has-non-empty-deps": noUnnecessaryUseCallback, /** @deprecated Use `no-unnecessary-use-memo` instead */ "ensure-use-memo-has-non-empty-deps": noUnnecessaryUseMemo, - /** @deprecated Use `no-useless-custom-hooks` instead */ - "no-redundant-custom-hook": noUselessCustomHooks, + /** @deprecated Use `no-unnecessary-use-prefix` instead */ + "no-redundant-custom-hook": noUnnecessaryUsePrefix, + /** @deprecated Use `no-unnecessary-use-prefix` instead */ + "no-useless-custom-hooks": noUnnecessaryUsePrefix, }, } as const; diff --git a/packages/plugins/eslint-plugin-react-hooks-extra/src/rules/no-useless-custom-hooks.md b/packages/plugins/eslint-plugin-react-hooks-extra/src/rules/no-unnecessary-use-prefix.md similarity index 92% rename from packages/plugins/eslint-plugin-react-hooks-extra/src/rules/no-useless-custom-hooks.md rename to packages/plugins/eslint-plugin-react-hooks-extra/src/rules/no-unnecessary-use-prefix.md index f66179c97d..013f109f87 100644 --- a/packages/plugins/eslint-plugin-react-hooks-extra/src/rules/no-useless-custom-hooks.md +++ b/packages/plugins/eslint-plugin-react-hooks-extra/src/rules/no-unnecessary-use-prefix.md @@ -1,17 +1,17 @@ --- -title: no-useless-custom-hooks +title: no-unnecessary-use-prefix --- **Full Name in `eslint-plugin-react-hooks-extra`** ```plain copy -react-hooks-extra/no-useless-custom-hooks +react-hooks-extra/no-unnecessary-use-prefix ``` **Full Name in `@eslint-react/eslint-plugin`** ```plain copy -@eslint-react/hooks-extra/no-useless-custom-hooks +@eslint-react/hooks-extra/no-unnecessary-use-prefix ``` **Features** @@ -26,7 +26,7 @@ react-hooks-extra/no-useless-custom-hooks ## What it does -Enforces custom Hooks to use at least one other Hook inside. +Enforces that a function with the `use` prefix should call at least one Hook inside of it. If your function doesn’t call any Hooks, avoid the `use` prefix. Instead, write it as a regular function without the `use` prefix. For example, `useSorted` below doesn’t call Hooks, so call it `getSorted` instead: @@ -120,8 +120,8 @@ function useAuth() { ## Implementation -- [Rule source](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-hooks-extra/src/rules/no-useless-custom-hooks.ts) -- [Test source](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-hooks-extra/src/rules/no-useless-custom-hooks.spec.ts) +- [Rule source](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-hooks-extra/src/rules/no-unnecessary-use-prefix.ts) +- [Test source](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-hooks-extra/src/rules/no-unnecessary-use-prefix.spec.ts) ## Further Reading diff --git a/packages/plugins/eslint-plugin-react-hooks-extra/src/rules/no-useless-custom-hooks.spec.ts b/packages/plugins/eslint-plugin-react-hooks-extra/src/rules/no-unnecessary-use-prefix.spec.ts similarity index 98% rename from packages/plugins/eslint-plugin-react-hooks-extra/src/rules/no-useless-custom-hooks.spec.ts rename to packages/plugins/eslint-plugin-react-hooks-extra/src/rules/no-unnecessary-use-prefix.spec.ts index f4de01679d..959e80e949 100644 --- a/packages/plugins/eslint-plugin-react-hooks-extra/src/rules/no-useless-custom-hooks.spec.ts +++ b/packages/plugins/eslint-plugin-react-hooks-extra/src/rules/no-unnecessary-use-prefix.spec.ts @@ -1,7 +1,7 @@ import tsx from "dedent"; import { allValid, ruleTester } from "../../../../../test"; -import rule, { RULE_NAME } from "./no-useless-custom-hooks"; +import rule, { RULE_NAME } from "./no-unnecessary-use-prefix"; ruleTester.run(RULE_NAME, rule, { invalid: [ diff --git a/packages/plugins/eslint-plugin-react-hooks-extra/src/rules/no-useless-custom-hooks.ts b/packages/plugins/eslint-plugin-react-hooks-extra/src/rules/no-unnecessary-use-prefix.ts similarity index 97% rename from packages/plugins/eslint-plugin-react-hooks-extra/src/rules/no-useless-custom-hooks.ts rename to packages/plugins/eslint-plugin-react-hooks-extra/src/rules/no-unnecessary-use-prefix.ts index 91b3cd3327..d6d0c712d7 100644 --- a/packages/plugins/eslint-plugin-react-hooks-extra/src/rules/no-useless-custom-hooks.ts +++ b/packages/plugins/eslint-plugin-react-hooks-extra/src/rules/no-unnecessary-use-prefix.ts @@ -7,7 +7,7 @@ import type { CamelCase } from "string-ts"; import { createRule } from "../utils"; -export const RULE_NAME = "no-useless-custom-hooks"; +export const RULE_NAME = "no-unnecessary-use-prefix"; export const RULE_FEATURES = [ "CHK", diff --git a/packages/plugins/eslint-plugin-react-naming-convention/package.json b/packages/plugins/eslint-plugin-react-naming-convention/package.json index cd4b536bc5..eec5d4baf9 100644 --- a/packages/plugins/eslint-plugin-react-naming-convention/package.json +++ b/packages/plugins/eslint-plugin-react-naming-convention/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-react-naming-convention", - "version": "1.34.2-beta.3", + "version": "1.35.0-next.0", "description": "ESLint React's ESLint plugin for naming convention related rules.", "keywords": [ "react", diff --git a/packages/plugins/eslint-plugin-react-web-api/package.json b/packages/plugins/eslint-plugin-react-web-api/package.json index 2e9e068931..206dccf9e9 100644 --- a/packages/plugins/eslint-plugin-react-web-api/package.json +++ b/packages/plugins/eslint-plugin-react-web-api/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-react-web-api", - "version": "1.34.2-beta.3", + "version": "1.35.0-next.0", "description": "ESLint React's ESLint plugin for interacting with Web APIs", "keywords": [ "react", diff --git a/packages/plugins/eslint-plugin-react-x/package.json b/packages/plugins/eslint-plugin-react-x/package.json index aef1d9f73c..b750d2daed 100644 --- a/packages/plugins/eslint-plugin-react-x/package.json +++ b/packages/plugins/eslint-plugin-react-x/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-react-x", - "version": "1.34.2-beta.3", + "version": "1.35.0-next.0", "description": "A set of composable linting rules for libraries and frameworks that use React as a UI runtime.", "keywords": [ "react", diff --git a/packages/plugins/eslint-plugin/package.json b/packages/plugins/eslint-plugin/package.json index f5bd663eab..5e9eb7378a 100644 --- a/packages/plugins/eslint-plugin/package.json +++ b/packages/plugins/eslint-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@eslint-react/eslint-plugin", - "version": "1.34.2-beta.3", + "version": "1.35.0-next.0", "description": "More than 80 high-quality linting rules for writing better React code.", "keywords": [ "react", diff --git a/packages/plugins/eslint-plugin/src/configs/all.ts b/packages/plugins/eslint-plugin/src/configs/all.ts index 275aeaac55..fbe12b25ba 100644 --- a/packages/plugins/eslint-plugin/src/configs/all.ts +++ b/packages/plugins/eslint-plugin/src/configs/all.ts @@ -86,7 +86,7 @@ export const rules = { "@eslint-react/hooks-extra/no-direct-set-state-in-use-layout-effect": "warn", "@eslint-react/hooks-extra/no-unnecessary-use-callback": "warn", "@eslint-react/hooks-extra/no-unnecessary-use-memo": "warn", - "@eslint-react/hooks-extra/no-useless-custom-hooks": "warn", + "@eslint-react/hooks-extra/no-unnecessary-use-prefix": "warn", "@eslint-react/hooks-extra/prefer-use-state-lazy-initialization": "warn", "@eslint-react/naming-convention/component-name": "warn", diff --git a/packages/plugins/eslint-plugin/src/configs/recommended.ts b/packages/plugins/eslint-plugin/src/configs/recommended.ts index 74dcdaa719..34cd736583 100644 --- a/packages/plugins/eslint-plugin/src/configs/recommended.ts +++ b/packages/plugins/eslint-plugin/src/configs/recommended.ts @@ -14,7 +14,7 @@ export const rules = { ...dom.rules, ...webApi.rules, "@eslint-react/hooks-extra/no-direct-set-state-in-use-effect": "warn", - "@eslint-react/hooks-extra/no-useless-custom-hooks": "warn", + "@eslint-react/hooks-extra/no-unnecessary-use-prefix": "warn", "@eslint-react/hooks-extra/prefer-use-state-lazy-initialization": "warn", } as const satisfies RulePreset; diff --git a/packages/shared/package.json b/packages/shared/package.json index e809f17fc9..9bfe97b518 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -1,6 +1,6 @@ { "name": "@eslint-react/shared", - "version": "1.34.2-beta.3", + "version": "1.35.0-next.0", "description": "ESLint React's Shared constants and functions.", "homepage": "https://github.com/Rel1cx/eslint-react", "bugs": { diff --git a/packages/utilities/ast/package.json b/packages/utilities/ast/package.json index 12f9deac27..6532601413 100644 --- a/packages/utilities/ast/package.json +++ b/packages/utilities/ast/package.json @@ -1,6 +1,6 @@ { "name": "@eslint-react/ast", - "version": "1.34.2-beta.3", + "version": "1.35.0-next.0", "description": "ESLint React's TSESTree AST utility module.", "homepage": "https://github.com/Rel1cx/eslint-react", "bugs": { diff --git a/packages/utilities/eff/package.json b/packages/utilities/eff/package.json index deee83c90f..8dcbab27db 100644 --- a/packages/utilities/eff/package.json +++ b/packages/utilities/eff/package.json @@ -1,6 +1,6 @@ { "name": "@eslint-react/eff", - "version": "1.34.2-beta.3", + "version": "1.35.0-next.0", "description": "JavaScript and TypeScript utilities (previously some re-exports of the effect library).", "homepage": "https://github.com/Rel1cx/eslint-react", "bugs": { diff --git a/packages/utilities/jsx/package.json b/packages/utilities/jsx/package.json index 72f93fe837..d889100c0b 100644 --- a/packages/utilities/jsx/package.json +++ b/packages/utilities/jsx/package.json @@ -1,6 +1,6 @@ { "name": "@eslint-react/jsx", - "version": "1.34.2-beta.3", + "version": "1.35.0-next.0", "description": "ESLint React's TSESTree AST utility module for static analysis of JSX.", "homepage": "https://github.com/Rel1cx/eslint-react", "bugs": { diff --git a/packages/utilities/var/package.json b/packages/utilities/var/package.json index bd857b0589..a9aa59574f 100644 --- a/packages/utilities/var/package.json +++ b/packages/utilities/var/package.json @@ -1,6 +1,6 @@ { "name": "@eslint-react/var", - "version": "1.34.2-beta.3", + "version": "1.35.0-next.0", "description": "ESLint React's TSESTree AST utility module for static analysis of variables.", "homepage": "https://github.com/Rel1cx/eslint-react", "bugs": {