Implement first custom linter rule async-suffix

This commit is contained in:
Leonid Logvinov
2017-12-14 21:49:19 +01:00
parent a0aa21103b
commit c23d42fea5
8 changed files with 61 additions and 4 deletions

View File

@@ -0,0 +1,23 @@
import * as _ from 'lodash';
import * as Lint from 'tslint';
import * as ts from 'typescript';
export class AsyncSuffixWalker extends Lint.RuleWalker {
public static FAILURE_STRING = 'async functions must have an Async suffix';
public visitMethodDeclaration(node: ts.MethodDeclaration): void {
const methodNameNode = node.name;
const methodName = methodNameNode.getText();
if (!_.isUndefined(node.type)) {
if (node.type.kind === ts.SyntaxKind.TypeReference) {
const returnTypeName = (node.type as ts.TypeReferenceNode).typeName.getText();
if (returnTypeName === 'Promise' && !methodName.endsWith('Async')) {
const failure = this.createFailure(
methodNameNode.getStart(), methodNameNode.getWidth(), AsyncSuffixWalker.FAILURE_STRING,
);
this.addFailure(failure);
}
}
}
super.visitMethodDeclaration(node);
}
}