UNPKG

@exadel/eslint-plugin-esl

Version:

Helper ESLint rules to find and migrate ESL (@exadel/esl) library deprecations

42 lines (41 loc) 1.66 kB
"use strict"; 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 }); }