diff options
author | Leonid Logvinov <logvinov.leon@gmail.com> | 2017-12-15 04:49:19 +0800 |
---|---|---|
committer | Leonid Logvinov <logvinov.leon@gmail.com> | 2017-12-15 04:49:19 +0800 |
commit | c23d42fea5ca817a5cfb4f7b03ae723cb607f887 (patch) | |
tree | 14a3a89988f2eb283f0c80ca9d70e3a20296b98f /packages/tslint-config/rules | |
parent | a0aa21103b51ad287de1579832a4a490ca90175a (diff) | |
download | dexon-0x-contracts-c23d42fea5ca817a5cfb4f7b03ae723cb607f887.tar dexon-0x-contracts-c23d42fea5ca817a5cfb4f7b03ae723cb607f887.tar.gz dexon-0x-contracts-c23d42fea5ca817a5cfb4f7b03ae723cb607f887.tar.bz2 dexon-0x-contracts-c23d42fea5ca817a5cfb4f7b03ae723cb607f887.tar.lz dexon-0x-contracts-c23d42fea5ca817a5cfb4f7b03ae723cb607f887.tar.xz dexon-0x-contracts-c23d42fea5ca817a5cfb4f7b03ae723cb607f887.tar.zst dexon-0x-contracts-c23d42fea5ca817a5cfb4f7b03ae723cb607f887.zip |
Implement first custom linter rule async-suffix
Diffstat (limited to 'packages/tslint-config/rules')
-rw-r--r-- | packages/tslint-config/rules/asyncSuffixRule.ts | 10 | ||||
-rw-r--r-- | packages/tslint-config/rules/walkers/async_suffix.ts | 23 |
2 files changed, 33 insertions, 0 deletions
diff --git a/packages/tslint-config/rules/asyncSuffixRule.ts b/packages/tslint-config/rules/asyncSuffixRule.ts new file mode 100644 index 000000000..c6ae5189c --- /dev/null +++ b/packages/tslint-config/rules/asyncSuffixRule.ts @@ -0,0 +1,10 @@ +import * as Lint from 'tslint'; +import * as ts from 'typescript'; + +import {AsyncSuffixWalker} from './walkers/async_suffix'; + +export class Rule extends Lint.Rules.AbstractRule { + public apply(sourceFile: ts.SourceFile): Lint.RuleFailure[] { + return this.applyWithWalker(new AsyncSuffixWalker(sourceFile, this.getOptions())); + } +} diff --git a/packages/tslint-config/rules/walkers/async_suffix.ts b/packages/tslint-config/rules/walkers/async_suffix.ts new file mode 100644 index 000000000..0c89bd99f --- /dev/null +++ b/packages/tslint-config/rules/walkers/async_suffix.ts @@ -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); + } +} |