diff options
author | Hsuan Lee <hsuan@cobinhood.com> | 2019-01-19 18:42:04 +0800 |
---|---|---|
committer | Hsuan Lee <hsuan@cobinhood.com> | 2019-01-19 18:42:04 +0800 |
commit | 7ae38906926dc09bc10670c361af0d2bf0050426 (patch) | |
tree | 5fb10ae366b987db09e4ddb4bc3ba0f75404ad08 /packages/tslint-config/rules/customNoMagicNumbersRule.ts | |
parent | b5fd3c72a08aaa6957917d74c333387a16edf66b (diff) | |
download | dexon-sol-tools-7ae38906926dc09bc10670c361af0d2bf0050426.tar.gz dexon-sol-tools-7ae38906926dc09bc10670c361af0d2bf0050426.tar.zst dexon-sol-tools-7ae38906926dc09bc10670c361af0d2bf0050426.zip |
Update dependency packages
Diffstat (limited to 'packages/tslint-config/rules/customNoMagicNumbersRule.ts')
-rw-r--r-- | packages/tslint-config/rules/customNoMagicNumbersRule.ts | 79 |
1 files changed, 0 insertions, 79 deletions
diff --git a/packages/tslint-config/rules/customNoMagicNumbersRule.ts b/packages/tslint-config/rules/customNoMagicNumbersRule.ts deleted file mode 100644 index cb124f738..000000000 --- a/packages/tslint-config/rules/customNoMagicNumbersRule.ts +++ /dev/null @@ -1,79 +0,0 @@ -import * as Lint from 'tslint'; -import { isPrefixUnaryExpression } from 'tsutils'; -import * as ts from 'typescript'; - -// tslint:disable:no-unnecessary-type-assertion -/** - * A modified version of the no-magic-numbers rule that allows for magic numbers - * when instantiating a BigNumber instance. - * E.g We want to be able to write: - * const amount = new BigNumber(5); - * Original source: https://github.com/palantir/tslint/blob/42b058a6baa688f8be8558b277eb056c3ff79818/src/rules/noMagicNumbersRule.ts - */ -export class Rule extends Lint.Rules.AbstractRule { - public static ALLOWED_NODES = new Set<ts.SyntaxKind>([ - ts.SyntaxKind.ExportAssignment, - ts.SyntaxKind.FirstAssignment, - ts.SyntaxKind.LastAssignment, - ts.SyntaxKind.PropertyAssignment, - ts.SyntaxKind.ShorthandPropertyAssignment, - ts.SyntaxKind.VariableDeclaration, - ts.SyntaxKind.VariableDeclarationList, - ts.SyntaxKind.EnumMember, - ts.SyntaxKind.PropertyDeclaration, - ts.SyntaxKind.Parameter, - ]); - - public static DEFAULT_ALLOWED = [-1, 0, 1]; - - public apply(sourceFile: ts.SourceFile): Lint.RuleFailure[] { - const allowedNumbers = this.ruleArguments.length > 0 ? this.ruleArguments : Rule.DEFAULT_ALLOWED; - return this.applyWithWalker( - // tslint:disable-next-line:no-inferred-empty-object-type - new CustomNoMagicNumbersWalker(sourceFile, this.ruleName, new Set(allowedNumbers.map(String))), - ); - } -} - -// tslint:disable-next-line:max-classes-per-file -class CustomNoMagicNumbersWalker extends Lint.AbstractWalker<Set<string>> { - public static FAILURE_STRING = "'magic numbers' are not allowed"; - private static _isNegativeNumberLiteral( - node: ts.Node, - ): node is ts.PrefixUnaryExpression & { operand: ts.NumericLiteral } { - return ( - isPrefixUnaryExpression(node) && - node.operator === ts.SyntaxKind.MinusToken && - node.operand.kind === ts.SyntaxKind.NumericLiteral - ); - } - public walk(sourceFile: ts.SourceFile): void { - const cb = (node: ts.Node): void => { - if (node.kind === ts.SyntaxKind.NumericLiteral) { - return this.checkNumericLiteral(node, (node as ts.NumericLiteral).text); - } - if (CustomNoMagicNumbersWalker._isNegativeNumberLiteral(node)) { - return this.checkNumericLiteral(node, `-${(node.operand as ts.NumericLiteral).text}`); - } - return ts.forEachChild(node, cb); - }; - return ts.forEachChild(sourceFile, cb); - } - - // tslint:disable:no-non-null-assertion - // tslint:disable-next-line:underscore-private-and-protected - private checkNumericLiteral(node: ts.Node, num: string): void { - if (!Rule.ALLOWED_NODES.has(node.parent!.kind) && !this.options.has(num)) { - if (node.parent!.kind === ts.SyntaxKind.NewExpression) { - const className = (node.parent! as any).expression.escapedText; - const BIG_NUMBER_NEW_EXPRESSION = 'BigNumber'; - if (className === BIG_NUMBER_NEW_EXPRESSION) { - return; // noop - } - } - this.addFailureAtNode(node, CustomNoMagicNumbersWalker.FAILURE_STRING); - } - } - // tslint:enable:no-non-null-assertion -} -// tslint:enable:no-unnecessary-type-assertion |