UNPKG

2.6 kBJavaScriptView Raw
1var __extends = (this && this.__extends) || function (d, b) {
2 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
3 function __() { this.constructor = d; }
4 __.prototype = b.prototype;
5 d.prototype = new __();
6};
7var ErrorTolerantWalker = require('./utils/ErrorTolerantWalker');
8var AstUtils = require('./utils/AstUtils');
9var Rule = (function (_super) {
10 __extends(Rule, _super);
11 function Rule() {
12 _super.apply(this, arguments);
13 }
14 Rule.prototype.apply = function (sourceFile) {
15 var documentRegistry = ts.createDocumentRegistry();
16 var languageServiceHost = Lint.createLanguageServiceHost('file.ts', sourceFile.getFullText());
17 var languageService = ts.createLanguageService(languageServiceHost, documentRegistry);
18 return this.applyWithWalker(new NoDocumentWriteWalker(sourceFile, this.getOptions(), languageService));
19 };
20 Rule.WRITE_FAILURE = 'Forbidden call to document.write';
21 Rule.WRITELN_FAILURE = 'Forbidden call to document.writeln';
22 return Rule;
23})(Lint.Rules.AbstractRule);
24exports.Rule = Rule;
25var NoDocumentWriteWalker = (function (_super) {
26 __extends(NoDocumentWriteWalker, _super);
27 function NoDocumentWriteWalker(sourceFile, options, languageService) {
28 _super.call(this, sourceFile, options);
29 this.languageService = languageService;
30 this.typeChecker = languageService.getProgram().getTypeChecker();
31 }
32 NoDocumentWriteWalker.prototype.visitCallExpression = function (node) {
33 var functionName = AstUtils.getFunctionName(node);
34 if (functionName === 'write' || functionName === 'writeln') {
35 var leftSide = node.expression.expression;
36 if (leftSide) {
37 var leftSideType = this.typeChecker.getTypeAtLocation(leftSide);
38 var typeAsString = this.typeChecker.typeToString(leftSideType);
39 if (leftSideType.flags === 1 || typeAsString === 'Document') {
40 if (functionName === 'write') {
41 this.addFailure(this.createFailure(leftSide.getStart(), leftSide.getWidth(), Rule.WRITE_FAILURE));
42 }
43 else {
44 this.addFailure(this.createFailure(leftSide.getStart(), leftSide.getWidth(), Rule.WRITELN_FAILURE));
45 }
46 }
47 }
48 }
49 _super.prototype.visitCallExpression.call(this, node);
50 };
51 return NoDocumentWriteWalker;
52})(ErrorTolerantWalker);
53//# sourceMappingURL=noDocumentWriteRule.js.map
\No newline at end of file