visual studio code - Hur kan jag använda en egen tslint-regel skriven i TypeScript med vscode-tslint utan att kompilera till JS?
Jag har en anpassad regel skriven för TSlint i TypeScript som jag kan köra med ts-node i ett skript som jag använder på min Linux-VM:
#!/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
Detta gör det möjligt för tslint att köra TS-regeln direkt utan att först kompilera, och det fungerar.
Problemet är att ms-vscode.vscode-typescript-tslint-plugin inte plockar upp den regeln även om den uttryckligen är aktiverad i tsconfig.json-reglerna. Jag kör VSCode på en separat maskin med en Windows-värd och monterar filsystemet via Samba från Linux-VM:en. Andra regler i filen respekteras och visas för installerade och inbyggda regler, som no-console osv.
Hur kan jag få information om varför regeln inte tillämpas? Finns det något jag behöver konfigurera i pluginet för att få detta att fungera?
Svar #1
Tyvärr stöds detta inte av VScode/vscode-typescript-tslint-plugin och verkar inte heller vara på deras agenda.
Här är ett stängt ärende på deras GitHub som frågar efter denna funktion.
Du kan naturligtvis först kompilera din regel till JS, men det är inte vad du frågade efter.
Svar #2
Här är vad jag tror kan vara relaterat till problemet.
Låt oss namnge regel-filen
noImportsRule.ts. Regler refereras till itslint.jsonmed deras kebab-cased identifierare, så"no-imports": trueskulle konfigurera regeln.Kärnregler kan inte åsidosättas med en anpassad implementation.
Anpassade regler kan också ta emot alternativ precis som kärnregler (hämtas via
this.getOptions())Från och med TSLint v5.7.0 behöver du inte längre kompilera dina egna regler innan du använder dem. Du behöver tala om för node.js hur man laddar .ts-filer, till exempel genom att använda ts-node:
Viktiga konventioner:
- Regelidentifierare är alltid kebab-case.
- Regelfiler är alltid skrivna med camel-case (
camelCasedRule.ts). - Regelfiler måste innehålla suffixet
Rule. - Den exporterade klassen måste alltid namnges Rule och ärva från
Lint.Rules.AbstractRule
för alla detaljer