aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLeonid <logvinov.leon@gmail.com>2017-12-15 05:34:54 +0800
committerGitHub <noreply@github.com>2017-12-15 05:34:54 +0800
commitde8c445f961e1a09bed6a01397e36b96e0ea3d9a (patch)
tree14a3a89988f2eb283f0c80ca9d70e3a20296b98f
parenta0aa21103b51ad287de1579832a4a490ca90175a (diff)
parentc23d42fea5ca817a5cfb4f7b03ae723cb607f887 (diff)
downloaddexon-sol-tools-de8c445f961e1a09bed6a01397e36b96e0ea3d9a.tar
dexon-sol-tools-de8c445f961e1a09bed6a01397e36b96e0ea3d9a.tar.gz
dexon-sol-tools-de8c445f961e1a09bed6a01397e36b96e0ea3d9a.tar.bz2
dexon-sol-tools-de8c445f961e1a09bed6a01397e36b96e0ea3d9a.tar.lz
dexon-sol-tools-de8c445f961e1a09bed6a01397e36b96e0ea3d9a.tar.xz
dexon-sol-tools-de8c445f961e1a09bed6a01397e36b96e0ea3d9a.tar.zst
dexon-sol-tools-de8c445f961e1a09bed6a01397e36b96e0ea3d9a.zip
Merge pull request #265 from 0xProject/feature/custom-linter-rule
Implement first custom linter rule async-suffix
-rw-r--r--packages/dev-utils/src/blockchain_lifecycle.ts3
-rw-r--r--packages/subproviders/src/globals.d.ts1
-rw-r--r--packages/subproviders/src/subproviders/redundant_rpc.ts1
-rw-r--r--packages/tslint-config/package.json8
-rw-r--r--packages/tslint-config/rules/asyncSuffixRule.ts10
-rw-r--r--packages/tslint-config/rules/walkers/async_suffix.ts23
-rw-r--r--packages/tslint-config/tsconfig.json15
-rw-r--r--packages/tslint-config/tslint.json4
8 files changed, 61 insertions, 4 deletions
diff --git a/packages/dev-utils/src/blockchain_lifecycle.ts b/packages/dev-utils/src/blockchain_lifecycle.ts
index 19c5ac184..0e493eb48 100644
--- a/packages/dev-utils/src/blockchain_lifecycle.ts
+++ b/packages/dev-utils/src/blockchain_lifecycle.ts
@@ -20,7 +20,4 @@ export class BlockchainLifecycle {
throw new Error(`Snapshot with id #${snapshotId} failed to revert`);
}
}
- public async mineABlock(): Promise<void> {
- await this.rpc.mineBlockAsync();
- }
}
diff --git a/packages/subproviders/src/globals.d.ts b/packages/subproviders/src/globals.d.ts
index 400bbef5b..adef23806 100644
--- a/packages/subproviders/src/globals.d.ts
+++ b/packages/subproviders/src/globals.d.ts
@@ -5,6 +5,7 @@ declare module 'es6-promisify';
// tslint:disable:max-classes-per-file
// tslint:disable:class-name
+// tslint:disable:async-suffix
// tslint:disable:completed-docs
// Ethereumjs-tx declarations
diff --git a/packages/subproviders/src/subproviders/redundant_rpc.ts b/packages/subproviders/src/subproviders/redundant_rpc.ts
index 80462bbfb..f688061ea 100644
--- a/packages/subproviders/src/subproviders/redundant_rpc.ts
+++ b/packages/subproviders/src/subproviders/redundant_rpc.ts
@@ -33,6 +33,7 @@ export class RedundantRPCSubprovider extends Subprovider {
});
});
}
+ // tslint:disable-next-line:async-suffix
public async handleRequest(payload: JSONRPCPayload, next: () => void,
end: (err: Error|null, data?: any) => void): Promise<void> {
const rpcsCopy = this.rpcs.slice();
diff --git a/packages/tslint-config/package.json b/packages/tslint-config/package.json
index a4b5d4466..3b320e774 100644
--- a/packages/tslint-config/package.json
+++ b/packages/tslint-config/package.json
@@ -3,6 +3,11 @@
"version": "0.2.1",
"description": "Lint rules related to 0xProject for TSLint",
"main": "tslint.json",
+ "scripts": {
+ "build": "tsc",
+ "clean": "shx rm -rf lib",
+ "lint": "tslint --project . 'rules/**/*.ts'"
+ },
"files": [
"tslint.js",
"README.md",
@@ -29,10 +34,13 @@
},
"homepage": "https://github.com/0xProject/0x.js/packages/tslint-config/README.md",
"devDependencies": {
+ "@types/lodash": "^4.14.86",
+ "shx": "^0.2.2",
"tslint": "5.8.0",
"typescript": "~2.6.1"
},
"dependencies": {
+ "lodash": "^4.17.4",
"tslint-react": "^3.2.0"
}
}
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);
+ }
+}
diff --git a/packages/tslint-config/tsconfig.json b/packages/tslint-config/tsconfig.json
new file mode 100644
index 000000000..7661a9d07
--- /dev/null
+++ b/packages/tslint-config/tsconfig.json
@@ -0,0 +1,15 @@
+{
+ "compilerOptions": {
+ "module": "commonjs",
+ "target": "es5",
+ "lib": [ "es2017", "dom"],
+ "outDir": "lib",
+ "sourceMap": true,
+ "declaration": true,
+ "noImplicitAny": true,
+ "strictNullChecks": true
+ },
+ "include": [
+ "./rules/**/*"
+ ]
+}
diff --git a/packages/tslint-config/tslint.json b/packages/tslint-config/tslint.json
index 0921a3954..d3ee51a63 100644
--- a/packages/tslint-config/tslint.json
+++ b/packages/tslint-config/tslint.json
@@ -7,6 +7,7 @@
"adjacent-overload-signatures": true,
"arrow-parens": [true, "ban-single-arg-parens"],
"arrow-return-shorthand": true,
+ "async-suffix": true,
"await-promise": true,
"binary-expression-operand-order": true,
"callable-types": true,
@@ -101,5 +102,6 @@
"jsx-self-close": true,
"jsx-wrap-multiline": false,
"jsx-no-bind": false
- }
+ },
+ "rulesDirectory": "lib"
}