2015-11-04 7 views
1

У меня есть файл tslint.json в моем каталоге решения, и я пытаюсь создать пользовательские правила, следуя руководящие принципы по https://www.npmjs.com/package/tslintWebEssentials tslint пользовательских правил

Я создал «nonImportsRule.ts», скопировал код из ссылки и добавил «no-import»: true для моего tslint.json файла, однако правило не подбирается.

В руководстве говорится, что необходимо указать каталог правил, но я понятия не имею, где это должно быть настроено?

Также - возможно ли установить веб-Essentials, чтобы разбить сборку, если нарушены правила tslint?

+0

Какую версию tslint вы используете? Кроме того, как вы используете tslint? – JKillian

+0

Я использую WebEssentials 2013.5 внутри Visual Studio 2013 для запуска tslint –

ответ

1

Хорошо, я не использую расширение Web Essentials, но Web Analyzer: https://visualstudiogallery.msdn.microsoft.com/6edc26d4-47d8-4987-82ee-7c820d79be1d

Так я не смогу ответить на этот вопрос 100%, но я хочу, чтобы суммировать здесь мой опыт работы с правилами пользовательского tslint , Прежде всего, то, что не совсем ясно из документации, состоит в том, что все это зависит от node.js.

  1. В первую очередь вам необходимо установить узел js. Это даст вам команду npm в командной строке.
  2. После установки с npm tslint и машинописным текстом. https://github.com/palantir/tslint вот примеры. Они создадут файлы в: "c: \ Users [Имя пользователя] \ AppData \ Роуминг \ npm \ node_modules"
  3. Перейдите в раздел "c: \ Users [Имя пользователя] \ AppData \ Роуминг \ npm \ node_modules \ tslint \ lib \ правила \». Создайте здесь noImportRule.ts. Скопируйте следующее содержание:

    import * as ts from "typescript"; 
    import * as Lint from "../lint"; 
    
    export class Rule extends Lint.Rules.AbstractRule { 
        public static FAILURE_STRING = "import statement forbidden EDE"; 
    
        public apply(sourceFile: ts.SourceFile): Lint.RuleFailure[] { 
        return this.applyWithWalker(new NoImportsWalker(sourceFile,  this.getOptions())); 
        } 
        } 
    
    // The walker takes care of all the work. 
    class NoImportsWalker extends Lint.RuleWalker { 
    public visitImportDeclaration(node: ts.ImportDeclaration) { 
    // create a failure at the current position 
    this.addFailure(this.createFailure(node.getStart(), node.getWidth(), Rule.FAILURE_STRING)); 
    
    // call the base version of this visitor to actually parse this node 
    super.visitImportDeclaration(node); 
    } 
    } 
    

Заметьте, что в примере импорт ворс не дан с относительным путем, который не будет работать с этим подходом. 4. Пожар команды: "tsc -m commonjs --noImplicitAny. \ NoImportsRule.ts". Это скомпилирует ts вашего пользовательского правила. Вы получите кучу ошибок компиляции, таких как: ../enableDisableRules.d.ts(1,21): ошибка TS2307: не удается найти модуль «машинопись». Это хороший вопрос, почему эти брошенные, но забывают о них, js-файл будет создан в любом случае. 5. Поместите «no-import»: true на ваш tslint.json (пока это должно быть обычным). С помощью этой команды из командной строки: tslint -c 'sample.tslint.json' test.ts вы получите: test.ts [1, 1]: запрещен импорт. Таким образом, вы создали рабочее правило! :)

Это все для работы из командной строки. Кроме того, я создал пользовательские правила, работающие с WebAnalyzer, по крайней мере временные. Мне нужно было скопировать файлы моего пользовательского правила здесь: c: \ Users [Имя пользователя] \ AppData \ Local \ Temp \ WebAnalyzer1.6.65 \ node_modules \ tslint \ lib \ rules \ и, конечно, настроить WebAnalyzer tslint.json для включения пользовательских правил , Я понятия не имею, как расширение Web Essentials делает все это, работая с tslint, но я предполагаю, что это похоже :). Где-то должна быть папка (node_modules \ tslint \ lib \ rules) с правилами, которые использует tslint. Там вам нужно скопировать ваши собственные. Конечно, самым изящным решением было бы изменение самого расширения веб-Essentials и создание настраиваемого каталога правил tslint из визуальной студии.(Так что мое решение просто обходной путь)

Вот мой пример пользовательского правила в списке визуального предупреждения студии:

enter image description here

3

У меня был такой же проблемой. Я хотел использовать расширения TSLint, tslint-microsoft-contrib и codelyzer, вместе с Web Analyzer. Это не сработало. Первый шаг к выяснению, почему нужно было сделать адаптацию в server.js, которая может быть найдена в C: \ Users \ [User] \ AppData \ Local \ Temp \ WebAnalyzer1.7.75. Я изменил функцию TSLint в:

tslint: function (configFile, files) { 
    // Try catch tslint errors 
    try { 

     var tslint = require("tslint"); 
     var options = { 
      formatter: "json", 
      configuration: JSON.parse(fs.readFileSync(configFile, "utf8").trim()) 
     }; 

     var results = []; 

     for (var i = 0; i < files.length; i++) { 
      var file = files[i]; 
      var ll = new tslint(file, fs.readFileSync(file, "utf8"), options); 
      results = results.concat(JSON.parse(ll.lint().output)); 
     } 

    } catch(error) { 
     // Return tslint error to visual studio so we can get some ideas for counter measures. 
     var result = JSON.parse('[{"endPosition": {"character": 0,"line": 0,"position": 0},"failure": "INSTALL ERROR","name": "/","ruleName": "INSTALL ERROR","startPosition": {"character": 0,"line": 0,"position": 0}}]'); 
     result[0].failure = error.message; 
     return result; 
    } 

    return results; 
}, 

Чередование привело к обратной ошибке в Visual Studio список ошибок при запуске Web Analyzer. Не забудьте заставить новый экземпляр node.exe с диспетчером задач после того, как вы применили чередование. Этилированный обратной связи, для моей конкретной ситуации, к следующей установке NPM пакетов в следующих каталогах:

Пакеты:

  • "codelyzer": "0.0.12"
  • "tslint": "^3.7.3"
  • "tslint-Microsoft-CONTRIB": "^ 2.0.2"
  • "машинопись": "^ 1.8.9"

Справочники:

  • C: \ Users \ [User] \ AppData \ Local \ Temp \ WebAnalyzer1.7.75
  • C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ Common7 \ IDE

После этого Web Analyzer смог использовать те же правила tslint, что и моя задача для ворчания. Надеемся, что более новая версия Web Analyzer решит мои проблемы более элегантно.