`Tslint --fix` 不会自动修复,而是会生成 lint 问题作为控制台错误
Posted
技术标签:
【中文标题】`Tslint --fix` 不会自动修复,而是会生成 lint 问题作为控制台错误【英文标题】:`Tslint --fix` does not autofix but instead generates lint problems as console errors 【发布时间】:2018-01-23 00:45:07 【问题描述】:我正在使用the Angular starter kit
我正在尝试让 tslint 使用 --fix 标志自动修复我的所有 lint 问题。
我正在运行脚本:
npm run tslint --fix src/**/*.ts
它只会产生与我在 tslint
中已经被告知的相同错误,而不是自动修复它:
控制台输出:
ERROR: src/app/app-routing.module.ts[10, 5]: comment must start with a space
ERROR: src/app/app-routing.module.ts[2, 20]: Too many spaces before 'from'
我是否遗漏了一些允许它实施更改的东西?
我的版本是:
"tslint": "^5.6.0"
"codelyzer": "^3.1.2"
问题:如何让 tslint 自动修复我的 lint 错误?
【问题讨论】:
【参考方案1】:不幸的是,并非所有 linting 违规都是可自动修复的。您可以通过查找Has Fixer
标签看到which rules are auto-fixable here。
我的猜测是“评论必须以空格开头”由comment-format
rule 管理,它不能自动修复。
我不确定是哪个规则导致了您的第二个错误,但它很可能也无法自动修复。
这是一个 sn-p,您可以运行 tslint --fix
来验证某些违规行为是否已修复,而另一些则没有。
//no var keyword (comment does not start with space)
var x: string = 'x';
console.log(x);
// array-type
let y: String[] = [];
console.log(y);
// ban-single-arg-parens
['1', '2'].filter((arg) =>
console.log(arg);
);
// semicolon
let z: string = ''
console.log(z);
// no unused variable
let a: string = '';
// trailing comma
let list = ['1', '2', ];
// missing trailing comma
let obj = [
1,
2
];
检查上述文件时要包含的规则:
"semicolon": [true, "always"],
"trailing-comma": [true, "multiline": "always", "singleline": "never"],
"array-type": [true, "array-generic"],
"arrow-parens": [true, "ban-single-arg-parens"],
很容易认为所有空白错误都可以自动修复,也许它们应该是。可悲的是,他们不是。
【讨论】:
我认为最好的方法是制作第二个 linting 文件,其中只包含您想要自动修复的规则。制作一个自定义 npm 命令npm run lint-fix
,它只使用专门的 lint 文件运行 tslint --fix。您可以使用新命令进行自动修复,并且可以像平常一样使用良好的 ol ng lint
。【参考方案2】:
将库 tslint
和 codelyzer
更新到最新版本。
然后使用这个命令:
tslint --fix src/**/*.ts -t verbose
不使用npm run
完成后,它将向您显示无法修复的问题,因此您必须手动修复它。
您也可以将其添加到package.json
中的scripts
,如下所示:
"lint-fix": "tslint --fix src/**/*.ts -t verbose"
【讨论】:
以上是关于`Tslint --fix` 不会自动修复,而是会生成 lint 问题作为控制台错误的主要内容,如果未能解决你的问题,请参考以下文章