Where to define a shared problemMatcher to check the terminal?

1.1k Views Asked by At

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?

1

There are 1 best solutions below

0
On BEST ANSWER

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