UNPKG

eslint-plugin-eslint-config

Version:
69 lines (58 loc) 1.82 kB
"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)) })) }); } } }; } });