contributes.jsonValidation的文档说:
url值可以是扩展中包含的模式文件的本地路径,也可以是远程服务器URL(如json模式存储)。
URL值的工作原理如下:
"jsonValidation": [{
"fileMatch": ".jshintrc",
"url": "http://json.schemastore.org/jshintrc"
}]
但是,如果我创建一个测试扩展并给出一个我的扩展本地文件的路径,它不会:
"jsonValidation": [{
"fileMatch": "*.testing",
"url": "/schemas/testing.schema.json"
}]
我的扩展程序的根目录中有一个文件夹schemas
,其中包含一个文件testing.schema.json
。它只是jshintrc架构的副本。
当我启动我的测试扩展,并加载一个与模式匹配的文件时,我在第一个打开的大括号下面会有一点绿色的波浪形。如果我将绿色波浪线悬停,我会看到一个熟悉的错误:
无法从'/schemas/edfoo.schema.json'加载架构:<!DOCTYPE html PUBLIC“ - // W3C // DTD XHTML 1.0 Strict // EN”“http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd”> < html xmlns =“http://www.w3.org/1999/xhtml”> < HEAD> < title> IIS 10.0详细错误 - 404.0 - 未找到< / title>
显然,它正在接触服务器,而不是从扩展中读取本地文件。但文档说我可以在扩展中包含一个模式文件。我如何使它工作?
答案 0 :(得分:1)
想出来:url
缺少一个前导点,如下所示:
"jsonValidation": [{
"fileMatch": "*.testing",
"url": "./schemas/testing.schema.json"
}]
当url
以此./
模式开头时,它会自动被理解为扩展程序附带的文件。如果前面缺少./
甚至只是.
,则会将其视为要从服务器获取的URL。
由于vscode是开源的,我可以引用实现此行为的代码行。
就在这里:jsonMain.ts#L105