eslint-rule-extender
A utility to extend existing ESLint rules.
Installation
npm install eslint-rule-extenderor
yarn add eslint-rule-extenderUsage
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,
};