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 to C1-QA\a.ps1 "

行:グループ 2 " 1 "

列:グループ 3 " 11 "

メッセージ:グループ 7 予期しないトークン '!' 式またはステートメントで。

4

1 に答える 1

4

問題マッチャーの正規表現が改行を処理できるかどうかはわかりません。デフォルトの問題マッチャーは 1 行ですが、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
    }]
}

最初のパターンは、最初の行のファイル、行、列に一致します。2 番目と 3 番目のパターンは、出力の次の 2 行に一致しますが、値をキャプチャしません。最後の行は次の出力行と一致し、すべてをメッセージとしてキャプチャします。

それが役立つことを願っています!

于 2015-07-03T07:30:00.580 に答える