TSLint, кажется, не применяет правило стоимости?
Итак, я пытался заставить работать правила костюма TSLint, но независимо от того, что я делаю, я не могу заставить его работать.
Я написал это пользовательское правило, скомпилировал его и поместил в соответствующую папку:
//filename is interfacePascalCaseAndPrefixRule.ts
import * as Lint from "tslint";
import * as ts from "typescript";
export class Rule extends Lint.Rules.AbstractRule {
static FAILURE_STRING =
"Interfaces have to be Pascal cased and prefixed with an I (first two letters are capitalized).";
public apply(sourceFile: ts.SourceFile): Lint.RuleFailure[] {
return this.applyWithWalker(new Walk(sourceFile, this.getOptions()));
}
}
class Walk extends Lint.RuleWalker {
protected visitInterfaceDeclaration(node: ts.InterfaceDeclaration) {
this.addFailureAtNode(node, Rule.FAILURE_STRING);
super.visitInterfaceDeclaration(node);
}
}
Насколько я понимаю, это должно вызывать ошибку для каждого объявления интерфейса, которое он находит. (Не обращайте внимания на тот факт, что это бессмысленно и имя файла не соответствует предполагаемой функции, это для целей чистого тестирования.)
Я поместил полученный interfacePascalCaseAndPrefixRule.ts в папку rules/ проекта TypeScript. tslint.json
похоже:
{
"defaultSeverity": "error",
"rulesDirectory": [
"rules/"
],
"rules": {
"interface-pascal-case-and-prefix": true, // <-- This is the costum rule that doesn't do shit
"class-name": true, //Enforces pascal case for classes eg. "MyClass"
"indent": [
true,
"spaces",
4
], //4 spaces as indents (is probably broken)
"align": [
true,
"statements",
"members"
], //aligns things. (might be broken as well)
"encoding": true //encoding is UTF-8
}
}
tsconfig.json
похоже:
{
"compileOnSave": true,
"compilerOptions": {
"outDir": "dist",
"module": "commonjs",
"target": "es6",
"sourceMap": true,
"strictNullChecks": true
},
"include": ["src/**/*"]
}
И когда я запускаю tslint, буквально ничего не происходит (хотя это определенно должно вызывать некоторые ошибки). Вывод консоли выглядит так:
:~/Desktop/bubblesbot$ tslint -p .
:~/Desktop/bubblesbot$
TSLint, кажется, в рабочих условиях, так как он добавляет кучу ошибок, когда я добавляю "extends": "tslint:recommended"
к моему tslint.json
,
Реализация для правила, похоже, тоже найдена, так как возникает ошибка, когда я намеренно ошибаюсь в tslint.json
файл.
Есть идеи, почему это так? Любая помощь будет принята с благодарностью.
0 ответов
Я считаю, что вам нужно зарегистрировать парсинг TypeScript для node
, поэтому перед вызовом tslint
, установить ts-node
сначала и измените вызов на:
# if using yarn
$(yarn bin)/ts-node $(yarn bin)/tslint -p .
# if using npm
$(npm bin)/ts-node $(yarn bin)/tslint -p .
Я также не мог загрузить правила TS, если они сначала не были скомпилированы в JS; это должно решить проблему.