Lesson 15 / 25

Custom ESLint Rules

Write custom rules for domain-specific linting needs.

When to write custom rules

Standard rules don't cover your codebase's conventions? Write a custom rule to enforce them. Examples: require specific naming patterns, forbid certain libraries, enforce architectural layers.

Simple custom rule

A custom rule that forbids console.log in production code.

// .eslintrc.js - custom rule
module.exports = {
  rules: {
    'no-prod-console': {
      create(context) {
        return {
          MemberExpression(node) {
            if (node.object.name === 'console' &&
                node.property.name === 'log' &&
                !context.getFilename().includes('.test.')) {
              context.report({ node, message: 'console.log not allowed in production' });
            }
          }
        };
      }
    }
  }
};

Output:

Custom rule defined: forbids console.log in prod

Prefer plugins over rules

If your custom rule is complex or reusable, package it as an eslint-plugin and share it. For simple rules, inline them in .eslintrc.js.

Quick check

Quick check: When should you write a custom ESLint rule?

  • When your codebase has unique conventions standard rules don't cover.
  • For all projects.
  • Only for large teams.
Answer

When your codebase has unique conventions standard rules don't cover. — Custom rules automate enforcement of architectural or style decisions unique to your team.