Skip to content

Commit

Permalink
feat(getSlidingPercent rule): (#19)
Browse files Browse the repository at this point in the history
* feat(getSlidingPercent rule):

* fix(rules): remove leftover console log
  • Loading branch information
mhartington authored and imhoffd committed Jun 29, 2018
1 parent a71d8bc commit 2617d26
Show file tree
Hide file tree
Showing 2 changed files with 68 additions and 0 deletions.
30 changes: 30 additions & 0 deletions src/ionItemOptionMethodGetSlidingPercentRenamedRule.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import * as Lint from 'tslint';
import * as ts from 'typescript';
export const ruleName = 'ion-item-option-method-get-sliding-percent-renamed';
export const ruleMessage = '"getSlidingPercent" has been renamed to "getSlidingRatio"';

class GetSlidingPercentRenamedWalker extends Lint.RuleWalker {
visitCallExpression(node: ts.CallExpression) {
const expression = node.expression as any;
if (expression.name && expression.name.text === 'getSlidingPercent') {
const replacement = new Lint.Replacement(expression.name.getStart(), expression.name.getWidth(), 'getSlidingRatio');
this.addFailure(this.createFailure(expression.name.getStart(), expression.name.getWidth(), ruleMessage, replacement));
}
}
}

export class Rule extends Lint.Rules.AbstractRule {
public static metadata: Lint.IRuleMetadata = {
ruleName: ruleName,
type: 'functionality',
description: 'getSlidingPercent is now called getSlidingRatio.',
options: null,
optionsDescription: 'Not configurable.',
typescriptOnly: true,
hasFix: true
};

public apply(sourceFile: ts.SourceFile): Lint.RuleFailure[] {
return this.applyWithWalker(new GetSlidingPercentRenamedWalker(sourceFile, this.getOptions()));
}
}
38 changes: 38 additions & 0 deletions test/ionItemOptionMethodGetSlidingPercentRenamed.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import { expect } from 'chai';
import { ruleName, ruleMessage } from '../src/ionItemOptionMethodGetSlidingPercentRenamedRule';
import { assertAnnotated, assertSuccess } from './testHelper';

describe(ruleName, () => {
describe('success', () => {
it('should work with new method name', () => {
let source = `
class DoSomething{
constructor(){}
getRatio(item: ItemSliding){
return item.getSlidingRatio();
}
}
`;
assertSuccess(ruleName, source);
});
});

describe('failure', () => {
it('should fail when using getSlidingPercent', () => {
let source = `
class DoSomething{
constructor(){}
getRatio(item: ItemSliding){
return item.getSlidingPercent();
~~~~~~~~~~~~~~~~~
}
}
`;
assertAnnotated({
ruleName,
message: ruleMessage,
source
});
});
});
});

0 comments on commit 2617d26

Please sign in to comment.