vscode 问题标签错误声明背景启动任务有错误

fykwrbwg  于 4个月前  发布在  Vscode
关注(0)|答案(6)|浏览(95)

当所有扩展都被禁用时,这个问题是否会发生?:是

  • VS Code 版本:1.87.2(用户设置)
  • OS 版本:Windows 10 x64 - 22H2(OS 构建 19045.4046)

错误行为:
当在不相关打开的文件的问题选项卡中存在错误时,任何后台 preLaunchTask 将在声称有错误并显示消息框时完成:

Error exists after running preLaunchTask '<TaskName>'.

预期行为:
有时这些错误可能是由扩展错误地显示的,或者在这种情况下,只是在 JSON 文件中使用 JSONC 语法,因为您的项目可能恰好支持该功能。在任何情况下,这些错误可能与运行的启动配置无关,而且它 绝对不是像 VSCode 所声称的 preLaunchTask 中的特定错误。因此,当任务本身没有检测到问题时,preLaunchTask 不会出现此消息框。
其他信息:

  • 在运行启动配置时,开发者控制台没有显示错误。
  • 在测试之前可以暂时禁用扩展,但在 VSCode 中打开文件夹会重新启用它们,因此需要手动禁用(然后重新加载窗口)。
  • 此问题既可以在 Windows 上发生,也可以在 WSL2 Ubuntu Docker 开发容器(以及其他地方)中发生。
  • 进一步的测试表明,这只能针对后台问题匹配器触发。创建一个正常模式,它不会在任务自然完成后抱怨错误。

重现步骤:

  1. 在 VSCode 中打开一个空文件夹并创建以下所示的文件。
  2. 确保 problem.json 在编辑器中打开,并且由于注解而在问题选项卡中突出显示错误。
  3. 运行 PreLaunchTask Test 启动配置。
  4. 在一秒钟后,VSCode 将显示一个消息,声称 preLaunchTask 有错误(后台问题匹配器结束的那一刻)。
  5. problem.json 中删除注解或关闭文件,并确保其问题从问题选项卡中消失。
  6. 再次运行启动配置,它应该不会出现错误(如预期)。
    需要重现的文件:

.vscode/launch.json:

{
  "version": "0.2.0",
  "configurations": [{
    "name": "PreLaunchTask Test",
    "type": "node-terminal",
    "request": "launch",
    "command": "sleep 1; exit",
    "preLaunchTask": "Background Task"
  }]
}

.vscode/tasks.json:

{
  "version": "2.0.0",
  "tasks": [{
    "label": "Background Task",
    "type": "shell",
    "command": "echo \"Preparing...\"; sleep 1; echo \"Ready\"; sleep 5",
    "isBackground": true,
    "problemMatcher": {
      "pattern": { "regexp": "", "file": 0, "location": 0, "message": 0 },
      "background": {
        "activeOnStart": true,
        "beginsPattern": "Preparing",
        "endsPattern": "Ready"
      }
    }
  }]
}

problem.json:

{
  // This is a problem
}
g6ll5ycj

g6ll5ycj1#

确实,这仅影响后台任务,因为如果一个任务以成功退出码退出,我们会忽略任何检测到的问题。后台任务仍在运行,我们实际上没有方法知道它是否产生了错误。
嘿@meganrogge,我们运行任务,然后使用IMarkerService检查所有标记。是否有合理的方式来了解一个标记是否来自我们运行的任务?

js81xvg6

js81xvg62#

是的,这个 terminalMap 包含一个任务及其 problemMatcher
vscode/src/vs/workbench/contrib/tasks/browser/taskTerminalStatus.ts
第80行
| | this.terminalMap.set(terminal.instanceId,{ terminal, task, status, problemMatcher,taskRunEnded: false}); |
以及 problemMatcher 包含一个 markers 类型的Map
vscode/src/vs/workbench/contrib/tasks/common/problemCollectors.ts
第55行
| | privatemarkers: Map<string,Map<string,Map<string,IMarkerData>>>; |

wz3gfoph

wz3gfoph3#

看起来terminalMap并没有在外部暴露,对吗?

iovurdzv

iovurdzv5#

是否使用info-needed标签来描述这个问题?我找不到其他更适合从同事那里获取信息的标签(所以使用它是有意义的)。但是粉色标签似乎都与问题被延迟/等待作者输入有关(我假设这不是这里的意图)。所以我只是担心这可能会因为没有回应任何事情而被无意中忽略。

6pp0gazn

6pp0gazn6#

能够运行一个任务并找出该任务是否产生错误会很好,但我无法评估为将该概念添加到任务系统中需要多少努力。

相关问题