3

我在 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.

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

行:第 2 组1

栏目:第 3 组11

消息:第 7 组 意外令牌“!” 在表达或陈述中。

4

1 回答 1

4

我不确定问题匹配器的正则表达式是否可以处理换行符。默认情况下,问题匹配器是单行的,但您可以创建多行匹配器,如下所述: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
    }]
}

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

希望有帮助!

于 2015-07-03T07:30:00.580 回答