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 installoryarn installin 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-namewith 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 ruleExamples of correct code for this rule:
// Add examples of code that passes the ruleOptions
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.mdor similar). -
Run Tests
Ensure all tests pass by running:
npm testor
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!