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; это должно решить проблему.

Другие вопросы по тегам