UNPKG

simplr-tslint

Version:

A set of TSLint rules used in SimplrJS projects.

58 lines 9.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const ts = require("typescript"); const Lint = require("tslint"); const changeCase = require("change-case"); exports.ONLY_PRIMITIVES = "only-primitives"; class Rule extends Lint.Rules.TypedRule { applyWithProgram(sourceFile, program) { return this.applyWithWalker(new ConstVariableWalker(sourceFile, this.getOptions(), program)); } } // tslint:disable-next-line:max-line-length Rule.failureMessage = "Const variables in source file or in module declaration must have (constant-case) format."; exports.Rule = Rule; class ConstVariableWalker extends Lint.ProgramAwareRuleWalker { isNodeInModuleDeclaration(node) { return ts.isModuleBlock(node) && node.parent != null && ts.isModuleDeclaration(node.parent); } isTypePrimitive(type) { const primitive = ts.TypeFlags.String | ts.TypeFlags.Number | ts.TypeFlags.Boolean | ts.TypeFlags.Enum | ts.TypeFlags.EnumLiteral | ts.TypeFlags.ESSymbol | ts.TypeFlags.Void | ts.TypeFlags.Undefined | ts.TypeFlags.Null | ts.TypeFlags.Literal | ts.TypeFlags.UniqueESSymbol; return Boolean(type.flags & primitive); } visitVariableStatement(node) { super.visitVariableStatement(node); if (node.parent == null || (!ts.isSourceFile(node.parent) && !this.isNodeInModuleDeclaration(node.parent))) { return; } const typeChecker = this.getTypeChecker(); const variableDeclarationList = node.declarationList.declarations; for (const variableDeclaration of variableDeclarationList) { if (this.hasOption(exports.ONLY_PRIMITIVES)) { const type = typeChecker.getTypeAtLocation(variableDeclaration); if (!this.isTypePrimitive(type)) { continue; } } const name = variableDeclaration.name.getText(); const casedName = changeCase.constantCase(name); if (name !== casedName) { const nodeNameStart = variableDeclaration.name.getStart(); const nodeNameEnd = variableDeclaration.name.getWidth(); const fix = new Lint.Replacement(nodeNameStart, nodeNameEnd, casedName); this.addFailure(this.createFailure(nodeNameStart, nodeNameEnd, Rule.failureMessage, fix)); } } } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RWYXJpYWJsZU5hbWVSdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbnN0VmFyaWFibGVOYW1lUnVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGlDQUFpQztBQUNqQywrQkFBK0I7QUFDL0IsMENBQTBDO0FBRTdCLFFBQUEsZUFBZSxHQUFXLGlCQUFpQixDQUFDO0FBRXpELFVBQWtCLFNBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTO0lBSW5DLGdCQUFnQixDQUFDLFVBQXlCLEVBQUUsT0FBbUI7UUFDbEUsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksbUJBQW1CLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ2pHLENBQUM7O0FBTEQsMkNBQTJDO0FBQ3BCLG1CQUFjLEdBQVcsMkZBQTJGLENBQUM7QUFGaEosb0JBT0M7QUFFRCx5QkFBMEIsU0FBUSxJQUFJLENBQUMsc0JBQXNCO0lBQ2pELHlCQUF5QixDQUFDLElBQWE7UUFDM0MsT0FBTyxFQUFFLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEcsQ0FBQztJQUVPLGVBQWUsQ0FBQyxJQUFhO1FBQ2pDLE1BQU0sU0FBUyxHQUNYLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTTtZQUNuQixFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU07WUFDbkIsRUFBRSxDQUFDLFNBQVMsQ0FBQyxPQUFPO1lBQ3BCLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSTtZQUNqQixFQUFFLENBQUMsU0FBUyxDQUFDLFdBQVc7WUFDeEIsRUFBRSxDQUFDLFNBQVMsQ0FBQyxRQUFRO1lBQ3JCLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSTtZQUNqQixFQUFFLENBQUMsU0FBUyxDQUFDLFNBQVM7WUFDdEIsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJO1lBQ2pCLEVBQUUsQ0FBQyxTQUFTLENBQUMsT0FBTztZQUNwQixFQUFFLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQztRQUVoQyxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFTSxzQkFBc0IsQ0FBQyxJQUEwQjtRQUNwRCxLQUFLLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkMsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUU7WUFDeEcsT0FBTztTQUNWO1FBRUQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzFDLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUM7UUFFbEUsS0FBSyxNQUFNLG1CQUFtQixJQUFJLHVCQUF1QixFQUFFO1lBQ3ZELElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyx1QkFBZSxDQUFDLEVBQUU7Z0JBQ2pDLE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2dCQUVoRSxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDN0IsU0FBUztpQkFDWjthQUNKO1lBRUQsTUFBTSxJQUFJLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2hELE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFaEQsSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFO2dCQUNwQixNQUFNLGFBQWEsR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQzFELE1BQU0sV0FBVyxHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFFeEQsTUFBTSxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQ3hFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQzthQUM3RjtTQUNKO0lBQ0wsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdHMgZnJvbSBcInR5cGVzY3JpcHRcIjtcclxuaW1wb3J0ICogYXMgTGludCBmcm9tIFwidHNsaW50XCI7XHJcbmltcG9ydCAqIGFzIGNoYW5nZUNhc2UgZnJvbSBcImNoYW5nZS1jYXNlXCI7XHJcblxyXG5leHBvcnQgY29uc3QgT05MWV9QUklNSVRJVkVTOiBzdHJpbmcgPSBcIm9ubHktcHJpbWl0aXZlc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFJ1bGUgZXh0ZW5kcyBMaW50LlJ1bGVzLlR5cGVkUnVsZSB7XHJcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXHJcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IGZhaWx1cmVNZXNzYWdlOiBzdHJpbmcgPSBcIkNvbnN0IHZhcmlhYmxlcyBpbiBzb3VyY2UgZmlsZSBvciBpbiBtb2R1bGUgZGVjbGFyYXRpb24gbXVzdCBoYXZlIChjb25zdGFudC1jYXNlKSBmb3JtYXQuXCI7XHJcblxyXG4gICAgcHVibGljIGFwcGx5V2l0aFByb2dyYW0oc291cmNlRmlsZTogdHMuU291cmNlRmlsZSwgcHJvZ3JhbTogdHMuUHJvZ3JhbSk6IExpbnQuUnVsZUZhaWx1cmVbXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwbHlXaXRoV2Fsa2VyKG5ldyBDb25zdFZhcmlhYmxlV2Fsa2VyKHNvdXJjZUZpbGUsIHRoaXMuZ2V0T3B0aW9ucygpLCBwcm9ncmFtKSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmNsYXNzIENvbnN0VmFyaWFibGVXYWxrZXIgZXh0ZW5kcyBMaW50LlByb2dyYW1Bd2FyZVJ1bGVXYWxrZXIge1xyXG4gICAgcHJpdmF0ZSBpc05vZGVJbk1vZHVsZURlY2xhcmF0aW9uKG5vZGU6IHRzLk5vZGUpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdHMuaXNNb2R1bGVCbG9jayhub2RlKSAmJiBub2RlLnBhcmVudCAhPSBudWxsICYmIHRzLmlzTW9kdWxlRGVjbGFyYXRpb24obm9kZS5wYXJlbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaXNUeXBlUHJpbWl0aXZlKHR5cGU6IHRzLlR5cGUpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCBwcmltaXRpdmUgPVxyXG4gICAgICAgICAgICB0cy5UeXBlRmxhZ3MuU3RyaW5nIHxcclxuICAgICAgICAgICAgdHMuVHlwZUZsYWdzLk51bWJlciB8XHJcbiAgICAgICAgICAgIHRzLlR5cGVGbGFncy5Cb29sZWFuIHxcclxuICAgICAgICAgICAgdHMuVHlwZUZsYWdzLkVudW0gfFxyXG4gICAgICAgICAgICB0cy5UeXBlRmxhZ3MuRW51bUxpdGVyYWwgfFxyXG4gICAgICAgICAgICB0cy5UeXBlRmxhZ3MuRVNTeW1ib2wgfFxyXG4gICAgICAgICAgICB0cy5UeXBlRmxhZ3MuVm9pZCB8XHJcbiAgICAgICAgICAgIHRzLlR5cGVGbGFncy5VbmRlZmluZWQgfFxyXG4gICAgICAgICAgICB0cy5UeXBlRmxhZ3MuTnVsbCB8XHJcbiAgICAgICAgICAgIHRzLlR5cGVGbGFncy5MaXRlcmFsIHxcclxuICAgICAgICAgICAgdHMuVHlwZUZsYWdzLlVuaXF1ZUVTU3ltYm9sO1xyXG5cclxuICAgICAgICByZXR1cm4gQm9vbGVhbih0eXBlLmZsYWdzICYgcHJpbWl0aXZlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdmlzaXRWYXJpYWJsZVN0YXRlbWVudChub2RlOiB0cy5WYXJpYWJsZVN0YXRlbWVudCk6IHZvaWQge1xyXG4gICAgICAgIHN1cGVyLnZpc2l0VmFyaWFibGVTdGF0ZW1lbnQobm9kZSk7XHJcbiAgICAgICAgaWYgKG5vZGUucGFyZW50ID09IG51bGwgfHwgKCF0cy5pc1NvdXJjZUZpbGUobm9kZS5wYXJlbnQpICYmICF0aGlzLmlzTm9kZUluTW9kdWxlRGVjbGFyYXRpb24obm9kZS5wYXJlbnQpKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB0eXBlQ2hlY2tlciA9IHRoaXMuZ2V0VHlwZUNoZWNrZXIoKTtcclxuICAgICAgICBjb25zdCB2YXJpYWJsZURlY2xhcmF0aW9uTGlzdCA9IG5vZGUuZGVjbGFyYXRpb25MaXN0LmRlY2xhcmF0aW9ucztcclxuXHJcbiAgICAgICAgZm9yIChjb25zdCB2YXJpYWJsZURlY2xhcmF0aW9uIG9mIHZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmhhc09wdGlvbihPTkxZX1BSSU1JVElWRVMpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0eXBlID0gdHlwZUNoZWNrZXIuZ2V0VHlwZUF0TG9jYXRpb24odmFyaWFibGVEZWNsYXJhdGlvbik7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzVHlwZVByaW1pdGl2ZSh0eXBlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBuYW1lID0gdmFyaWFibGVEZWNsYXJhdGlvbi5uYW1lLmdldFRleHQoKTtcclxuICAgICAgICAgICAgY29uc3QgY2FzZWROYW1lID0gY2hhbmdlQ2FzZS5jb25zdGFudENhc2UobmFtZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAobmFtZSAhPT0gY2FzZWROYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlTmFtZVN0YXJ0ID0gdmFyaWFibGVEZWNsYXJhdGlvbi5uYW1lLmdldFN0YXJ0KCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlTmFtZUVuZCA9IHZhcmlhYmxlRGVjbGFyYXRpb24ubmFtZS5nZXRXaWR0aCgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpeCA9IG5ldyBMaW50LlJlcGxhY2VtZW50KG5vZGVOYW1lU3RhcnQsIG5vZGVOYW1lRW5kLCBjYXNlZE5hbWUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRGYWlsdXJlKHRoaXMuY3JlYXRlRmFpbHVyZShub2RlTmFtZVN0YXJ0LCBub2RlTmFtZUVuZCwgUnVsZS5mYWlsdXJlTWVzc2FnZSwgZml4KSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19