eslint-plugin-codelyzer
Version:
53 lines (52 loc) • 2.51 kB
JavaScript
"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
}
});
}
}
};
}
});