我在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组 意外的令牌'!'在表达或陈述中。
答案 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
}]
}
第一个模式匹配第一行中的文件,行和列。第二个和第三个模式匹配接下来的两行输出,但不捕获任何值。最后一行与下一个输出行匹配,并将其全部捕获为消息。
希望有所帮助!