使用本地模式文件的VSCode jsonValidation

时间:2017-03-14 01:24:46

标签: visual-studio-code vscode-extensions

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>

显然,它正在接触服务器,而不是从扩展中读取本地文件。但文档说我可以在扩展中包含一个模式文件。我如何使它工作?

1 个答案:

答案 0 :(得分:1)

想出来:url缺少一个前导点,如下所示:

"jsonValidation": [{
    "fileMatch": "*.testing",
    "url": "./schemas/testing.schema.json"
}]

url以此./模式开头时,它会自动被理解为扩展程序附带的文件。如果前面缺少./甚至只是.,则会将其视为要从服务器获取的URL。

由于vscode是开源的,我可以引用实现此行为的代码行。

就在这里:jsonMain.ts#L105