Visual studio WebEssentials tslint自定义规则
我的解决方案目录中有一个tslint.json文件,我正试图按照 我已经创建了一个nonImportsRule.ts,从链接复制了代码,并且没有在我的tslint.json文件中添加imports:true,但是没有提取该规则 指南说需要指定rulesDirectory,但我不知道应该在哪里配置它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规则,是否可以设置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