italia-tslint-rules
Version:
Custom tslint rules for the IO project
64 lines • 2.48 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var Lint = require("tslint");
var utils = require("tsutils");
var ts = require("typescript");
var tslint_1 = require("tslint");
var enableDisableRules_1 = require("tslint/lib/enableDisableRules");
var Rule = (function (_super) {
tslib_1.__extends(Rule, _super);
function Rule() {
return _super !== null && _super.apply(this, arguments) || this;
}
Rule.prototype.applyWithProgram = function (sourceFile, _) {
var failures = [];
utils.forEachComment(sourceFile, function (fullText, comment) {
var commentText = comment.kind === ts.SyntaxKind.SingleLineCommentTrivia
? fullText.substring(comment.pos + 2, comment.end)
: fullText.substring(comment.pos + 2, comment.end - 2);
var parsed = parseComment(commentText);
if (parsed !== undefined) {
if (!parsed.isEnabled && parsed.rulesList === "all") {
failures.push(new tslint_1.RuleFailure(sourceFile, comment.pos, comment.end, Rule.FAILURE_STRING, Rule.metadata.ruleName));
}
}
});
return failures;
};
Rule.metadata = {
ruleName: "no-tslint-disable-all",
description: "Avoid disabling all tslint rules.",
options: {},
optionsDescription: "None",
type: "typescript",
hasFix: false,
typescriptOnly: true,
requiresTypeInfo: false
};
Rule.FAILURE_STRING = "do not disable all tslint rules";
return Rule;
}(Lint.Rules.TypedRule));
exports.Rule = Rule;
function parseComment(commentText) {
var match = enableDisableRules_1.ENABLE_DISABLE_REGEX.exec(commentText);
if (match === null) {
return undefined;
}
var baseResponse = {
isEnabled: match[1] === "enable",
modifier: match[2]
};
var rulesList = splitOnSpaces(commentText.substr(match[0].length));
if (rulesList.length === 0 && match[3] === ":") {
return undefined;
}
if (rulesList.length === 0 || rulesList.indexOf("all") !== -1) {
return tslib_1.__assign({}, baseResponse, { rulesList: "all" });
}
return tslib_1.__assign({}, baseResponse, { rulesList: rulesList });
}
function splitOnSpaces(str) {
return str.split(/\s+/).filter(function (s) { return s !== ""; });
}
//# sourceMappingURL=noTslintDisableAllRule.js.map