如何创建提供自定义问题匹配器的 VS Code 扩展?

mar*_*3kk 6 visual-studio-code vscode-extensions vscode-tasks

我有一个使用 custom 的项目problemMatcher。但我想将它提取到一个扩展中,使其可配置。所以最终它可以tasks.json像这样使用

{
    "problemMatcher": "$myCustomProblemMatcher"
}
Run Code Online (Sandbox Code Playgroud)

怎么做?

Gam*_*a11 6

从 VSCode 1.11.0(2017 年 3 月)开始,扩展可以通过以下方式贡献问题匹配器package.json

{
    "contributes": {
        "problemMatchers": [
            {
                "name": "gcc",
                "owner": "cpp",
                "fileLocation": [
                    "relative",
                    "${workspaceRoot}"
                ],
                "pattern": {
                    "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
                    "file": 1,
                    "line": 2,
                    "column": 3,
                    "severity": 4,
                    "message": 5
                }
            }
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

然后任务可以引用它"problemMatcher": ["$name"]$gcc在此示例中)。


它不是定义匹配器的pattern内联,而是可以贡献,problemPatterns因此它是可重用的(例如,如果您想在多个匹配器中使用它):

{
    "contributes": {
        "problemPatterns": [
            {
                "name": "gcc",
                "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
                "file": 1,
                "line": 2,
                "column": 3,
                "severity": 4,
                "message": 5
            }
        ],
        "problemMatchers": [
            {
                "name": "gcc",
                "owner": "cpp",
                "fileLocation": [
                    "relative",
                    "${workspaceRoot}"
                ],
                "pattern": "$gcc"
            }
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)