eslint-plugin-eslint-config
Version:
ESLint rules for ESLint config files
69 lines (58 loc) • 1.82 kB
JavaScript
"use strict";
var _experimentalUtils = require("@typescript-eslint/experimental-utils");
var _utils = require("./utils");
const replaceDeprecatedRule = (fullRule, replacement) => {
const split = fullRule.split('/');
split[split.length - 1] = replacement;
return split.join('/');
};
module.exports = _experimentalUtils.ESLintUtils.RuleCreator(name => name)({
name: __filename,
meta: {
type: 'problem',
docs: {
description: 'Checks for usage of deprecated eslint rules',
category: 'Best Practices',
recommended: 'warn',
suggestion: true
},
messages: {
deprecatedRule: "'{{ ruleId }}' is deprecated in favor of '{{ replacedBy }}'",
suggestReplaceWith: 'Replace with "{{ replacement }}"'
},
schema: []
},
defaultOptions: [],
create(context) {
const results = (0, _utils.tryGetConfigInfo)(context.getSourceCode().getText());
if (!results) {
return {};
}
return {
Literal(node) {
if (node.value === null) {
return;
}
const ruleId = node.value.toString();
const deprecation = results.deprecatedRules.find(rule => rule.ruleId === node.value);
if (deprecation) {
context.report({
data: {
ruleId,
replacedBy: deprecation.replacedBy.join(', ')
},
messageId: 'deprecatedRule',
node,
suggest: deprecation.replacedBy.map(replacement => replaceDeprecatedRule(ruleId, replacement)).map(replacement => ({
messageId: 'suggestReplaceWith',
data: {
replacement
},
fix: fixer => fixer.replaceText(node, node.raw.replace(ruleId, replacement))
}))
});
}
}
};
}
});