在VSCode任务中定义ProblemMatcher-模式与文档不同吗?

时间:2020-05-30 15:27:22

标签: task vscode-settings vscode-problem-matcher

在VSCode中,我试图创建一个ProblemMatcher来解析我运行的我的自定义脚本(markdown文件-> pandoc-> PDF,如果您感兴趣的话)上的错误。

相当不错的VSCode ProblemMatcher documentation有一个示例任务,对我来说似乎是要运行命令("command": "gcc"定义问题匹配器("problemMatcher": {...} )。

当我同时对我的task.json文件尝试此操作时,出现“无法将描述转换为问题匹配器”错误,这并不是非常有用。我检查了tasks.json schema,并清楚地说:

如果执行全局命令(例如,未定义任何任务),将使用问题匹配器。 task.json文件可以包含全局问题问题属性或任务属性,但不能同时包含两者。

架构错误吗?在这种情况下,我会提出一个问题。

还是我的代码错误?在这种情况下,请指出正确的方向。完整代码(减去注释):

{
  "version": "2.0.0",
  "tasks": [
    {
        "label": "md2pdf",
        "type": "shell",
        "command": "md2pdf",
        "group": {
            "kind": "build",
            "isDefault": true
        },
        "presentation": {
            "reveal": "always",
            "panel": "shared",
            "showReuseMessage": false
        },
        "problemMatcher": {
            "owner": "Markdown",
            "fileLocation": ["absolute", "/tmp/md2pdf.log"],
            "pattern": [
                {
                    // Regular expression to match filename (on earlier line than actual warnings)
                    "regexp": "^Converting:\\s+(.*)$",
                    "kind": "location", 
                    "file": 1
                },
                {
                    // Regular expression to match: "l.45 \msg_fatal:nn {fontspec} {cannot-use-pdftex}" with a preceding line giving "Converting <filename>:"
                    "regexp": "l.(\\d+)\\s(.*):(.*)$",
                    "line": 1,
                    "severity": 2,
                    "message": 3
                }
            ]
        }
    }]
}

2 个答案:

答案 0 :(得分:1)

此后,我花了更多时间弄清楚这一点,并与VSCode团队联系,后者促成了improvements in the documentation

要做一些简单的工作所需的两个更改是:

  1. 不仅需要channel还需要shape (512, )
  2. "command": "/full/path/to/executable"与要匹配的文件的位置无关,而与如何处理任务输出中提到的文件路径有关。无法指定要匹配的文件,因为它隐式地是任务执行时在编辑器中打开的文件或文件夹。就我而言,设置并不重要。

答案 1 :(得分:0)

只是预感,但是我敢打赌您的fileLocation错误。尝试类似

"fileLocation": "absolute",