UNPKG

eslint-plugin-codelyzer

Version:

53 lines (52 loc) 2.51 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var classDeclarationUtils_1 = require("../../util/classDeclarationUtils"); var create_eslint_rule_1 = require("../util/create-eslint-rule"); var utils_1 = require("../../util/utils"); exports.RULE_NAME = 'use-lifecycle-interface'; var STYLE_GUIDE_LINK = 'https://angular.io/styleguide#style-09-01'; exports.default = create_eslint_rule_1.createESLintRule({ name: exports.RULE_NAME, meta: { type: 'suggestion', docs: { description: 'Ensures classes implement lifecycle interfaces corresponding to the declared lifecycle methods', category: 'Best Practices', recommended: false }, schema: [], messages: { useLifecycleInterface: "Lifecycle interface '{{interfaceName}}' should be implemented for method '{{methodName}}'. (" + STYLE_GUIDE_LINK + ")" } }, defaultOptions: [], create: function (context) { var nodeMaps = create_eslint_rule_1.getNodeMaps(context); return { ClassDeclaration: function (node) { var tsNode = nodeMaps.esTreeNodeToTSNodeMap.get(node); var declaredLifecycleInterfaces = utils_1.getDeclaredAngularLifecycleInterfaces(tsNode); var declaredMethods = classDeclarationUtils_1.getDeclaredMethods(tsNode); for (var _i = 0, declaredMethods_1 = declaredMethods; _i < declaredMethods_1.length; _i++) { var method = declaredMethods_1[_i]; var methodProperty = method.name; var methodName = methodProperty.getText(); if (!utils_1.isAngularLifecycleMethod(methodName)) continue; var interfaceName = utils_1.getLifecycleInterfaceByMethodName(methodName); var isMethodImplemented = declaredLifecycleInterfaces.includes(utils_1.AngularLifecycleInterfaces[interfaceName]); if (isMethodImplemented) continue; context.report({ node: nodeMaps.tsNodeToESTreeNodeMap.get(methodProperty), messageId: 'useLifecycleInterface', data: { interfaceName: interfaceName, methodName: methodName } }); } } }; } });