simplr-tslint
Version:
A set of TSLint rules used in SimplrJS projects.
32 lines • 4.61 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const ts = require("typescript");
const Lint = require("tslint");
class Rule extends Lint.Rules.AbstractRule {
apply(sourceFile) {
return this.applyWithWalker(new ExportedNamespaceMembersWalker(sourceFile, this.getOptions()));
}
}
Rule.failureMessage = "All module members must be exported.";
exports.Rule = Rule;
class ExportedNamespaceMembersWalker extends Lint.RuleWalker {
visitSourceFile(node) {
// This rule should only work in source files.
if (!node.isDeclarationFile) {
super.visitSourceFile(node);
}
}
visitModuleDeclaration(node) {
super.visitModuleDeclaration(node);
if (node.body == null || !ts.isModuleBlock(node.body)) {
return;
}
for (const statement of node.body.statements) {
if (statement.modifiers == null || statement.modifiers.findIndex(x => x.kind === ts.SyntaxKind.ExportKeyword) === -1) {
const fix = new Lint.Replacement(statement.getStart(), 0, "export ");
this.addFailureAtNode(statement, Rule.failureMessage, fix);
}
}
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0ZWROYW1lc3BhY2VNZW1iZXJzUnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9leHBvcnRlZE5hbWVzcGFjZU1lbWJlcnNSdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsaUNBQWlDO0FBQ2pDLCtCQUErQjtBQUUvQixVQUFrQixTQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWTtJQUd0QyxLQUFLLENBQUMsVUFBeUI7UUFDbEMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksOEJBQThCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkcsQ0FBQzs7QUFKc0IsbUJBQWMsR0FBVyxzQ0FBc0MsQ0FBQztBQUQzRixvQkFNQztBQUVELG9DQUFxQyxTQUFRLElBQUksQ0FBQyxVQUFVO0lBQ2pELGVBQWUsQ0FBQyxJQUFtQjtRQUN0Qyw4Q0FBOEM7UUFDOUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUN6QixLQUFLLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQy9CO0lBQ0wsQ0FBQztJQUVNLHNCQUFzQixDQUFDLElBQTBCO1FBQ3BELEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDbkQsT0FBTztTQUNWO1FBRUQsS0FBSyxNQUFNLFNBQVMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUMxQyxJQUFJLFNBQVMsQ0FBQyxTQUFTLElBQUksSUFBSSxJQUFJLFNBQVMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUNsSCxNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDckUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2FBQzlEO1NBQ0o7SUFDTCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB0cyBmcm9tIFwidHlwZXNjcmlwdFwiO1xyXG5pbXBvcnQgKiBhcyBMaW50IGZyb20gXCJ0c2xpbnRcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBSdWxlIGV4dGVuZHMgTGludC5SdWxlcy5BYnN0cmFjdFJ1bGUge1xyXG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBmYWlsdXJlTWVzc2FnZTogc3RyaW5nID0gXCJBbGwgbW9kdWxlIG1lbWJlcnMgbXVzdCBiZSBleHBvcnRlZC5cIjtcclxuXHJcbiAgICBwdWJsaWMgYXBwbHkoc291cmNlRmlsZTogdHMuU291cmNlRmlsZSk6IExpbnQuUnVsZUZhaWx1cmVbXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwbHlXaXRoV2Fsa2VyKG5ldyBFeHBvcnRlZE5hbWVzcGFjZU1lbWJlcnNXYWxrZXIoc291cmNlRmlsZSwgdGhpcy5nZXRPcHRpb25zKCkpKTtcclxuICAgIH1cclxufVxyXG5cclxuY2xhc3MgRXhwb3J0ZWROYW1lc3BhY2VNZW1iZXJzV2Fsa2VyIGV4dGVuZHMgTGludC5SdWxlV2Fsa2VyIHtcclxuICAgIHB1YmxpYyB2aXNpdFNvdXJjZUZpbGUobm9kZTogdHMuU291cmNlRmlsZSk6IHZvaWQge1xyXG4gICAgICAgIC8vIFRoaXMgcnVsZSBzaG91bGQgb25seSB3b3JrIGluIHNvdXJjZSBmaWxlcy5cclxuICAgICAgICBpZiAoIW5vZGUuaXNEZWNsYXJhdGlvbkZpbGUpIHtcclxuICAgICAgICAgICAgc3VwZXIudmlzaXRTb3VyY2VGaWxlKG5vZGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdmlzaXRNb2R1bGVEZWNsYXJhdGlvbihub2RlOiB0cy5Nb2R1bGVEZWNsYXJhdGlvbik6IHZvaWQge1xyXG4gICAgICAgIHN1cGVyLnZpc2l0TW9kdWxlRGVjbGFyYXRpb24obm9kZSk7XHJcbiAgICAgICAgaWYgKG5vZGUuYm9keSA9PSBudWxsIHx8ICF0cy5pc01vZHVsZUJsb2NrKG5vZGUuYm9keSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2Ygbm9kZS5ib2R5LnN0YXRlbWVudHMpIHtcclxuICAgICAgICAgICAgaWYgKHN0YXRlbWVudC5tb2RpZmllcnMgPT0gbnVsbCB8fCBzdGF0ZW1lbnQubW9kaWZpZXJzLmZpbmRJbmRleCh4ID0+IHgua2luZCA9PT0gdHMuU3ludGF4S2luZC5FeHBvcnRLZXl3b3JkKSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpeCA9IG5ldyBMaW50LlJlcGxhY2VtZW50KHN0YXRlbWVudC5nZXRTdGFydCgpLCAwLCBcImV4cG9ydCBcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEZhaWx1cmVBdE5vZGUoc3RhdGVtZW50LCBSdWxlLmZhaWx1cmVNZXNzYWdlLCBmaXgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdfQ==