tslint-immutable
Version:
TSLint rules to disable mutation in TypeScript.
37 lines • 1.69 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var ts = require("typescript");
var check_node_1 = require("./shared/check-node");
// tslint:disable-next-line:variable-name
exports.Rule = check_node_1.createCheckNodeRule(checkNode, "Only the same kind of members allowed in interfaces.");
function checkNode(node, _ctx) {
var invalidNodes = [];
if (node.kind === ts.SyntaxKind.InterfaceDeclaration) {
var interfaceDeclaration = node;
var prevMemberKind = undefined;
var prevMemberType = undefined;
for (var _i = 0, _a = interfaceDeclaration.members; _i < _a.length; _i++) {
var member = _a[_i];
var memberKind = member.kind;
var memberType = 0;
// If it is a property declaration we need to check the type too
if (member.kind === ts.SyntaxKind.PropertySignature) {
var propertySignature = member;
// Special care for function type
if (propertySignature.type &&
propertySignature.type.kind === ts.SyntaxKind.FunctionType) {
// We only set memberType for Functions
memberType = propertySignature.type.kind;
}
}
if (prevMemberKind !== undefined &&
(prevMemberKind !== memberKind || prevMemberType !== memberType)) {
invalidNodes.push(check_node_1.createInvalidNode(member));
}
prevMemberKind = memberKind;
prevMemberType = memberType;
}
}
return { invalidNodes: invalidNodes };
}
//# sourceMappingURL=noMixedInterfaceRule.js.map