![](/img/trans.png)
[英]how do I force my custom tslint rule to use the same version of the typescript module as the one tslint is using
[英]How can I use a custom tslint rule written in TypeScript with vscode-tslint without compiling to JS?
我在TypeScript中為TSlint編寫了一個自定義規則,我可以在我在Linux VM上使用的腳本中使用ts-node
運行:
#!/bin/bash
set -e
ROOT_DIR=$(dirname $(dirname $0))
cd $ROOT_DIR
find "$ROOT_DIR/src" -name "*.ts" -o -name "*.tsx" | xargs $(yarn bin)/ts-node $(yarn bin)/tslint
這使得tslint
可以直接運行TS規則而無需先編譯,它確實有效。
問題是ms-vscode.vscode-typescript-tslint-plugin
沒有提取該規則,即使它在tsconfig.json
規則中明確啟用了。 我在一台帶有Windows主機的獨立機器上運行VSCode,通過Linux VM提供的Samba安裝文件系統。 文件中的其他規則正在被遵守並顯示已安裝和內置規則,如no-console
等。
如何獲取有關未應用規則的原因的信息? 我需要在插件中配置一些東西來使其工作嗎?
這是我認為可能與問題有關的內容。
讓我們將規則文件命名為noImportsRule.ts
。 tslint.json
中引用了tslint.json
- tslint.json
標識符的規則,因此"no-imports": true
將配置規則。
自定義實現不能覆蓋核心規則。
自定義規則也可以像核心規則一樣接受選項(通過this.getOptions())
檢索this.getOptions())
從TSLint v5.7.0開始,您不再需要在使用它們之前編譯自定義規則。 你需要告訴node.js如何加載.ts文件,例如使用ts-node:
重要約定:
camelCasedRule.ts
)。 Rule
。 Lint.Rules.AbstractRule
擴展 了解所有細節
不幸的是,VScode / vscode-typescript-tslint-plugin不支持這一點,似乎沒有列入他們的議程。
您當然可以先將規則編譯為JS,但這不是您要求的。
我開發的黑客是這樣的:
./rules
下,目錄如下所示: rules/
|- registerRule.js
|- oneRule.ts
|- twoRule.ts
oneRule.ts
和twoRule.ts
是用twoRule.ts
編寫的實際規則,但registerRule.js
是一個“間諜”。 此間諜規則的目的只是讓tslint
實例獲取並將ts-node/register
注入節點運行時。 // registerRule.js
require('ts-node/register')
const Lint = require('tslint')
class Rule extends Lint.Rules.AbstractRule {
apply(sourceFile) {
return []
}
}
module.exports.Rule = Rule
tslint.json
{
"rulesDirectory": "./rules",
"rules": {
"register": true,
"one": true,
"two": true
}
}
我測試過了。 這個hack會教vscode tslint插件來理解.ts
自定義規則。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.