Add New Rule
This guide will walk you through the process of adding a new rule to the ESLint Plugin Hub. Follow these steps to contribute a new rule to the project.
Prerequisites
- Ensure you have Node.js and npm (or yarn) installed on your system.
- Fork and clone the ESLint Plugin Hub repository.
- Install project dependencies by running
npm install
oryarn install
in the project root.
Steps to Add a New Rule
-
Use the Rule Generator
Start by using our Rule Generator script to scaffold the necessary files for your new rule:
npm run generate-rule your-rule-name [rule-type]
or if you use yarn:
yarn generate-rule your-rule-name [rule-type]
Replace
your-rule-name
with the name of your new rule (in kebab-case), and[rule-type]
with either 'general', 'react', or 'angular'. If you don't specify a rule type, the script will prompt you to choose one. -
Implement the Rule Logic
Open the generated rule file (e.g.,
lib/rules/your-rule-name.js
) and implement your rule logic. The generated file will contain a basic structure that you can build upon:module.exports = {
meta: {
type: 'suggestion', // Can be 'problem', 'suggestion', or 'layout'
docs: {
description: 'Description of your rule',
category: 'Fill in appropriate category',
recommended: false,
url: 'https://eslint.org/docs/rules/your-rule-name',
},
fixable: null, // Or 'code' or 'whitespace'
schema: [], // Add schema if the rule has options
},
create: function (context) {
return {
// Add visitors for the AST nodes your rule needs to check
};
},
}; -
Write Tests
Open the generated test file (e.g.,
tests/lib/rules/your-rule-name.js
) and write tests for your rule. Ensure you cover various scenarios, including both valid and invalid code examples:const rule = require('../../../lib/rules/your-rule-name'),
RuleTester = require('eslint').RuleTester;
const ruleTester = new RuleTester();
ruleTester.run('your-rule-name', rule, {
valid: [
// Add valid code examples
],
invalid: [
// Add invalid code examples
],
}); -
Update Rule Documentation
Create a new Markdown file in the appropriate documentation folder based on your rule type:
- For general rules:
docs-docsaurus/docs/general.md
- For React rules:
docs-docsaurus/docs/react.md
- For Angular rules:
docs-docsaurus/docs/angular.md
Include the following sections in your documentation:
your-rule-name
Description of what your rule does and why it's useful.
Rule Details
This rule aims to...
Examples of incorrect code for this rule:
// Add examples of code that breaks the rule
Examples of correct code for this rule:
// Add examples of code that passes the rule
Options
If your rule has options, describe them here.
When Not To Use It
Describe scenarios when this rule might not be desirable.
- For general rules:
-
Update the Main Documentation
Add a link to your new rule in the appropriate section of the main documentation file (
docs-docsaurus/docs/intro.md
or similar). -
Run Tests
Ensure all tests pass by running:
npm test
or
yarn test
-
Commit Your Changes
Commit your new rule, tests, and documentation:
git add .
git commit -m "Add new rule: your-rule-name" -
Create a Pull Request
Push your changes to your fork and create a Pull Request on the main ESLint Plugin Hub repository. Provide a clear description of your new rule in the Pull Request.
Best Practices
- Ensure your rule has a clear purpose and doesn't overlap significantly with existing rules.
- Write clear, concise documentation with good examples.
- Include both positive and negative test cases.
- Consider the performance implications of your rule, especially for large codebases.
- Be responsive to feedback during the review process.
By following these steps, you'll be able to contribute a well-structured, thoroughly tested, and properly documented new rule to the ESLint Plugin Hub. Thank you for your contribution!