An ESLint plugin for linting ESLint plugins. Rules written in CJS, ESM, and TypeScript are all supported.
You'll first need to install ESLint:
npm i eslint --save-devNext, install eslint-plugin-eslint-plugin:
npm install eslint-plugin-eslint-plugin --save-devHere's an example ESLint configuration that:
- Enables the recommendedconfiguration
- Enables an optional/non-recommended rule
Note: you might need to set sourceType to module or script depending on your codebase.
// eslint.config.js
import eslintPlugin from 'eslint-plugin-eslint-plugin';
export default [
  eslintPlugin.configs.recommended,
  {
    rules: {
      'eslint-plugin/require-meta-docs-description': 'error',
    },
  },
];💼 Configurations enabled in.
✅ Set in the recommended configuration.
🔧 Automatically fixable by the --fix CLI option.
💡 Manually fixable by editor suggestions.
💠Requires type information.
| Name                           | Description | 💼 | 🔧 | 💡 | 💠| 
|---|---|---|---|---|---|
| fixer-return | require fixer functions to return a fix | ✅ | |||
| meta-property-ordering | enforce the order of meta properties | 🔧 | |||
| no-deprecated-context-methods | disallow usage of deprecated methods on rule context objects | ✅ | 🔧 | ||
| no-deprecated-report-api | disallow the version of context.report()with multiple arguments | ✅ | 🔧 | ||
| no-meta-replaced-by | disallow using the meta.replacedByrule property | ✅ | |||
| no-meta-schema-default | disallow rules meta.schemaproperties to include defaults | ✅ | |||
| no-missing-message-ids | disallow messageIds that are missing frommeta.messages | ✅ | |||
| no-missing-placeholders | disallow missing placeholders in rule report messages | ✅ | |||
| no-property-in-node | disallow using into narrow node types instead of looking at properties | 💠| |||
| no-unused-message-ids | disallow unused messageIds inmeta.messages | ✅ | |||
| no-unused-placeholders | disallow unused placeholders in rule report messages | ✅ | |||
| no-useless-token-range | disallow unnecessary calls to sourceCode.getFirstToken()andsourceCode.getLastToken() | ✅ | 🔧 | ||
| prefer-message-ids | require using messageIdinstead ofmessageordescto report rule violations | ✅ | |||
| prefer-object-rule | disallow function-style rules | ✅ | 🔧 | ||
| prefer-placeholders | require using placeholders for dynamic report messages | ||||
| prefer-replace-text | require using replaceText()instead ofreplaceTextRange() | ||||
| report-message-format | enforce a consistent format for rule report messages | ||||
| require-meta-default-options | require only rules with options to implement a meta.defaultOptionsproperty | ✅ | 🔧 | ||
| require-meta-docs-description | require rules to implement a meta.docs.descriptionproperty with the correct format | ||||
| require-meta-docs-recommended | require rules to implement a meta.docs.recommendedproperty | 💡 | |||
| require-meta-docs-url | require rules to implement a meta.docs.urlproperty | 🔧 | |||
| require-meta-fixable | require rules to implement a meta.fixableproperty | ✅ | |||
| require-meta-has-suggestions | require suggestable rules to implement a meta.hasSuggestionsproperty | ✅ | 🔧 | ||
| require-meta-schema | require rules to implement a meta.schemaproperty | ✅ | 💡 | ||
| require-meta-schema-description | require rules meta.schemaproperties to include descriptions | ✅ | |||
| require-meta-type | require rules to implement a meta.typeproperty | ✅ | 
| Name                       | Description | 💼 | 🔧 | 💡 | 💠| 
|---|---|---|---|---|---|
| consistent-output | enforce consistent use of outputassertions in rule tests | ||||
| no-identical-tests | disallow identical tests | ✅ | 🔧 | ||
| no-only-tests | disallow the test case property only | ✅ | 💡 | ||
| prefer-output-null | disallow invalid RuleTester test cases where the outputmatches thecode | ✅ | 🔧 | ||
| require-test-case-name | require test cases to have a nameproperty under certain conditions | ||||
| test-case-property-ordering | require the properties of a test case to be placed in a consistent order | 🔧 | |||
| test-case-shorthand-strings | enforce consistent usage of shorthand strings for test cases with no options | 🔧 | |||
| unique-test-case-names | enforce that all test cases with names have unique names | 
| Name | Description | |
|---|---|---|
| ✅ | recommended | enables all recommended rules in this plugin | 
| rules-recommended | enables all recommended rules that are aimed at linting ESLint rule files | |
| tests-recommended | enables all recommended rules that are aimed at linting ESLint test files | |
| all | enables all rules in this plugin, excluding those requiring type information | |
| all-type-checked | enables all rules in this plugin, including those requiring type information | |
| rules | enables all rules that are aimed at linting ESLint rule files | |
| tests | enables all rules that are aimed at linting ESLint test files | 
The list of recommended rules will only change in a major release of this plugin. However, new non-recommended rules might be added in a minor release of this plugin. Therefore, using the all, rules, and tests presets is not recommended for production use, because the addition of new rules in a minor release could break your build.
Example of applying the recommended config to all files.
// eslint.config.js
import eslintPlugin from 'eslint-plugin-eslint-plugin';
export default [eslintPlugin.configs.recommended];Or to apply linting only to the appropriate rule or test files:
// eslint.config.js
import eslintPlugin from 'eslint-plugin-eslint-plugin';
export default [
  {
    files: ['lib/rules/*.{js,ts}'],
    ...eslintPlugin.configs['rules-recommended'],
  },
  {
    files: ['tests/lib/rules/*.{js,ts}'],
    ...eslintPlugin.configs['tests-recommended'],
  },
];