1. eslint-plugin-local-rules
A plugin for ESLint that allows you to use project-specific rules
eslint-plugin-local-rules
Package: eslint-plugin-local-rules
Created by: cletusw
Last modified: Sat, 25 Nov 2023 05:12:39 GMT
Version: 2.0.1
License: MIT
Downloads: 853,065
Repository: https://github.com/cletusw/eslint-plugin-local-rules

Install

npm install eslint-plugin-local-rules
yarn add eslint-plugin-local-rules

eslint-plugin-local-rules

A plugin for ESLint that allows you to use project-specific rules, similar to the --rulesdir command line option (more).

Workaround for https://github.com/eslint/eslint/issues/8769 (previously https://github.com/eslint/eslint/issues/2715).

Other solutions

  • https://github.com/taskworld/eslint-plugin-local
    • Allows specifying additonal plugin config such as
      processors
  • https://github.com/not-an-aardvark/eslint-plugin-rulesdir
    • Allows for a custom rules directory name

Dependencies

  • Requires ESLint version 0.8.0 or higher

Install

npm install eslint-plugin-local-rules

Usage (JavaScript)

./eslint-local-rules.js (or ./eslint-local-rules/index.js)

 'use strict';

module.exports = {
  'disallow-identifiers': {
    meta: {
      docs: {
        description: 'disallow identifiers',
        category: 'Possible Errors',
      },
      schema: [],
    },
    create: function (context) {
      return {
        Identifier: function (node) {
          context.report({
            node: node,
            message: 'Identifiers not allowed for Super Important reasons.',
          });
        },
      };
    },
  },
};

./.eslintrc

 {
  "plugins": ["eslint-plugin-local-rules"],

  "rules": {
    "local-rules/disallow-identifiers": "error"
  }
}

Usage (TypeScript)

npm install ts-node @types/eslint

You'll also need an eslint config like the .eslintrc above (more info).

./eslint-local-rules/index.js

 require("ts-node").register({
  transpileOnly: true,
  compilerOptions: {
    module: "commonjs",
  },
});

module.exports = require("./rules").default;

./eslint-local-rules/rules.ts

 import type { Rule } from "eslint";

export default {
  "disallow-identifiers": {
    meta: {
      docs: {
        description: 'disallow identifiers',
        category: 'Possible Errors',
      },
      schema: [],
    },
    create: function (context) {
      return {
        Identifier: function (node) {
          context.report({
            node: node,
            message: 'Identifiers not allowed for Super Important reasons.',
          });
        },
      };
    },
  },
} satisfies Record<string, Rule.RuleModule>;

npm/yarn/pnpm workspaces support

This plugin supports npm/yarn/pnpm workspaces, although note that if the eslint-local-rules.js file is in the workspace subdirectory, running from the project root is unsupported.

For example, if there's an eslint-local-rules.js and index.js in ./src/app:

Wrong: npx eslint src/app/index.js

Right: (cd src/app; npx eslint index.js)

Also note that if there is an eslint-local-rules.js file in both the workspace subdirectory and project root, the workspace one takes precedence (assuming you're running eslint from the workspace directory, as above).

License

MIT

RELATED POST

10 Must-Know Windows Shortcuts That Will Save You Time

10 Must-Know Windows Shortcuts That Will Save You Time

Arrays vs Linked Lists: Which is Better for Memory Management in Data Structures?

Arrays vs Linked Lists: Which is Better for Memory Management in Data Structures?

Navigating AWS Networking: Essential Hacks for Smooth Operation

Navigating AWS Networking: Essential Hacks for Smooth Operation

Achieving Stunning Visuals with Unity's Global Illumination

Achieving Stunning Visuals with Unity's Global Illumination

Nim's Hidden Gems: Lesser-known Features for Writing Efficient Code

Nim's Hidden Gems: Lesser-known Features for Writing Efficient Code