TSLint, кажется, не применяет правило стоимости? - PullRequest
0 голосов
/ 13 октября 2018

Итак, я пытался заставить работать правила костюма 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.

Любая идея, почему это ведет себя так, как это происходит?Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 10 июня 2019

Я считаю, что вам нужно зарегистрировать синтаксический анализ 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;это должно решить проблему.

...