打字稿:如何禁止使用 Tslint 等待?
Typescript: How to ban await with Tslint?
是否可以禁止在 Tslint 中使用 Typescript await
?如果没有,是否有其他 linters 可以做到这一点?
这是一个使用自定义规则的解决方案。它至少可以满足我的需要。
创建一个文件(例如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 为我指出这个方向。
是否可以禁止在 Tslint 中使用 Typescript await
?如果没有,是否有其他 linters 可以做到这一点?
这是一个使用自定义规则的解决方案。它至少可以满足我的需要。
创建一个文件(例如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 为我指出这个方向。