diff --git a/packages/plugins/eslint-plugin-react-dom/src/configs/recommended.ts b/packages/plugins/eslint-plugin-react-dom/src/configs/recommended.ts index 52f8b65a6..f4498eb57 100644 --- a/packages/plugins/eslint-plugin-react-dom/src/configs/recommended.ts +++ b/packages/plugins/eslint-plugin-react-dom/src/configs/recommended.ts @@ -1,6 +1,8 @@ import type { RuleConfig } from "@eslint-react/kit"; import { DEFAULT_ESLINT_REACT_SETTINGS } from "@eslint-react/shared"; +import { plugin } from "../plugin"; + export const name = "react-dom/recommended"; export const rules = { @@ -9,19 +11,19 @@ export const rules = { "react-dom/no-find-dom-node": "error", "react-dom/no-flush-sync": "error", "react-dom/no-hydrate": "error", - "react-dom/no-missing-button-type": "warn", - "react-dom/no-missing-iframe-sandbox": "warn", "react-dom/no-namespace": "error", "react-dom/no-render": "error", "react-dom/no-render-return-value": "error", "react-dom/no-script-url": "warn", - "react-dom/no-string-style-prop": "error", "react-dom/no-unsafe-iframe-sandbox": "warn", - "react-dom/no-unsafe-target-blank": "warn", "react-dom/no-use-form-state": "error", "react-dom/no-void-elements-with-children": "error", } as const satisfies Record; +export const plugins = { + "react-dom": plugin, +}; + export const settings = { "react-x": DEFAULT_ESLINT_REACT_SETTINGS, }; diff --git a/packages/plugins/eslint-plugin-react-dom/src/configs/strict.ts b/packages/plugins/eslint-plugin-react-dom/src/configs/strict.ts new file mode 100644 index 000000000..9a3ce7592 --- /dev/null +++ b/packages/plugins/eslint-plugin-react-dom/src/configs/strict.ts @@ -0,0 +1,20 @@ +import type { RuleConfig } from "@eslint-react/kit"; + +import * as recommendedConfig from "./recommended"; + +export const name = "react-dom/strict"; + +export const rules = { + ...recommendedConfig.rules, + "react-dom/no-missing-button-type": "warn", + "react-dom/no-missing-iframe-sandbox": "warn", + "react-dom/no-unsafe-target-blank": "warn", +} as const satisfies Record; + +export const plugins = { + ...recommendedConfig.plugins, +}; + +export const settings = { + ...recommendedConfig.settings, +}; diff --git a/packages/plugins/eslint-plugin-react-dom/src/index.ts b/packages/plugins/eslint-plugin-react-dom/src/index.ts index 07d7f4678..b53cd6778 100644 --- a/packages/plugins/eslint-plugin-react-dom/src/index.ts +++ b/packages/plugins/eslint-plugin-react-dom/src/index.ts @@ -1,6 +1,7 @@ import { getConfigAdapters } from "@eslint-react/shared"; import * as recommendedConfig from "./configs/recommended"; +import * as strictConfig from "./configs/strict"; import { plugin } from "./plugin"; const { toFlatConfig } = getConfigAdapters("react-dom", plugin); @@ -9,5 +10,6 @@ export default { ...plugin, configs: { ["recommended"]: toFlatConfig(recommendedConfig), + ["strict"]: toFlatConfig(strictConfig), }, }; diff --git a/packages/plugins/eslint-plugin-react-x/src/configs/_tc.ts b/packages/plugins/eslint-plugin-react-x/src/configs/_tc.ts new file mode 100644 index 000000000..3b57679bd --- /dev/null +++ b/packages/plugins/eslint-plugin-react-x/src/configs/_tc.ts @@ -0,0 +1,6 @@ +import type { RuleConfig } from "@eslint-react/kit"; + +export const rules = { + "react-x/no-leaked-conditional-rendering": "warn", + "react-x/no-unused-props": "warn", +} as const satisfies Record; diff --git a/packages/plugins/eslint-plugin-react-x/src/configs/_ts.ts b/packages/plugins/eslint-plugin-react-x/src/configs/_ts.ts new file mode 100644 index 000000000..61e048311 --- /dev/null +++ b/packages/plugins/eslint-plugin-react-x/src/configs/_ts.ts @@ -0,0 +1,8 @@ +import type { RuleConfig } from "@eslint-react/kit"; + +export const rules = { + "react-x/jsx-no-duplicate-props": "off", + "react-x/jsx-no-undef": "off", + "react-x/jsx-uses-react": "off", + "react-x/jsx-uses-vars": "off", +} as const satisfies Record; diff --git a/packages/plugins/eslint-plugin-react-x/src/configs/recommended-type-checked.ts b/packages/plugins/eslint-plugin-react-x/src/configs/recommended-type-checked.ts index b3b5dc193..0402320e7 100644 --- a/packages/plugins/eslint-plugin-react-x/src/configs/recommended-type-checked.ts +++ b/packages/plugins/eslint-plugin-react-x/src/configs/recommended-type-checked.ts @@ -1,15 +1,19 @@ import type { RuleConfig } from "@eslint-react/kit"; -import * as recommendedTypeScript from "./recommended-typescript"; +import * as tc from "./_tc"; +import * as recommendedTypescript from "./recommended-typescript"; export const name = "react-x/recommended-type-checked"; export const rules = { - ...recommendedTypeScript.rules, - "react-x/no-leaked-conditional-rendering": "warn", - "react-x/no-unused-props": "warn", + ...recommendedTypescript.rules, + ...tc.rules, } as const satisfies Record; +export const plugins = { + ...recommendedTypescript.plugins, +}; + export const settings = { - ...recommendedTypeScript.settings, + ...recommendedTypescript.settings, }; diff --git a/packages/plugins/eslint-plugin-react-x/src/configs/recommended-typescript.ts b/packages/plugins/eslint-plugin-react-x/src/configs/recommended-typescript.ts index 7b1be297b..b183fd9d4 100644 --- a/packages/plugins/eslint-plugin-react-x/src/configs/recommended-typescript.ts +++ b/packages/plugins/eslint-plugin-react-x/src/configs/recommended-typescript.ts @@ -1,17 +1,19 @@ import type { RuleConfig } from "@eslint-react/kit"; +import * as ts from "./_ts"; import * as recommended from "./recommended"; export const name = "react-x/recommended-typescript"; export const rules = { ...recommended.rules, - "react-x/jsx-no-duplicate-props": "off", - "react-x/jsx-no-undef": "off", - "react-x/jsx-uses-react": "off", - "react-x/jsx-uses-vars": "off", + ...ts.rules, } as const satisfies Record; +export const plugins = { + ...recommended.plugins, +}; + export const settings = { ...recommended.settings, }; diff --git a/packages/plugins/eslint-plugin-react-x/src/configs/recommended.ts b/packages/plugins/eslint-plugin-react-x/src/configs/recommended.ts index 2c9382648..885de43e1 100644 --- a/packages/plugins/eslint-plugin-react-x/src/configs/recommended.ts +++ b/packages/plugins/eslint-plugin-react-x/src/configs/recommended.ts @@ -1,15 +1,13 @@ import type { RuleConfig } from "@eslint-react/kit"; import { DEFAULT_ESLINT_REACT_SETTINGS } from "@eslint-react/shared"; +import { plugin } from "../plugin"; + export const name = "react-x/recommended"; export const rules = { "react-x/jsx-no-comment-textnodes": "warn", "react-x/jsx-no-duplicate-props": "warn", - "react-x/jsx-no-iife": "off", - "react-x/jsx-no-undef": "off", - "react-x/jsx-shorthand-boolean": "off", - "react-x/jsx-shorthand-fragment": "off", "react-x/jsx-uses-react": "warn", "react-x/jsx-uses-vars": "warn", "react-x/no-access-state-in-setstate": "error", @@ -18,9 +16,7 @@ export const rules = { "react-x/no-children-for-each": "warn", "react-x/no-children-map": "warn", "react-x/no-children-only": "warn", - "react-x/no-children-prop": "off", "react-x/no-children-to-array": "warn", - "react-x/no-class-component": "off", "react-x/no-clone-element": "warn", "react-x/no-component-will-mount": "error", "react-x/no-component-will-receive-props": "error", @@ -30,14 +26,9 @@ export const rules = { "react-x/no-default-props": "error", "react-x/no-direct-mutation-state": "error", "react-x/no-duplicate-key": "error", - "react-x/no-forbidden-props": "off", "react-x/no-forward-ref": "warn", "react-x/no-implicit-key": "warn", - "react-x/no-leaked-conditional-rendering": "off", - "react-x/no-missing-component-display-name": "off", - "react-x/no-missing-context-display-name": "off", "react-x/no-missing-key": "error", - "react-x/no-misused-capture-owner-stack": "off", "react-x/no-nested-component-definitions": "error", "react-x/no-nested-lazy-component-declarations": "error", "react-x/no-prop-types": "error", @@ -46,27 +37,20 @@ export const rules = { "react-x/no-set-state-in-component-did-update": "warn", "react-x/no-set-state-in-component-will-update": "warn", "react-x/no-string-refs": "error", - "react-x/no-unnecessary-key": "off", - "react-x/no-unnecessary-use-callback": "off", - "react-x/no-unnecessary-use-memo": "off", "react-x/no-unnecessary-use-prefix": "warn", "react-x/no-unsafe-component-will-mount": "warn", "react-x/no-unsafe-component-will-receive-props": "warn", "react-x/no-unsafe-component-will-update": "warn", - "react-x/no-unstable-context-value": "warn", - "react-x/no-unstable-default-props": "warn", "react-x/no-unused-class-component-members": "warn", - "react-x/no-unused-props": "off", - "react-x/no-unused-state": "warn", "react-x/no-use-context": "warn", "react-x/no-useless-forward-ref": "warn", - "react-x/no-useless-fragment": "off", - "react-x/prefer-destructuring-assignment": "off", - "react-x/prefer-namespace-import": "off", - "react-x/prefer-read-only-props": "off", "react-x/prefer-use-state-lazy-initialization": "warn", } as const satisfies Record; +export const plugins = { + "react-x": plugin, +}; + export const settings = { "react-x": DEFAULT_ESLINT_REACT_SETTINGS, }; diff --git a/packages/plugins/eslint-plugin-react-x/src/configs/strict-type-checked.ts b/packages/plugins/eslint-plugin-react-x/src/configs/strict-type-checked.ts new file mode 100644 index 000000000..62ad5c84a --- /dev/null +++ b/packages/plugins/eslint-plugin-react-x/src/configs/strict-type-checked.ts @@ -0,0 +1,19 @@ +import type { RuleConfig } from "@eslint-react/kit"; + +import * as tc from "./_tc"; +import * as strictTypeScript from "./strict-typescript"; + +export const name = "react-x/strict-type-checked"; + +export const rules = { + ...strictTypeScript.rules, + ...tc.rules, +} as const satisfies Record; + +export const plugins = { + ...strictTypeScript.plugins, +}; + +export const settings = { + ...strictTypeScript.settings, +}; diff --git a/packages/plugins/eslint-plugin-react-x/src/configs/strict-typescript.ts b/packages/plugins/eslint-plugin-react-x/src/configs/strict-typescript.ts new file mode 100644 index 000000000..f13f2be8c --- /dev/null +++ b/packages/plugins/eslint-plugin-react-x/src/configs/strict-typescript.ts @@ -0,0 +1,19 @@ +import type { RuleConfig } from "@eslint-react/kit"; + +import * as ts from "./_ts"; +import * as strict from "./strict"; + +export const name = "react-x/strict-typescript"; + +export const rules = { + ...strict.rules, + ...ts.rules, +} as const satisfies Record; + +export const plugins = { + ...strict.plugins, +}; + +export const settings = { + ...strict.settings, +}; diff --git a/packages/plugins/eslint-plugin-react-x/src/configs/strict.ts b/packages/plugins/eslint-plugin-react-x/src/configs/strict.ts new file mode 100644 index 000000000..91cb51742 --- /dev/null +++ b/packages/plugins/eslint-plugin-react-x/src/configs/strict.ts @@ -0,0 +1,29 @@ +import type { RuleConfig } from "@eslint-react/kit"; +import * as recommended from "./recommended"; + +export const name = "react-x/strict"; + +export const rules = { + ...recommended.rules, + "react-x/jsx-no-iife": "error", + "react-x/no-children-prop": "warn", + "react-x/no-class-component": "error", + "react-x/no-misused-capture-owner-stack": "error", + "react-x/no-unnecessary-key": "warn", + "react-x/no-unnecessary-use-callback": "warn", + "react-x/no-unnecessary-use-memo": "warn", + "react-x/no-unstable-context-value": "warn", + "react-x/no-unstable-default-props": "warn", + "react-x/no-unused-props": "warn", + "react-x/no-unused-state": "warn", + "react-x/no-useless-fragment": "warn", + "react-x/prefer-destructuring-assignment": "warn", +} as const satisfies Record; + +export const plugins = { + ...recommended.plugins, +}; + +export const settings = { + ...recommended.settings, +}; diff --git a/packages/plugins/eslint-plugin/src/configs/_ts.ts b/packages/plugins/eslint-plugin/src/configs/_ts.ts index 8585253cc..ee07d0906 100644 --- a/packages/plugins/eslint-plugin/src/configs/_ts.ts +++ b/packages/plugins/eslint-plugin/src/configs/_ts.ts @@ -4,6 +4,7 @@ export const rules = { "@eslint-react/dom/no-string-style-prop": "off", "@eslint-react/dom/no-unknown-property": "off", "@eslint-react/jsx-no-duplicate-props": "off", + "@eslint-react/jsx-no-undef": "off", "@eslint-react/jsx-uses-react": "off", "@eslint-react/jsx-uses-vars": "off", } as const satisfies Record; diff --git a/packages/plugins/eslint-plugin/src/configs/dom.ts b/packages/plugins/eslint-plugin/src/configs/dom.ts index dfc06a93c..f6ee9a280 100644 --- a/packages/plugins/eslint-plugin/src/configs/dom.ts +++ b/packages/plugins/eslint-plugin/src/configs/dom.ts @@ -9,14 +9,11 @@ export const rules = { "@eslint-react/dom/no-find-dom-node": "error", "@eslint-react/dom/no-flush-sync": "error", "@eslint-react/dom/no-hydrate": "error", - "@eslint-react/dom/no-missing-button-type": "off", - "@eslint-react/dom/no-missing-iframe-sandbox": "off", "@eslint-react/dom/no-namespace": "error", "@eslint-react/dom/no-render": "error", "@eslint-react/dom/no-render-return-value": "error", "@eslint-react/dom/no-script-url": "warn", "@eslint-react/dom/no-unsafe-iframe-sandbox": "warn", - "@eslint-react/dom/no-unsafe-target-blank": "off", "@eslint-react/dom/no-use-form-state": "error", "@eslint-react/dom/no-void-elements-with-children": "error", } as const satisfies Record; diff --git a/packages/plugins/eslint-plugin/src/configs/strict.ts b/packages/plugins/eslint-plugin/src/configs/strict.ts index 04314ee88..84eadad4e 100644 --- a/packages/plugins/eslint-plugin/src/configs/strict.ts +++ b/packages/plugins/eslint-plugin/src/configs/strict.ts @@ -7,7 +7,6 @@ export const name = "@eslint-react/strict"; export const rules = { ...recommended.rules, "@eslint-react/jsx-no-iife": "error", - "@eslint-react/jsx-no-undef": "error", "@eslint-react/no-children-prop": "warn", "@eslint-react/no-class-component": "error", "@eslint-react/no-misused-capture-owner-stack": "error",