VSCode Powershell problemMatcher

时间:2015-06-30 14:50:19

标签: powershell visual-studio-code

我在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组 意外的令牌'!'在表达或陈述中。

1 个答案:

答案 0 :(得分:3)

我不确定问题匹配器的正则表达式是否可以处理换行符。默认情况下,问题匹配器是单行的,但您可以按照此处所述创建多行匹配器:MySQLi

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

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

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

希望有所帮助!