27 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			27 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
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) {
 | 
						|
                // tslint:disable-next-line:no-unnecessary-type-assertion
 | 
						|
                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);
 | 
						|
    }
 | 
						|
}
 |