Skip to content

Commit 2617d26

Browse files
mhartingtonimhoffd
authored andcommitted
feat(getSlidingPercent rule): (#19)
* feat(getSlidingPercent rule): * fix(rules): remove leftover console log
1 parent a71d8bc commit 2617d26

File tree

2 files changed

+68
-0
lines changed

2 files changed

+68
-0
lines changed
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import * as Lint from 'tslint';
2+
import * as ts from 'typescript';
3+
export const ruleName = 'ion-item-option-method-get-sliding-percent-renamed';
4+
export const ruleMessage = '"getSlidingPercent" has been renamed to "getSlidingRatio"';
5+
6+
class GetSlidingPercentRenamedWalker extends Lint.RuleWalker {
7+
visitCallExpression(node: ts.CallExpression) {
8+
const expression = node.expression as any;
9+
if (expression.name && expression.name.text === 'getSlidingPercent') {
10+
const replacement = new Lint.Replacement(expression.name.getStart(), expression.name.getWidth(), 'getSlidingRatio');
11+
this.addFailure(this.createFailure(expression.name.getStart(), expression.name.getWidth(), ruleMessage, replacement));
12+
}
13+
}
14+
}
15+
16+
export class Rule extends Lint.Rules.AbstractRule {
17+
public static metadata: Lint.IRuleMetadata = {
18+
ruleName: ruleName,
19+
type: 'functionality',
20+
description: 'getSlidingPercent is now called getSlidingRatio.',
21+
options: null,
22+
optionsDescription: 'Not configurable.',
23+
typescriptOnly: true,
24+
hasFix: true
25+
};
26+
27+
public apply(sourceFile: ts.SourceFile): Lint.RuleFailure[] {
28+
return this.applyWithWalker(new GetSlidingPercentRenamedWalker(sourceFile, this.getOptions()));
29+
}
30+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import { expect } from 'chai';
2+
import { ruleName, ruleMessage } from '../src/ionItemOptionMethodGetSlidingPercentRenamedRule';
3+
import { assertAnnotated, assertSuccess } from './testHelper';
4+
5+
describe(ruleName, () => {
6+
describe('success', () => {
7+
it('should work with new method name', () => {
8+
let source = `
9+
class DoSomething{
10+
constructor(){}
11+
getRatio(item: ItemSliding){
12+
return item.getSlidingRatio();
13+
}
14+
}
15+
`;
16+
assertSuccess(ruleName, source);
17+
});
18+
});
19+
20+
describe('failure', () => {
21+
it('should fail when using getSlidingPercent', () => {
22+
let source = `
23+
class DoSomething{
24+
constructor(){}
25+
getRatio(item: ItemSliding){
26+
return item.getSlidingPercent();
27+
~~~~~~~~~~~~~~~~~
28+
}
29+
}
30+
`;
31+
assertAnnotated({
32+
ruleName,
33+
message: ruleMessage,
34+
source
35+
});
36+
});
37+
});
38+
});

0 commit comments

Comments
 (0)