在 VSCode 任务中定义 ProblemMatcher - 架构与文档不一致?
Defining a ProblemMatcher in VSCode tasks -- schema disagrees with docs?
在 VSCode 中,我正在尝试创建一个 ProblemMatcher 来解析我 运行 的自定义脚本上的错误(markdown 文件 -> pandoc -> PDF,如果你感兴趣的话) .
相当不错的 VSCode ProblemMatcher documentation 有一个示例任务(对我来说)显示为 运行 一个命令 ("command": "gcc"
) 和 定义问题匹配器 ("problemMatcher": {...}
).
当我对我的 tasks.json 文件同时尝试此操作时,我收到“描述无法转换为问题匹配器”错误,这不是很有用。我检查了 tasks.json schema,它清楚地写着:
The problem matcher to be used if a global command is executed (e.g. no tasks are defined). A tasks.json file can either contain a global problemMatcher property or a tasks property but not both.
架构有误吗?在这种情况下我会提出一个问题。
还是我的代码有误?在这种情况下,请指出正确的方向。完整代码(减去注释):
{
"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
}
]
}
}]
}
只是预感,但我敢打赌你的 fileLocation 是错误的。试试像
"fileLocation": "absolute",
从那以后,我花了更多时间来解决这个问题,并与 VSCode 团队进行了通信,这导致了 improvements in the documentation。
要让某些东西简单地工作,需要进行两项更改:
- 需要
"command": "/full/path/to/executable"
而不仅仅是 "executable name"
。
"fileLocation"
不是关于要匹配的文件的位置,而是关于如何处理任务输出中提到的文件路径。无法指定要匹配的文件,因为它隐式是任务执行时在编辑器中打开的文件或文件夹。该设置对我而言并不重要。
在 VSCode 中,我正在尝试创建一个 ProblemMatcher 来解析我 运行 的自定义脚本上的错误(markdown 文件 -> pandoc -> PDF,如果你感兴趣的话) .
相当不错的 VSCode ProblemMatcher documentation 有一个示例任务(对我来说)显示为 运行 一个命令 ("command": "gcc"
) 和 定义问题匹配器 ("problemMatcher": {...}
).
当我对我的 tasks.json 文件同时尝试此操作时,我收到“描述无法转换为问题匹配器”错误,这不是很有用。我检查了 tasks.json schema,它清楚地写着:
The problem matcher to be used if a global command is executed (e.g. no tasks are defined). A tasks.json file can either contain a global problemMatcher property or a tasks property but not both.
架构有误吗?在这种情况下我会提出一个问题。
还是我的代码有误?在这种情况下,请指出正确的方向。完整代码(减去注释):
{
"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
}
]
}
}]
}
只是预感,但我敢打赌你的 fileLocation 是错误的。试试像
"fileLocation": "absolute",
从那以后,我花了更多时间来解决这个问题,并与 VSCode 团队进行了通信,这导致了 improvements in the documentation。
要让某些东西简单地工作,需要进行两项更改:
- 需要
"command": "/full/path/to/executable"
而不仅仅是"executable name"
。 "fileLocation"
不是关于要匹配的文件的位置,而是关于如何处理任务输出中提到的文件路径。无法指定要匹配的文件,因为它隐式是任务执行时在编辑器中打开的文件或文件夹。该设置对我而言并不重要。