gpt4 book ai didi

angular - 如何使用 tslint 在特定文件中导入黑名单

转载 作者:行者123 更新时间:2023-12-01 15:30:54 30 4
gpt4 key购买 nike

TSLint 是否支持将特定文件中的导入列入黑名单?如果是的话我该如何配置它?

最佳答案

我认为没有默认规则可以实现这一点。但 TSLint 可以使用自定义规则进行扩展。这是关于如何创建、包含和使用自定义规则的很好的教程 https://palantir.github.io/tslint/develop/custom-rules/ .

我们可以从现有的 import-blacklist 规则开始并扩展它。原始来源可以在importBlacklistRule.ts找到

我们只需要扩展选项以包含文件名,并且必须检查文件名。这是完整的列表:

import * as Path from "path";
import * as Lint from "tslint";
import { findImports, ImportKind } from "tsutils";
import * as TS from "typescript";

interface Options {
imports: string[];
files: string[];
}

export class Rule extends Lint.Rules.AbstractRule {
public static FAILURE_STRING =
"This import is blacklisted, import a submodule instead";

public apply(sourceFile: TS.SourceFile): Lint.RuleFailure[] {
return this.applyWithFunction(sourceFile, walk, this
.ruleArguments[0] as Options);
}
}

const walk = (ctx: Lint.WalkContext<Options>) => {
if (ctx.options.files === undefined || ctx.options.imports === undefined) {
return;
}

const fileName = Path.basename(ctx.sourceFile.fileName); // Strip off path
if (ctx.options.files.indexOf(fileName) === -1) {
// Could be extended to test for a regex.
return;
}

for (const name of findImports(ctx.sourceFile, ImportKind.All)) {
if (ctx.options.imports.indexOf(name.text) !== -1) {
ctx.addFailure(
name.getStart(ctx.sourceFile) + 1,
name.end - 1,
Rule.FAILURE_STRING
);
}
}
};

在上面的示例中,我将 import-blacklist 规则精简到其要点,并添加了对文件名的检查。

const fileName = Path.basename(ctx.sourceFile.fileName); // Strip off path
if (ctx.options.files.indexOf(fileName) === -1) {
// Could be extended to test for a regex.
return;
}

在示例中,我们仅检查options.files中是否必须存在不带路径的文件名。您可以扩展此逻辑来检查正则表达式或任何适合您需求的内容。

在包含此规则时,您必须指定要检查的文件名以及禁止的导入。

"custom-import-blacklist": [
true,
{
"files": ["Index.ts"],
"imports": ["xxx"]
}
]

关于angular - 如何使用 tslint 在特定文件中导入黑名单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51742983/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com