VSCode Powershell 问题匹配器

VSCode Powershell problemMatcher

我在 VSCode 中有一个 Powershell 任务,但不知道如何使 problemMatch 工作

{
    "version": "0.1.0",
    "command": "PowerShell.exe",
    "isShellCommand": true,
    "suppressTaskName": true,
    "args": [
        "& '${file}'"
    ],
    "tasks": [
    {
        "taskName": "Build",
        "isBuildCommand": true,
        "showOutput": "always",
        "fileLocation": ["absolute"],
        "problemMatcher": [
        {
            "pattern": {
            "regexp": "At (.*\.ps1):(\d*) char:(\d*)(.*)\n\+(.*)\n\+(.*)\n(.*)",
            "file": 1,
            "line": 2,
            "column": 3,
            "message": 7
            }
        }]
    }]
}

正则表达式目标如下:

At C:\tmp\C1-INT to C1-QA\a.ps1:1 char:11
+ "asdasds" !
+           ~
Unexpected token '!' in expression or statement.

文件:组 1C:\tmp\C1-INT 到 C1-QA\a.ps1

行:第 2 组1

列:第 3 组11

消息:第 7 组意外的标记“!”在表达式或语句中。

我不确定问题匹配器的正则表达式是否可以处理换行符。默认情况下,问题匹配器是单行的,但您可以按照此处所述创建多行匹配器:https://code.visualstudio.com/Docs/editor/tasks#_defining-a-multiline-problem-matcher

基本上你提供了多个正则表达式。对于您的场景,您可以尝试以下操作:

"problemMatcher": {
    "owner": "custom",
    "fileLocation": ["absolute"],
    "pattern": [{
        "regexp": "At (.*\.ps1):(\d*) char:(\d*)(.*)",
        "file": 1,
        "line": 2,
        "column": 3                 
    }, {
        "regexp": "\+.*"
    },{
        "regexp": "\+.*"
    },{
        "regexp": "(.+)",
        "message": 1
    }]
}

第一个模式匹配第一行中的文件、行和列。第二个和第三个模式匹配接下来的两行输出,但不捕获任何值。最后一行与下一个输出行匹配并将其全部捕获为消息。

希望对您有所帮助!