1 | var __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 | };
|
7 | var ErrorTolerantWalker = require('./utils/ErrorTolerantWalker');
|
8 | var SyntaxKind = require('./utils/SyntaxKind');
|
9 | var Rule = (function (_super) {
|
10 | __extends(Rule, _super);
|
11 | function Rule() {
|
12 | _super.apply(this, arguments);
|
13 | }
|
14 | Rule.prototype.apply = function (sourceFile) {
|
15 | return this.applyWithWalker(new NoDuplicateCaseRuleWalker(sourceFile, this.getOptions()));
|
16 | };
|
17 | Rule.FAILURE_STRING = 'Duplicate case found in switch statement: ';
|
18 | return Rule;
|
19 | })(Lint.Rules.AbstractRule);
|
20 | exports.Rule = Rule;
|
21 | var NoDuplicateCaseRuleWalker = (function (_super) {
|
22 | __extends(NoDuplicateCaseRuleWalker, _super);
|
23 | function NoDuplicateCaseRuleWalker() {
|
24 | _super.apply(this, arguments);
|
25 | }
|
26 | NoDuplicateCaseRuleWalker.prototype.visitSwitchStatement = function (node) {
|
27 | var _this = this;
|
28 | var seenLabels = [];
|
29 | node.caseBlock.clauses.forEach(function (clauseOrDefault) {
|
30 | if (clauseOrDefault.kind === SyntaxKind.current().CaseClause) {
|
31 | var clause = clauseOrDefault;
|
32 | if (clause.expression != null) {
|
33 | var caseText = clause.expression.getText();
|
34 | if (seenLabels.indexOf(caseText) > -1) {
|
35 | _this.addFailure(_this.createFailure(clause.getStart(), clause.getWidth(), Rule.FAILURE_STRING + caseText));
|
36 | }
|
37 | else {
|
38 | seenLabels.push(caseText);
|
39 | }
|
40 | }
|
41 | }
|
42 | });
|
43 | _super.prototype.visitSwitchStatement.call(this, node);
|
44 | };
|
45 | return NoDuplicateCaseRuleWalker;
|
46 | })(ErrorTolerantWalker);
|
47 |
|
\ | No newline at end of file |