Skip to main content

Migrating to v2

Version 2 removes rule adapters that executed implementations from other ESLint plugins. Configure the upstream rule directly when you still want that behavior.

Removed adapter rules

Removed etc-misc/* ruleConfigure instead
array-type@typescript-eslint/array-type
compatcompat/compat
typescript/compatcompat/compat
no-explicit-type-exports@typescript-eslint/consistent-type-exports
no-mixed-enums@typescript-eslint/no-mixed-enums
no-secretno-secrets/no-secrets
no-unused-disable@eslint-community/eslint-comments/no-unused-disable
no-unused-importsunused-imports/no-unused-imports
no-unused-varsunused-imports/no-unused-vars
no-useless-generics@typescript-eslint/no-unnecessary-type-parameters
no-value-tostring@typescript-eslint/no-base-to-string
prefer-includesunicorn/prefer-includes
sort-exportssimple-import-sort/exports
sort-importssimple-import-sort/imports
throw-new-errorunicorn/throw-new-error
unused-internal-propertiesunicorn/no-unused-properties
uppercase-iifeunicorn/no-unreadable-iife
wordswrite-good-comments/write-good-comments

The corresponding upstream plugins are no longer runtime dependencies of eslint-plugin-etc-misc.

React stability rule names

Use no-unstable-react-values instead of require-usememo, and use no-unstable-react-children instead of require-usememo-children. The old IDs remain deprecated compatibility aliases in v3, are scheduled for removal in v4.0.0, and are excluded from presets to prevent duplicate reports.

require-memo remains deprecated in v3 with no replacement and is scheduled for removal in v4.0.0. React Compiler already performs memo-like optimization, and manual memoization should be driven by profiling rather than a blanket lint requirement.

Changed defaults

  • no-invalid-jsx-nesting now defaults checkVoidParents to false. Use @eslint-react/dom-no-void-elements-with-children for complete void element coverage, or set this option to true to restore the prior check.
  • The four jsx-no-*-as-prop rules now ignore every intrinsic element by default. Set nativeAllowList: [] to opt back into checking all intrinsic attributes.
  • no-only-tests now detects focus segments anywhere in supported framework chains, follows imports and aliases, respects shadowed bindings, and treats fit and fdescribe as focused by default.

Validation

After upgrading, search for removed IDs and run ESLint against the effective flat config:

npx eslint .

If you use an exhaustive preset, inspect the changed rule inventory before promoting the upgrade. Current all and allStrict presets exclude deprecated rules; use the explicitly named deprecated-inclusive variants only as temporary migration bridges.