Skip to content

Commit

Permalink
move options handling into RuleWalker
Browse files Browse the repository at this point in the history
  • Loading branch information
ashwinr committed Sep 16, 2013
1 parent c413d3f commit 595349a
Show file tree
Hide file tree
Showing 7 changed files with 74 additions and 139 deletions.
67 changes: 27 additions & 40 deletions bin/tslint-cli.js
Original file line number Diff line number Diff line change
Expand Up @@ -26471,10 +26471,11 @@ var Lint;
(function (Lint) {
var RuleWalker = (function (_super) {
__extends(RuleWalker, _super);
function RuleWalker(syntaxTree) {
function RuleWalker(syntaxTree, options) {
_super.call(this);

this.failures = [];
this.options = options;
this.syntaxTree = syntaxTree;
this.limit = this.syntaxTree.sourceUnit().fullWidth();
}
Expand All @@ -26500,6 +26501,18 @@ var Lint;
return position;
};

RuleWalker.prototype.getOptions = function () {
return this.options;
};

RuleWalker.prototype.hasOption = function (option) {
if (this.options) {
return this.options.indexOf(option) !== -1;
} else {
return false;
}
};

RuleWalker.prototype.createFailure = function (start, width, failure) {
var from = (start > this.limit) ? this.limit : start;
var to = ((start + width) > this.limit) ? this.limit : (start + width);
Expand Down Expand Up @@ -26936,7 +26949,7 @@ var Lint;
_super.apply(this, arguments);
}
EqEqEqRule.prototype.apply = function (syntaxTree) {
return this.applyWithWalker(new ComparisonWalker(this.getOptions(), syntaxTree));
return this.applyWithWalker(new ComparisonWalker(syntaxTree, this.getOptions()));
};
EqEqEqRule.EQ_FAILURE_STRING = "== should be ===";
EqEqEqRule.NEQ_FAILURE_STRING = "!= should be !==";
Expand All @@ -26946,9 +26959,8 @@ var Lint;

var ComparisonWalker = (function (_super) {
__extends(ComparisonWalker, _super);
function ComparisonWalker(options, syntaxTree) {
_super.call(this, syntaxTree);
this.options = options;
function ComparisonWalker() {
_super.apply(this, arguments);
}
ComparisonWalker.prototype.visitBinaryExpression = function (node) {
var position = this.positionAfter(node.left);
Expand Down Expand Up @@ -26983,14 +26995,6 @@ var Lint;
this.addFailure(failure);
}
};

ComparisonWalker.prototype.hasOption = function (option) {
if (this.options) {
return this.options.indexOf(option) !== -1;
} else {
return false;
}
};
return ComparisonWalker;
})(Lint.RuleWalker);
})(Lint.Rules || (Lint.Rules = {}));
Expand Down Expand Up @@ -27497,7 +27501,7 @@ var Lint;
_super.apply(this, arguments);
}
NoConsoleRule.prototype.apply = function (syntaxTree) {
return this.applyWithWalker(new NoConsoleWalker(this.getOptions(), syntaxTree));
return this.applyWithWalker(new NoConsoleWalker(syntaxTree, this.getOptions()));
};
NoConsoleRule.FAILURE_STRING = "access forbidden to console property";
return NoConsoleRule;
Expand All @@ -27506,18 +27510,19 @@ var Lint;

var NoConsoleWalker = (function (_super) {
__extends(NoConsoleWalker, _super);
function NoConsoleWalker(options, syntaxTree) {
_super.call(this, syntaxTree);
this.options = options;
function NoConsoleWalker() {
_super.apply(this, arguments);
}
NoConsoleWalker.prototype.visitInvocationExpression = function (node) {
var options = this.getOptions();
var expression = node.expression;

if (expression.kind() === TypeScript.SyntaxKind.MemberAccessExpression && expression.childCount() >= 3) {
var firstToken = expression.firstToken();
var secondToken = expression.childAt(1);
var thirdToken = expression.childAt(2);

if (firstToken.text() === "console" && secondToken.kind() === TypeScript.SyntaxKind.DotToken && this.options.indexOf(thirdToken.fullText()) !== -1) {
if (firstToken.text() === "console" && secondToken.kind() === TypeScript.SyntaxKind.DotToken && options.indexOf(thirdToken.fullText()) !== -1) {
var position = this.position() + node.leadingTriviaWidth();
this.addFailure(this.createFailure(position, expression.width(), NoConsoleRule.FAILURE_STRING));
}
Expand Down Expand Up @@ -27711,9 +27716,8 @@ var Lint;

var BraceWalker = (function (_super) {
__extends(BraceWalker, _super);
function BraceWalker(syntaxTree, options) {
_super.call(this, syntaxTree);
this.options = options;
function BraceWalker() {
_super.apply(this, arguments);
}
BraceWalker.prototype.visitToken = function (token) {
var failure;
Expand Down Expand Up @@ -27764,14 +27768,6 @@ var Lint;
_super.prototype.visitCatchClause.call(this, node);
};

BraceWalker.prototype.hasOption = function (option) {
if (this.options) {
return this.options.indexOf(option) !== -1;
} else {
return false;
}
};

BraceWalker.prototype.getLine = function (position) {
return this.getSyntaxTree().lineMap().getLineAndCharacterFromPosition(position).line();
};
Expand Down Expand Up @@ -28186,9 +28182,8 @@ var Lint;

var WhitespaceWalker = (function (_super) {
__extends(WhitespaceWalker, _super);
function WhitespaceWalker(syntaxTree, options) {
_super.call(this, syntaxTree);
this.options = options;
function WhitespaceWalker() {
_super.apply(this, arguments);
}
WhitespaceWalker.prototype.visitToken = function (token) {
_super.prototype.visitToken.call(this, token);
Expand Down Expand Up @@ -28267,14 +28262,6 @@ var Lint;
return (kind === TypeScript.SyntaxKind.CommaToken || kind === TypeScript.SyntaxKind.SemicolonToken);
};

WhitespaceWalker.prototype.hasOption = function (option) {
if (this.options) {
return this.options.indexOf(option) !== -1;
} else {
return false;
}
};

WhitespaceWalker.prototype.checkForLeadingSpace = function (position, trivia) {
var failure = null;

Expand Down
67 changes: 27 additions & 40 deletions lib/tslint.js
Original file line number Diff line number Diff line change
Expand Up @@ -26471,10 +26471,11 @@ var Lint;
(function (Lint) {
var RuleWalker = (function (_super) {
__extends(RuleWalker, _super);
function RuleWalker(syntaxTree) {
function RuleWalker(syntaxTree, options) {
_super.call(this);

this.failures = [];
this.options = options;
this.syntaxTree = syntaxTree;
this.limit = this.syntaxTree.sourceUnit().fullWidth();
}
Expand All @@ -26500,6 +26501,18 @@ var Lint;
return position;
};

RuleWalker.prototype.getOptions = function () {
return this.options;
};

RuleWalker.prototype.hasOption = function (option) {
if (this.options) {
return this.options.indexOf(option) !== -1;
} else {
return false;
}
};

RuleWalker.prototype.createFailure = function (start, width, failure) {
var from = (start > this.limit) ? this.limit : start;
var to = ((start + width) > this.limit) ? this.limit : (start + width);
Expand Down Expand Up @@ -26936,7 +26949,7 @@ var Lint;
_super.apply(this, arguments);
}
EqEqEqRule.prototype.apply = function (syntaxTree) {
return this.applyWithWalker(new ComparisonWalker(this.getOptions(), syntaxTree));
return this.applyWithWalker(new ComparisonWalker(syntaxTree, this.getOptions()));
};
EqEqEqRule.EQ_FAILURE_STRING = "== should be ===";
EqEqEqRule.NEQ_FAILURE_STRING = "!= should be !==";
Expand All @@ -26946,9 +26959,8 @@ var Lint;

var ComparisonWalker = (function (_super) {
__extends(ComparisonWalker, _super);
function ComparisonWalker(options, syntaxTree) {
_super.call(this, syntaxTree);
this.options = options;
function ComparisonWalker() {
_super.apply(this, arguments);
}
ComparisonWalker.prototype.visitBinaryExpression = function (node) {
var position = this.positionAfter(node.left);
Expand Down Expand Up @@ -26983,14 +26995,6 @@ var Lint;
this.addFailure(failure);
}
};

ComparisonWalker.prototype.hasOption = function (option) {
if (this.options) {
return this.options.indexOf(option) !== -1;
} else {
return false;
}
};
return ComparisonWalker;
})(Lint.RuleWalker);
})(Lint.Rules || (Lint.Rules = {}));
Expand Down Expand Up @@ -27497,7 +27501,7 @@ var Lint;
_super.apply(this, arguments);
}
NoConsoleRule.prototype.apply = function (syntaxTree) {
return this.applyWithWalker(new NoConsoleWalker(this.getOptions(), syntaxTree));
return this.applyWithWalker(new NoConsoleWalker(syntaxTree, this.getOptions()));
};
NoConsoleRule.FAILURE_STRING = "access forbidden to console property";
return NoConsoleRule;
Expand All @@ -27506,18 +27510,19 @@ var Lint;

var NoConsoleWalker = (function (_super) {
__extends(NoConsoleWalker, _super);
function NoConsoleWalker(options, syntaxTree) {
_super.call(this, syntaxTree);
this.options = options;
function NoConsoleWalker() {
_super.apply(this, arguments);
}
NoConsoleWalker.prototype.visitInvocationExpression = function (node) {
var options = this.getOptions();
var expression = node.expression;

if (expression.kind() === TypeScript.SyntaxKind.MemberAccessExpression && expression.childCount() >= 3) {
var firstToken = expression.firstToken();
var secondToken = expression.childAt(1);
var thirdToken = expression.childAt(2);

if (firstToken.text() === "console" && secondToken.kind() === TypeScript.SyntaxKind.DotToken && this.options.indexOf(thirdToken.fullText()) !== -1) {
if (firstToken.text() === "console" && secondToken.kind() === TypeScript.SyntaxKind.DotToken && options.indexOf(thirdToken.fullText()) !== -1) {
var position = this.position() + node.leadingTriviaWidth();
this.addFailure(this.createFailure(position, expression.width(), NoConsoleRule.FAILURE_STRING));
}
Expand Down Expand Up @@ -27711,9 +27716,8 @@ var Lint;

var BraceWalker = (function (_super) {
__extends(BraceWalker, _super);
function BraceWalker(syntaxTree, options) {
_super.call(this, syntaxTree);
this.options = options;
function BraceWalker() {
_super.apply(this, arguments);
}
BraceWalker.prototype.visitToken = function (token) {
var failure;
Expand Down Expand Up @@ -27764,14 +27768,6 @@ var Lint;
_super.prototype.visitCatchClause.call(this, node);
};

BraceWalker.prototype.hasOption = function (option) {
if (this.options) {
return this.options.indexOf(option) !== -1;
} else {
return false;
}
};

BraceWalker.prototype.getLine = function (position) {
return this.getSyntaxTree().lineMap().getLineAndCharacterFromPosition(position).line();
};
Expand Down Expand Up @@ -28186,9 +28182,8 @@ var Lint;

var WhitespaceWalker = (function (_super) {
__extends(WhitespaceWalker, _super);
function WhitespaceWalker(syntaxTree, options) {
_super.call(this, syntaxTree);
this.options = options;
function WhitespaceWalker() {
_super.apply(this, arguments);
}
WhitespaceWalker.prototype.visitToken = function (token) {
_super.prototype.visitToken.call(this, token);
Expand Down Expand Up @@ -28267,14 +28262,6 @@ var Lint;
return (kind === TypeScript.SyntaxKind.CommaToken || kind === TypeScript.SyntaxKind.SemicolonToken);
};

WhitespaceWalker.prototype.hasOption = function (option) {
if (this.options) {
return this.options.indexOf(option) !== -1;
} else {
return false;
}
};

WhitespaceWalker.prototype.checkForLeadingSpace = function (position, trivia) {
var failure = null;

Expand Down
16 changes: 15 additions & 1 deletion src/language/ruleWalker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,15 @@ module Lint {
export class RuleWalker extends TypeScript.PositionTrackingWalker {
private limit: number;
private fileName: string;
private options: any;
private failures: RuleFailure[];
private syntaxTree: TypeScript.SyntaxTree;

constructor(syntaxTree: TypeScript.SyntaxTree) {
constructor(syntaxTree: TypeScript.SyntaxTree, options?: any) {
super();

this.failures = [];
this.options = options;
this.syntaxTree = syntaxTree;
this.limit = this.syntaxTree.sourceUnit().fullWidth();
}
Expand All @@ -53,6 +55,18 @@ module Lint {
return position;
}

public getOptions(): any {
return this.options;
}

public hasOption(option: string): boolean {
if (this.options) {
return this.options.indexOf(option) !== -1;
} else {
return false;
}
}

// create a failure at the given position
public createFailure(start: number, width: number, failure: string): Lint.RuleFailure {
var from = (start > this.limit) ? this.limit : start;
Expand Down
18 changes: 1 addition & 17 deletions src/rules/eqeqeqRule.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,18 +25,11 @@ module Lint.Rules {
public static NEQ_FAILURE_STRING = "!= should be !==";

public apply(syntaxTree: TypeScript.SyntaxTree): RuleFailure[] {
return this.applyWithWalker(new ComparisonWalker(this.getOptions(), syntaxTree));
return this.applyWithWalker(new ComparisonWalker(syntaxTree, this.getOptions()));
}
}

class ComparisonWalker extends Lint.RuleWalker {
private options: any;

constructor(options: any, syntaxTree: TypeScript.SyntaxTree) {
super(syntaxTree);
this.options = options;
}

public visitBinaryExpression(node: TypeScript.BinaryExpressionSyntax): void {
var position = this.positionAfter(node.left);

Expand Down Expand Up @@ -71,14 +64,5 @@ module Lint.Rules {
this.addFailure(failure);
}
}

private hasOption(option: string): boolean {
if (this.options) {
return this.options.indexOf(option) !== -1;
} else {
return false;
}
}
}

}
Loading

0 comments on commit 595349a

Please sign in to comment.