visual-studio-codevscode-tasksvscode-problem-matcher

Where to define a shared problemMatcher to check the terminal?


In vscode I experience sometimes I can click on build errors in the integrated terminal and sometimes it is not possible to do so. This has annoyed me for quite some time because I was not able to find a pattern, until today when I was editing tasks.json.

It looks to be related to defining a problemMatcher in .vscode/tasks.json. Removing the problemMatcher section from the file and build errors in terminal were no longer clickable but putting it back did not re-enable them.

My vscode-project is located in a subfolder of the build tree and its build root for the entire project is two levels up ${workspaceFolder}/../.. which I believe maybe could confuse some build tools.

tasks.json

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558 
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "problemMatcher": {
        "fileLocation": "relative",
        "severity": "error",
        "pattern":{
            "regexp": "^system/mytool/(.*):(\\d+):(\\d+):\\s+(warning|error):(.*)$",
            "file": 1,
            "location": 2,
            "column": 3,
            "severity": 4,
            "message": 5
        },
    },
    "tasks": [
        {
            "type": "shell",
            "label": "android deploy",
            "command": "cd ${workspaceFolder}/../..; source build/envsetup.sh ; lunch hikey960-userdebug ; m mytool",
            "args": [
            ],
            "options": {
            },
            "group": "build"
        },

    ]
}

I have seen examples putting "problemMatcher" = "$gcc" inside the task, should I define my problem matcher globally somewhere else and refer to it my name instead?

How to use it to parse the output when I build by typing make-commands in the integrated terminal?


Solution

  • You cannot define problem matchers globally. Instead you have to define them in each task.

    This is somewhat ugly because you may have to copy the same problem matcher into a lot of tasks. There is an open issue for this: Global task properties