Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

eslint-plugin-eslint-plugin

eslint-community868.5kMIT6.4.0

An ESLint plugin for linting ESLint plugins

eslint, eslintplugin, eslint-plugin

readme

eslint-plugin-eslint-plugin CI NPM version Conventional Commits

An ESLint plugin for linting ESLint plugins. Rules written in CJS, ESM, and TypeScript are all supported.

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

Usage

Here's an example ESLint configuration that:

  • Sets sourceType to script for CJS plugins (most users) (use module for ESM/TypeScript)
  • Enables the recommended configuration
  • Enables an optional/non-recommended rule

.eslintrc.json

{
  "extends": ["plugin:eslint-plugin/recommended"],
  "rules": {
    "eslint-plugin/require-meta-docs-description": "error"
  }
}

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',
    },
  },
];

Rules

💼 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-meta-schema-default disallow rules meta.schema properties to include defaults | |
no-missing-message-ids disallow messageIds 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 messageIds 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-default-options require only rules with options to implement a meta.defaultOptions property | 🔧 |
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-schema-description require rules meta.schema properties to include descriptions | |
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 | 🔧

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 |

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.

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"]
    }
  ]
}