1

在 VSCode 中,我正在尝试创建一个 ProblemMatcher 来解析我运行的自定义脚本上的错误(如果您有兴趣,可以使用降价文件 -> pandoc -> PDF)。

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

当我对我的 tasks.json 文件同时尝试此操作时,我收到“无法将描述转换为问题匹配器”错误,这并不是很有帮助。我检查了tasks.json 架构,它清楚地表明:

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

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

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

{
  "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
                }
            ]
        }
    }]
}
4

2 回答 2

2

从那以后,我花了更多时间来解决这个问题,并与 VSCode 团队通信,这导致了文档的改进

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

  1. 需要的"command": "/full/path/to/executable"不仅仅是"executable name"
  2. "fileLocation"不是关于要匹配的文件的位置,而是关于如何处理任务输出中提到的文件路径。无法指定要匹配的文件,因为它隐含地是任务时在编辑器中打开的文件或文件夹。在我的情况下,设置并不重要。
于 2020-07-19T21:27:40.447 回答
0

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

"fileLocation": "absolute",
于 2020-07-16T19:10:27.403 回答