UNPKG

10.9 kBSource Map (JSON)View Raw
1{"version":3,"file":"tslint-ban-snippets.es5.js","sources":["../src/ruleIds.ts","../src/config/ConfigFactory.ts","../src/utils/GeneralRuleUtils.ts","../src/tslBanSnippetsRule.ts"],"sourcesContent":["export const BAN_SNIPPETS_RULE_ID = \"tsl-ban-snippets\";\n","import { BanSnippetsRuleConfig } from \"../model/BanSnippetsRuleConfig\";\nimport { BAN_SNIPPETS_RULE_ID } from \"../ruleIds\";\n\nconst SNIPPETS_PROP = \"snippets\";\nconst REGEX_SNIPPETS_PROP = \"regexSnippets\";\n\nexport namespace ConfigFactory {\n export function createForBanSnippetsRule(options: any): BanSnippetsRuleConfig {\n const config = createFromArguments<BanSnippetsRuleConfig>(options, BAN_SNIPPETS_RULE_ID);\n\n validate(config, \"banned\", BAN_SNIPPETS_RULE_ID);\n config.banned.forEach(b => validateSnippetsList(b, BAN_SNIPPETS_RULE_ID));\n\n return config;\n }\n\n function validate(config: any, prop: string, ruleId: string) {\n if (!hasProp(config, prop)) {\n throw new Error(`invalid config for rule ${ruleId} - ${prop} is missing`);\n }\n }\n\n function hasProp(config: any, prop: string): boolean {\n return config[prop] !== undefined;\n }\n\n function validateSnippetsList(config: any, ruleId: string) {\n // either snippets OR regexSnippets is required\n const hasSnippets = hasProp(config, SNIPPETS_PROP);\n const hasRegexSnippets = hasProp(config, REGEX_SNIPPETS_PROP);\n\n const isValid = hasSnippets || hasRegexSnippets;\n\n const hasBoth = hasSnippets && hasRegexSnippets;\n\n if (!isValid || hasBoth) {\n throw new Error(\n `invalid config for rule ${ruleId} - either ${SNIPPETS_PROP} or ${REGEX_SNIPPETS_PROP} must be set`\n );\n }\n }\n\n function createFromArguments<T>(options: any, ruleId: string): T {\n const args = options.ruleArguments;\n\n if (args.length !== 1) {\n throw new Error(\n `tslint rule is misconfigured (${ruleId}) - options.ruleArguments length is ${\n args.length\n }`\n );\n }\n\n const config: T = args[0];\n\n return config;\n }\n}\n","export namespace GeneralRuleUtils {\n export function buildFailureString(message: string, ruleId: string): string {\n // include the rule ID, to make it easier to disable\n return `${message} (${ruleId})`;\n }\n\n export function isFileInPaths(filePath: string, paths: string[]): boolean {\n return paths.some(path => filePath.indexOf(path) >= 0);\n }\n}\n","import * as Lint from \"tslint\";\nimport * as ts from \"typescript\";\n\nimport { ConfigFactory } from \"./config/ConfigFactory\";\nimport { BannedSnippet, BanSnippetsRuleConfig } from \"./model/BanSnippetsRuleConfig\";\nimport { BAN_SNIPPETS_RULE_ID } from \"./ruleIds\";\nimport { GeneralRuleUtils } from \"./utils/GeneralRuleUtils\";\n\nexport class Rule extends Lint.Rules.AbstractRule {\n apply(sourceFile: ts.SourceFile): Lint.RuleFailure[] {\n const config = ConfigFactory.createForBanSnippetsRule(this.getOptions());\n\n const walker = new StatementsWalker(sourceFile, this.getOptions(), config);\n this.applyWithWalker(walker);\n\n return walker.getFailures();\n }\n}\n\nclass StatementsWalker extends Lint.RuleWalker {\n constructor(\n sourceFile: ts.SourceFile,\n options: Lint.IOptions,\n private config: BanSnippetsRuleConfig\n ) {\n super(sourceFile, options);\n }\n\n visitReturnStatement(node: ts.ReturnStatement) {\n this.visitSomeNode(node);\n }\n\n protected visitBinaryExpression(node: ts.BinaryExpression) {\n this.visitSomeNode(node);\n\n super.visitBinaryExpression(node);\n }\n\n protected visitCallExpression(node: ts.CallExpression) {\n this.visitSomeNode(node);\n\n super.visitCallExpression(node);\n }\n\n protected visitDebuggerStatement(node: ts.Statement) {\n this.visitSomeNode(node);\n\n super.visitDebuggerStatement(node);\n }\n\n private visitSomeNode(node: ts.Node) {\n const text = node.getText();\n\n const relevantBanned = this.getRelevantBanned();\n\n relevantBanned.forEach(banned => {\n if (banned.snippets) {\n this.checkBannedSnippet(banned.snippets, text, node, banned.message);\n } else if (banned.regexSnippets) {\n this.checkRegexBannedSnippet(banned.regexSnippets, text, node, banned.message);\n } else {\n throw new Error(\"Invalid config? No snippets and no regex-snippets\");\n }\n });\n }\n\n private checkBannedSnippet(snippets: string[], text: string, node: ts.Node, message?: string) {\n const bannedCodeFound = snippets.filter(bannedSnippet => text.indexOf(bannedSnippet) >= 0);\n\n if (bannedCodeFound.length > 0) {\n this.failRule(node, bannedCodeFound, message);\n }\n }\n\n private checkRegexBannedSnippet(\n regexSnippets: string[],\n text: string,\n node: ts.Node,\n message?: string\n ) {\n const bannedCodeFound = regexSnippets.filter(regexSnippet => {\n const regex = new RegExp(regexSnippet);\n\n return regex.test(text);\n });\n\n if (bannedCodeFound.length > 0) {\n this.failRule(node, bannedCodeFound, message);\n }\n }\n\n private failRule(node: ts.Node, bannedCodeFound: string[], message?: string) {\n const failureNode = node.getFirstToken() || node;\n\n this.addFailureAtNode(\n failureNode,\n GeneralRuleUtils.buildFailureString(\n message || `Do not use banned code '${bannedCodeFound.join(\"' or '\")}'.`,\n BAN_SNIPPETS_RULE_ID\n )\n );\n }\n\n private getRelevantBanned(): BannedSnippet[] {\n const sourceFilePath = this.getSourceFile().fileName;\n\n return this.config.banned.filter(\n b =>\n (!b.includePaths ||\n GeneralRuleUtils.isFileInPaths(sourceFilePath, b.includePaths)) &&\n (!b.excludePaths || !GeneralRuleUtils.isFileInPaths(sourceFilePath, b.excludePaths))\n );\n }\n}\n"],"names":["tslib_1.__extends","Lint.Rules","Lint.RuleWalker"],"mappings":"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"}
\No newline at end of file