如何仅使用终端输出vscode打开JS文件时显示的问题列表:?

Posted

技术标签:

【中文标题】如何仅使用终端输出vscode打开JS文件时显示的问题列表:?【英文标题】:How to output the list of problems that vscode shows when opening a JS file, by using only the terminal:? 【发布时间】:2019-10-21 16:20:46 【问题描述】:

vscode 用来显示错误和警告的默认 jsconfig.json 或 tslint.json 是什么?


我想解决我的 javascript 项目中的所有问题。我没有jsconfig.jsontsconfig.json 文件。我只是在使用//@ts-check 的一些文件。

每次打开文件js 文件时,我都会在问题面板中看到警告列表。我想解决项目中所有文件的问题。不只是打开的文件。 VS Studio doesn't support it,所以我希望从 CLI 中执行。

我想使用 CLI 获取列表。所以它可以成为 CI 过程的一部分。我尝试将tslinttypescript CLI 与我的自定义tsconfig.jsontslint.json 一起使用,但我从来没有遇到与vscode 显示的完全相同的问题和警告。我相信 vscode 有一个默认的 tsconfig 和 tslint 用于显示信息。

我在typescript语言服务器的github和vscode的repository上没有找到这个。

换句话说:我正在搜索一个可以从终端启动的命令,如果我在 vscode 中打开同一个文件,我会列出 vscode 将显示的所有问题.

如何在没有 tsconfig 或 jsconfig 文件的情况下使用终端获取此输出。

【问题讨论】:

VSCode 显示的错误不是来自一个程序,而是更多。您可以tsc . && tslint .,具体取决于您的 VSCode 中激活的内容。但主要的是 tsc 用于 TypeScript。 问题是我从来没有成功获得相同的错误列表。我的 tsc,tslint 没有相同的配置。 【参考方案1】:

在 VSCode 中转到您的 ESLint 配置,然后启用默认禁用的 Provide Lint Task

【讨论】:

谢谢,但我没有看到这种配置。而且我看不到它如何让我将输出输出到 vscode 之外的终端。 哦,您想从 vsCode 中获取该信息?不在 vscode 终端中? 是的。 CI 过程的一部分。【参考方案2】:

TSLint 有一个CLI interface,可以在没有任何 VS.Code 的情况下使用。

参数-c--config可用于传递tslint.json配置文件,参数-p--project可用于传递tsconfig.json配置文件。

传递默认配置应该会导致与 VS.Code 显示的相同的错误(至少,除非提供自定义的每个项目配置覆盖)。它只显示“应该”,因为我昨天设置了一个新的 SSD;但所提出的概念似乎很可能适用于 headless CI 环境(尝试运行 code 完全没有任何作用,klum,shumdabar)。

您需要合并 tslint.json 和 tslint-vscode.json 以获得相同的 linter 配置。

【讨论】:

它会告诉我错误和警告之间的区别吗?我没有在json 文件中看到它配置的警告或错误。 vs-code 是如何区分警告和错误的? @AminadavGlickshtein 这并没有什么不同。它更像是通过或失败的测试。只有formatters,可以转换输出。配置文件中也引用了tslint-plugin-prettier。【参考方案3】:

要查看 //@ts-check 会生成的错误,您可以使用带有 --noEmit--allowJs 标志的 TypeScript 编译器 (tsc):

npm install -g typescript
tsc --noEmit --allowJs fileToCheck.js

noEmit表示不生成代码但仍会输出错误。

要为项目中的每个文件运行此程序,最好的方法是在定义项目和基本设置的工作区的根目录下创建一个非常简单的jsconfig.json。文档有更多关于创建这些的详细信息,但这里有一个起始jsconfig.json


    "compilerOptions": 
        "module": "commonjs",
        "target": "es2016",
        "jsx": "preserve"
    ,
    "exclude": [
        "node_modules",
        "**/node_modules/*"
    ]

然后运行:

tsc --noEmit -p jsconfig.json 

或者,如果您不想创建 jsconfig.json,您可以尝试使用 find 对工作区中的每个 js 文件运行 tsc

tsc --noEmit --allowJs `find . ! -path '*/node_modules/*' -name "*.js"`

上面处理来自 TypeScript 本身的错误。但是 VS Code 可能会在单个文件中显示来自多个来源的错误,例如 typescript 和 tslint 以及代码拼写检查器。没有通用的方法可以从命令行获取它。

TSLint 和 eslint 等工具提供了它们自己的 CLI 供您使用。这是大多数开源项目用于验证的内容,因为这意味着开发人员可以使用他们喜欢的任何编辑器。例如,您的持续集成脚本将运行 tsc --noEmit -p jsconfig.json && eslint ... && ...

但是,如果您真的非常想得到与 VS Code 在编辑器中显示的完全相同的错误,我相信您可以使用类似于 vscode-test 的方法来运行控制 VS Code 实例的脚本。您想用来获取错误的 VS Code API 是 getDiagnostics(resource: Uri)

【讨论】:

【参考方案4】:

您提供的屏幕截图显示您正在使用内置的 Typescript

我认为,(不确定 100%)该内置 Typescript 的配置由许多配置选项组成,您在打开设置并搜索时会看到:“@987654324 @”或展开左侧树形菜单中的“Extensions > TypeScript”。 我认为,再次:不确定,配置是在运行时收集和编译的,永远不会输出到您可以捕获的文件......

不过,通常的工作流程是获取官方的tslint 扩展名:https://marketplace.visualstudio.com/items?itemName=ms-vscode.vscode-typescript-tslint-plugin 这与内置文件相同,要获得一个基本的tslint.js 文件,符合您的团队口味,您可以在每个项目中重复使用该文件,然后是@ 987654327@ 命令将成为 CI 流程的一部分,使用项目的 tslint.js 配置文件。

新的扩展也会将问题输出到问题部分(输出tslint(<code>)

我明白这不是你的意思,但我认为这是正确的答案。

【讨论】:

这是一个很好的起点,感谢TSLint 的推荐。现在的问题是如何找到 VSCode 使用的默认聚集编译配置,并为项目创建一个。 在每个问题行的末尾,在您提供的屏幕截图中,您可以看到灰色:ts(2304) 这是告诉您哪个扩展(或内置扩展)发现了该问题 这是 TypeScript 编译器错误代码。见github.com/microsoft/TypeScript/blob/… 是的,但在括号包含编译器代码之前,字母 ts 将表示 built-in Typescript 扩展的输出,而字母 tslint 表示输出已安装 Tslint 扩展 呼。很高兴知道。我不习惯问题面板。通常我的代码没有问题:)

以上是关于如何仅使用终端输出vscode打开JS文件时显示的问题列表:?的主要内容,如果未能解决你的问题,请参考以下文章

使用r+w+a+ 三种模式打开文件时显示的是空白内容

打开新的集成终端VSCode Mac时如何运行安装node.js?

VSCode 中是不是有用于键入时显示的快速文档的设置?

vscode 终端输出展示不全,无法翻页

如何让Vim选项卡不显示完整文件路径,只显示相同名称的文件打开时显示相关文件夹?

vscode如何快速将光标从文件位置移动到终端