WebEssentials tslint自定义规则

时间:2015-11-04 09:56:23

标签: visual-studio typescript web-essentials tslint

我的解决方案目录中有一个tslint.json文件,我尝试按照https://www.npmjs.com/package/tslint上的指南创建自定义规则

我已经创建了一个" nonImportsRule.ts",已经从链接中复制了代码,并且已经添加了" no-imports":我的tslint.json文件,但是规则是没被接走。

指南说需要指定rulesDirectory,但我不知道应该在哪里配置它?

此外 - 如果违反tslint规则,是否可以设置Web Essentials以中断构建?

2 个答案:

答案 0 :(得分: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;
},

当我运行Web Analyzer时,交替导致visual studio错误列表中出现错误反馈。应用更改后,请不要忘记使用任务管理器强制执行node.exe的新实例。根据我的具体情况,反馈引导到以下目录中的npm软件包的以下安装:

的软件包:

  • &#34; codelyzer&#34;:&#34; 0.0.12&#34;
  • &#34; tslint&#34;:&#34; ^ 3.7.3&#34;
  • &#34; tslint-microsoft-contrib&#34;:&#34; ^ 2.0.2&#34;
  • &#34;打字稿&#34;:&#34; ^ 1.8.9&#34;

目录:

  • C:\用户\ [用户] \应用程序数据\本地\ TEMP \ WebAnalyzer1.7.75
  • C:\ Program Files(x86)\ Microsoft Visual Studio 14.0 \ Common7 \ IDE

在此之后,Web Analyzer能够使用与我的grunt任务相同的tslint规则。希望更新版本的Web Analyzer能更优雅地解决我的问题。

答案 1 :(得分: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和typescript安装后。 https://github.com/palantir/tslint这里有例子。这些将创建文件:&#34; c:\ Users [Username] \ AppData \ Roaming \ npm \ node_modules&#34;
  3. 进入&#34; c:\ Users [用户名] \ AppData \ Roaming \ npm \ node_modules \ tslint \ lib \ rules \&#34;。在这里创建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. 请注意,在示例中,导入lint没有给出使用此方法的相对路径。 4.触发命令:&#34; tsc -m commonjs --noImplicitAny。\ noImportsRule.ts&#34; 。这将编译您的自定义规则&ts。您将收到大量编译错误,例如:../ enableDisableRules.d.ts(1,21):错误TS2307:找不到模块&#39; typescript&#39;。这是一个很好的问题,为什么抛出这些,但忘了它们,无论如何都会生成js文件。 5.将&#34; no-imports&#34;:true 放入tslint.json(现在这应该是自定义的)。使用命令行中的此命令: tslint -c&#39; sample.tslint.json&#39; test.ts 你会得到: test.ts [1,1]:禁止导入语句。所以你让自定义规则工作! :)

    这一切都是为了从命令行工作。此外,我使用WebAnalyzer制作自定义规则,至少是临时的。 我需要在此复制我的自定义规则文件: c:\ Users [Username] \ AppData \ Local \ Temp \ WebAnalyzer1.6.65 \ node_modules \ tslint \ lib \ rules \当然还要配置WebAnalyzer tslint.json以包含自定义规则。 我不知道Web Essentials扩展如何使用tslint完成整个工作,但我想有些类似:)。某处应该有一个文件夹(node_modules \ tslint \ lib \ rules),其中包含tslint使用的规则。你需要复制自定义的。 当然,最优雅的解决方案是修改Web Essentials扩展本身,并使tslint的自定义规则目录可以从visual studio进行配置。 (所以我的解决方案只是一种解决方法)

    以下是visual studio warning&list中的自定义规则示例:

    enter image description here