Awesome
eslint-plugin-eslint-plugin
<!-- omit from toc -->
An ESLint plugin for linting ESLint plugins. Rules written in CJS, ESM, and TypeScript are all supported.
<!-- vscode-markdown-toc --> <!-- vscode-markdown-toc-config numbering=false autoSave=true /vscode-markdown-toc-config --> <!-- /vscode-markdown-toc --><a name='Installation'></a>Installation
You'll first need to install ESLint:
npm i eslint --save-dev
Next, install eslint-plugin-eslint-plugin
:
npm install eslint-plugin-eslint-plugin --save-dev
<a name='Usage'></a>Usage
Here's an example ESLint configuration that:
- Sets
sourceType
toscript
for CJS plugins (most users) (usemodule
for ESM/TypeScript) - Enables the
recommended
configuration - Enables an optional/non-recommended rule
<a name='eslintrc'></a>.eslintrc.json
{
"extends": ["plugin:eslint-plugin/recommended"],
"rules": {
"eslint-plugin/require-meta-docs-description": "error"
}
}
<a name='flat'></a>eslint.config.js
(requires eslint>=v8.23.0)
const eslintPlugin = require('eslint-plugin-eslint-plugin');
module.exports = [
eslintPlugin.configs['flat/recommended'],
{
rules: {
'eslint-plugin/require-meta-docs-description': 'error',
},
},
];
<a name='Rules'></a>Rules
<!-- begin auto-generated rules list -->💼 Configurations enabled in.
✅ Set in the recommended
configuration.
🔧 Automatically fixable by the --fix
CLI option.
💡 Manually fixable by editor suggestions.
💠Requires type information.
Rules
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-missing-message-ids | disallow messageId s that are missing from meta.messages | ✅ | |||
no-missing-placeholders | disallow missing placeholders in rule report messages | ✅ | |||
no-property-in-node | disallow using in to narrow node types instead of looking at properties | 💠| |||
no-unused-message-ids | disallow unused messageId s in meta.messages | ✅ | |||
no-unused-placeholders | disallow unused placeholders in rule report messages | ✅ | |||
no-useless-token-range | disallow unnecessary calls to sourceCode.getFirstToken() and sourceCode.getLastToken() | ✅ | 🔧 | ||
prefer-message-ids | require using messageId instead of message or desc to 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 of replaceTextRange() | ||||
report-message-format | enforce a consistent format for rule report messages | ||||
require-meta-docs-description | require rules to implement a meta.docs.description property with the correct format | ||||
require-meta-docs-recommended | require rules to implement a meta.docs.recommended property | ||||
require-meta-docs-url | require rules to implement a meta.docs.url property | 🔧 | |||
require-meta-fixable | require rules to implement a meta.fixable property | ✅ | |||
require-meta-has-suggestions | require suggestable rules to implement a meta.hasSuggestions property | ✅ | 🔧 | ||
require-meta-schema | require rules to implement a meta.schema property | ✅ | 💡 | ||
require-meta-type | require rules to implement a meta.type property | ✅ |
Tests
Name                       | Description | 💼 | 🔧 | 💡 | 💠|
---|---|---|---|---|---|
consistent-output | enforce consistent use of output assertions 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 output matches the code | ✅ | 🔧 | ||
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 | 🔧 |
<a name='Presets'></a>Presets
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 |
<a name='Semanticversioningpolicy'></a>Semantic versioning policy
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.
<a name='Presetusage'></a>Preset usage
Both flat and eslintrc configs are supported. For example, to enable the recommended
preset, use:
eslint.config.js
const eslintPlugin = require('eslint-plugin-eslint-plugin');
module.exports = [eslintPlugin.configs['flat/recommended']];
.eslintrc.json
{
"extends": ["plugin:eslint-plugin/recommended"]
}
Or to apply linting only to the appropriate rule or test files:
eslint.config.js
const eslintPlugin = require('eslint-plugin-eslint-plugin');
module.exports = [
{
files: ['lib/rules/*.{js,ts}'],
...eslintPlugin.configs['flat/rules-recommended'],
},
{
files: ['tests/lib/rules/*.{js,ts}'],
...eslintPlugin.configs['flat/tests-recommended'],
},
];
.eslintrc.js
{
"overrides": [
{
"files": ["lib/rules/*.{js,ts}"],
"extends": ["plugin:eslint-plugin/rules-recommended"]
},
{
"files": ["tests/lib/rules/*.{js,ts}"],
"extends": ["plugin:eslint-plugin/tests-recommended"]
}
]
}