0.0.1 • Published 4 years ago

eslint-rule-extender v0.0.1

Weekly downloads
4,713
License
MIT
Repository
github
Last release
4 years ago

eslint-rule-extender

npm node

A utility to extend existing ESLint rules.

Installation

npm install eslint-rule-extender

or

yarn add eslint-rule-extender

Usage

The default export is a function that takes two arguments and returns the modified rule.

API

ruleExtender(originalRule: ESLintRule, options: Object) => ESLintRule;
  • originalRule - The original rule to extend
  • options - An object with the desired overrides (options can be viewed below)

Example Usage

const ruleExtender = require('eslint-rule-extender');
const { originalRule } = require('eslint-plugin-example');

const extendedRule = ruleExtender(originalRule, options);

module.exports = {
  extendedRule,
};

Options

metaOverrides

Overrides for the original rule's meta property. The properties of the meta object can be found here.Options

const extendedRule = ruleExtender(originalRule, {
  metaOverrides: {
    type: 'suggestion',
    fixable: false,
  },
});

createAdditionalVisitors

A function that has the same signature as ESLint rules' create method. It is passed the context object and should return a object of visitor callbacks. See the official ESLint docs for more details!

Example Usage

const extendedRule = ruleExtender(originalRule, {
  createAdditionalVisitors(context) {
    return {
      ArrowFunctionExpression(node) {
        context.report({ node, messageId: 'anAdditionalSuggestion' });
      },
    };
  },
});

reportOverrides

A function that is called with the report metadata of the original rule's context.report() calls. The return value of this function is a trinary with the following behavior:

  • true: report with original metadata (unchanged)
  • false: do not report
  • modified report metadata object: report with this metadata instead

Example Usage

const extendedRule = ruleExtender(originalRule, {
  reportOverrides(meta) {
    return meta.node.type !== 'ThisExpression';
  },
});

Putting It All Together

const ruleExtender = require('eslint-rule-extender');
const { originalRule } = require('eslint-plugin-example');

const extendedRule = ruleExtender(originalRule, {
  metaOverrides: {
    type: 'suggestion',
    fixable: false,
  },
  createAdditionalVisitors(context) {
    return {
      ArrowFunctionExpression(node) {
        context.report({ node, messageId: 'anAdditionalSuggestion' });
      },
    };
  },
  reportOverrides(meta) {
    return meta.node.type !== 'ThisExpression';
  },
});

module.exports = {
  extendedRule,
};

Prior art