Skip to content

eslint-community/eslint-plugin-eslint-plugin

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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