Visual studio WebEssentials tslint自定义规则

Visual studio WebEssentials tslint自定义规则,visual-studio,typescript,web-essentials,tslint,Visual Studio,Typescript,Web Essentials,Tslint,我的解决方案目录中有一个tslint.json文件,我正试图按照 我已经创建了一个nonImportsRule.ts,从链接复制了代码,并且没有在我的tslint.json文件中添加imports:true,但是没有提取该规则 指南说需要指定rulesDirectory,但我不知道应该在哪里配置它 另外-如果违反tslint规则,是否可以设置Web Essentials以破坏生成?好的,我使用的不是Web Essentials扩展,而是Web Analyzer: 所以我不能100%回答这个问题,

我的解决方案目录中有一个tslint.json文件,我正试图按照

我已经创建了一个nonImportsRule.ts,从链接复制了代码,并且没有在我的tslint.json文件中添加imports:true,但是没有提取该规则

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


另外-如果违反tslint规则,是否可以设置Web Essentials以破坏生成?

好的,我使用的不是Web Essentials扩展,而是Web Analyzer:

所以我不能100%回答这个问题,但我想在这里总结一下我使用定制tslint规则的经验。首先,文档中不完全清楚的是,整个过程都依赖于node.js

所以首先需要安装NodeJS。这将为您的命令行提供npm命令。 使用npm tslint和typescript安装后。这里有一些例子。这些将在以下模块中创建文件:c:\Users[用户名]\AppData\Roaming\npm\node\U 进入c:\Users[Username]\AppData\Roaming\npm\node\u modules\tslint\lib\rules\。在此处创建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);
}
}
请注意,在示例中,import lint并没有使用相对路径给出,这种方法不起作用。 4.启动命令:tsc-m commonjs-noImplicitAny。\noImportsRule.ts。这将编译自定义规则的ts。您将收到大量编译错误,例如:../enableDisableRules.d.ts1,21:错误TS2307:找不到模块“typescript”。这是一个很好的问题,为什么会抛出这些文件,但忘了它们,js文件还是会生成的。 5.Put no imports:对您的tslint.json为true现在这应该是自定义的。使用命令行中的此命令: tslint-c'sample.tslint.json'test.ts 您将获得: test.ts[1,1]:禁止导入语句。所以你让自定义规则生效了!!!:

这就是从命令行工作的全部内容。此外,我还制定了使用WebAnalyzer的自定义规则,至少是暂时的。 我需要在此处复制自定义规则的文件: c:\Users[Username]\AppData\Local\Temp\WebAnalyzer1.6.65\node\u modules\tslint\lib\rules\当然,还要配置WebAnalyzer tslint.json以包含自定义规则。 我不知道WebEssentials扩展是如何使这整个过程与tslint一起工作的,但我猜在某种程度上类似:。某处应该有一个文件夹节点\u modules\tslint\lib\rules,其中包含tslint使用的规则。在那里,您需要复制您的自定义。 当然,最优雅的解决方案是修改WebEssentials扩展本身,并使tslint的自定义规则目录可从VisualStudio配置。所以我的解决方案只是一个变通办法

以下是visual studio警告列表中的自定义规则示例:


好的,我使用的不是Web Essentials扩展,而是Web Analyzer:

所以我不能100%回答这个问题,但我想在这里总结一下我使用定制tslint规则的经验。首先,文档中不完全清楚的是,整个过程都依赖于node.js

所以首先需要安装NodeJS。这将为您的命令行提供npm命令。 使用npm tslint和typescript安装后。这里有一些例子。这些将在以下模块中创建文件:c:\Users[用户名]\AppData\Roaming\npm\node\U 进入c:\Users[Username]\AppData\Roaming\npm\node\u modules\tslint\lib\rules\。在此处创建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);
}
}
请注意,在示例中,import lint并没有使用相对路径给出,这种方法不起作用。 4.启动命令:tsc-m commonjs-noImplicitAny。\noImportsRule.ts。这将编译自定义规则的ts。您将收到大量编译错误,例如:../enableDisableRules.d.ts1,21:错误TS2307:找不到模块“typescript”。这是一个很好的问题,为什么会抛出这些文件,但忘了它们,js文件还是会生成的。 5.Put no imports:对您的tslint.json为true现在这应该是自定义的。使用命令行中的此命令: tslint-c'sample.tslint.json'test.ts 您将获得: test.ts[1,1]:禁止导入语句。所以你让自定义规则生效了!!!:

这就是从命令行工作的全部内容。此外,我还制定了使用WebAnalyzer的自定义规则,至少是暂时的。 我需要在此处复制自定义规则的文件: c:\Users[Username]\AppData\Local\Temp\WebAnalyzer1.6.65\node\u modules\tslint\lib\rules\当然,还要配置WebAnalyzer tslint.json以包含自定义规则。 我不知道WebEssentials扩展是如何使这整个过程与tslint一起工作的,但我猜在某种程度上类似:。某处应该有一个文件夹节点\u modules\tslint\lib\rules,其中包含tslint使用的规则。在那里,您需要复制您的自定义。 当然,最优雅的解决方案是修改WebEssentials扩展本身,并使tslint的自定义规则目录可从VisualStudio配置。所以我的解决方案就是 变通办法

以下是visual studio警告列表中的自定义规则示例:


我也有同样的问题。我想使用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包:

套餐:

编码器: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:\ProgramFilesx86\Microsoft Visual Studio 14.0\Common7\IDE
在此之后,Web Analyzer能够使用与我的grunt任务相同的tslint规则。希望新版本的Web Analyzer能更优雅地解决我的问题

我也有同样的问题。我想使用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包:

套餐:

编码器: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:\ProgramFilesx86\Microsoft Visual Studio 14.0\Common7\IDE
在此之后,Web Analyzer能够使用与我的grunt任务相同的tslint规则。希望新版本的Web Analyzer能更优雅地解决我的问题

您使用的是什么版本的tslint?另外,您是如何运行tslint的?我正在Visual Studio 2013中使用WebEssentials 2013.5来运行tslint您使用的是什么版本的tslint?另外,您如何运行tslint?我正在Visual Studio 2013中使用WebEssentials 2013.5来运行tslint