@exadel/eslint-plugin-esl
Version:
Helper ESLint rules to find and migrate ESL (@exadel/esl) library deprecations
42 lines (41 loc) • 1.66 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.buildRule = buildRule;
const meta = {
type: 'suggestion',
docs: {
description: 'replace deprecated class static methods with recommended ones',
recommended: true
},
fixable: 'code'
};
/** Builds deprecation rule from {@link ESLintDeprecationStaticMethodCfg} object */
function buildRule(configs) {
configs = (Array.isArray(configs) ? configs : [configs]);
const create = (context) => {
return {
MemberExpression(node) {
configs.forEach((config) => {
if (isDeprecatedMethod(node, config))
handleCallExpression(node, context, config);
});
return null;
}
};
};
return { meta, create };
}
function isDeprecatedMethod(node, config) {
const { object, property } = node;
return object.type === 'Identifier' && property.type === 'Identifier' && object.name === config.className && property.name === config.deprecatedMethod;
}
function handleCallExpression(node, context, config) {
const replCfg = config.getReplacementMethod(node.parent);
const message = typeof replCfg === 'string' ? `${config.className}.${replCfg}` : replCfg.message;
const replacement = typeof replCfg === 'string' ? replCfg : replCfg.replacement;
context.report({
node,
message: `[ESL Lint]: Deprecated static method ${config.className}.${config.deprecatedMethod}, use ${message} instead`,
fix: replacement ? (fixer) => fixer.replaceText(node.property, replacement) : undefined
});
}