Машинопись: как забанить подождать с Цлинтом - PullRequest
0 голосов
/ 28 декабря 2018

Можно ли запретить использование Typescript await с Tslint?Если нет, есть ли другие линтеры, которые могут это сделать?

1 Ответ

0 голосов
/ 28 декабря 2018

Вот решение с использованием пользовательского правила.Это работает для того, что мне нужно, по крайней мере.

Создайте файл (например, noAwaitRule.ts) и скомпилируйте с tsc.

import * as ts from "typescript";
import * as Lint from "tslint";

export class Rule extends Lint.Rules.AbstractRule {
    public static FAILURE_STRING = "await statement forbidden";

    public apply(sourceFile: ts.SourceFile): Lint.RuleFailure[] {
        return this.applyWithFunction(sourceFile, walk);
    }
}

function walk(ctx: Lint.WalkContext<void>) {
    return ts.forEachChild(ctx.sourceFile, function cb(node): void {
        if (node.kind === ts.SyntaxKind.AwaitExpression) {
            const { expression } = node as ts.AwaitExpression;
            const keywordStart = expression.pos - "await".length;
            ctx.addFailure(
                keywordStart,
                expression.pos,
                Rule.FAILURE_STRING,
                Lint.Replacement.deleteFromTo(keywordStart, expression.getStart(ctx.sourceFile)),
            );
        }
        return ts.forEachChild(node, cb);
    });
}

Если ваш файл находится в подкаталоге(например, tslint-rules), добавьте его в tslint.json rulesDirectory`:

"rulesDirectory": [
    ...,
    "tslint-rules"
  ],

Также в tslint.json добавьте новое правило, которое по соглашению именования становится no-await:

"rules": {
    ...,
    "no-await": true
}

Спасибо пользователю Amy за указание в этом направлении.

...