UNPKG

simplr-tslint

Version:

A set of TSLint rules used in SimplrJS projects.

34 lines 4.75 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const ts = require("typescript"); const Lint = require("tslint"); const changeCase = require("change-case"); const PREFIX = "T"; function isUpperCase(str) { return str === str.toUpperCase(); } function hasPrefix(name) { return name.length >= 2 && name[0] === PREFIX && isUpperCase(name[1]); } class Rule extends Lint.Rules.AbstractRule { apply(sourceFile) { return this.applyWithFunction(sourceFile, walk); } } Rule.failureMessage = `Type parameter's name must start with "${PREFIX}" prefix.`; exports.Rule = Rule; function walk(ctx) { const cb = (node) => { if (ts.isTypeParameterDeclaration(node)) { const name = node.name.getText(); if (!hasPrefix(name)) { const casedName = PREFIX + changeCase.pascalCase(name); const fix = new Lint.Replacement(node.name.getStart(), node.name.getWidth(), casedName); ctx.addFailureAtNode(node.name, Rule.failureMessage, fix); } } return ts.forEachChild(node, cb); }; return ts.forEachChild(ctx.sourceFile, cb); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZVBhcmFtZXRlck5hbWVSdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3R5cGVQYXJhbWV0ZXJOYW1lUnVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGlDQUFpQztBQUNqQywrQkFBK0I7QUFDL0IsMENBQTBDO0FBRTFDLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQztBQUVuQixxQkFBcUIsR0FBVztJQUM1QixPQUFPLEdBQUcsS0FBSyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDckMsQ0FBQztBQUVELG1CQUFtQixJQUFZO0lBQzNCLE9BQU8sSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLE1BQU0sSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUUsQ0FBQztBQUVELFVBQWtCLFNBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZO0lBR3RDLEtBQUssQ0FBQyxVQUF5QjtRQUNsQyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDcEQsQ0FBQzs7QUFKc0IsbUJBQWMsR0FBVywwQ0FBMEMsTUFBTSxXQUFXLENBQUM7QUFEaEgsb0JBTUM7QUFFRCxjQUFjLEdBQTJCO0lBQ3JDLE1BQU0sRUFBRSxHQUFHLENBQUMsSUFBYSxFQUFRLEVBQUU7UUFDL0IsSUFBSSxFQUFFLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDckMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUVqQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNsQixNQUFNLFNBQVMsR0FBRyxNQUFNLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFFdkQsTUFBTSxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDeEYsR0FBRyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxHQUFHLENBQUMsQ0FBQzthQUM3RDtTQUNKO1FBRUQsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNyQyxDQUFDLENBQUM7SUFFRixPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMvQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdHMgZnJvbSBcInR5cGVzY3JpcHRcIjtcclxuaW1wb3J0ICogYXMgTGludCBmcm9tIFwidHNsaW50XCI7XHJcbmltcG9ydCAqIGFzIGNoYW5nZUNhc2UgZnJvbSBcImNoYW5nZS1jYXNlXCI7XHJcblxyXG5jb25zdCBQUkVGSVggPSBcIlRcIjtcclxuXHJcbmZ1bmN0aW9uIGlzVXBwZXJDYXNlKHN0cjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gc3RyID09PSBzdHIudG9VcHBlckNhc2UoKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaGFzUHJlZml4KG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIG5hbWUubGVuZ3RoID49IDIgJiYgbmFtZVswXSA9PT0gUFJFRklYICYmIGlzVXBwZXJDYXNlKG5hbWVbMV0pO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUnVsZSBleHRlbmRzIExpbnQuUnVsZXMuQWJzdHJhY3RSdWxlIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgZmFpbHVyZU1lc3NhZ2U6IHN0cmluZyA9IGBUeXBlIHBhcmFtZXRlcidzIG5hbWUgbXVzdCBzdGFydCB3aXRoIFwiJHtQUkVGSVh9XCIgcHJlZml4LmA7XHJcblxyXG4gICAgcHVibGljIGFwcGx5KHNvdXJjZUZpbGU6IHRzLlNvdXJjZUZpbGUpOiBMaW50LlJ1bGVGYWlsdXJlW10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFwcGx5V2l0aEZ1bmN0aW9uKHNvdXJjZUZpbGUsIHdhbGspO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiB3YWxrKGN0eDogTGludC5XYWxrQ29udGV4dDx2b2lkPik6IHZvaWQge1xyXG4gICAgY29uc3QgY2IgPSAobm9kZTogdHMuTm9kZSk6IHZvaWQgPT4ge1xyXG4gICAgICAgIGlmICh0cy5pc1R5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbihub2RlKSkge1xyXG4gICAgICAgICAgICBjb25zdCBuYW1lID0gbm9kZS5uYW1lLmdldFRleHQoKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghaGFzUHJlZml4KG5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjYXNlZE5hbWUgPSBQUkVGSVggKyBjaGFuZ2VDYXNlLnBhc2NhbENhc2UobmFtZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgZml4ID0gbmV3IExpbnQuUmVwbGFjZW1lbnQobm9kZS5uYW1lLmdldFN0YXJ0KCksIG5vZGUubmFtZS5nZXRXaWR0aCgpLCBjYXNlZE5hbWUpO1xyXG4gICAgICAgICAgICAgICAgY3R4LmFkZEZhaWx1cmVBdE5vZGUobm9kZS5uYW1lLCBSdWxlLmZhaWx1cmVNZXNzYWdlLCBmaXgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHMuZm9yRWFjaENoaWxkKG5vZGUsIGNiKTtcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHRzLmZvckVhY2hDaGlsZChjdHguc291cmNlRmlsZSwgY2IpO1xyXG59XHJcbiJdfQ==