A Neovim plugin that provides the SchemaStore catalog for use with jsonls and yamlls.
"b0o/schemastore.nvim",
use "b0o/schemastore.nvim"
To use SchemaStore.nvim with lspconfig + jsonls:
require('lspconfig').jsonls.setup {
settings = {
json = {
schemas = require('schemastore').json.schemas(),
validate = { enable = true },
},
},
}
For an explanation of why the validate = { enable = true }
option is recommended, see #8.
yamlls is also supported:
require('lspconfig').yamlls.setup {
settings = {
yaml = {
schemaStore = {
-- You must disable built-in schemaStore support if you want to use
-- this plugin and its advanced options like `ignore`.
enable = false,
-- Avoid TypeError: Cannot read properties of undefined (reading 'length')
url = "",
},
schemas = require('schemastore').yaml.schemas(),
},
},
}
To use a subset of the catalog, you can select schemas by name (see the catalog for a full list):
require('lspconfig').jsonls.setup {
settings = {
json = {
schemas = require('schemastore').json.schemas {
select = {
'.eslintrc',
'package.json',
},
},
validate = { enable = true },
},
},
}
To ignore certain schemas from the catalog:
require('lspconfig').jsonls.setup {
settings = {
json = {
schemas = require('schemastore').json.schemas {
ignore = {
'.eslintrc',
'package.json',
},
},
validate = { enable = true },
},
},
}
Note that the select
and ignore
options are mutually exclusive and
attempting to use them together will throw an error.
To replace certain schemas from the catalog with your own:
require('lspconfig').jsonls.setup {
settings = {
json = {
schemas = require('schemastore').json.schemas {
replace = {
['package.json'] = {
description = 'package.json overridden',
fileMatch = { 'package.json' },
name = 'package.json',
url = 'https://example.com/package.json',
},
},
},
validate = { enable = true },
},
},
}
If you want to include additional schemas, you can use extra
:
require('lspconfig').jsonls.setup {
settings = {
json = {
schemas = require('schemastore').json.schemas {
extra = {
{
description = 'My custom JSON schema',
fileMatch = 'foo.json',
name = 'foo.json',
url = 'https://example.com/schema/foo.json',
},
{
description = 'My other custom JSON schema',
fileMatch = { 'bar.json', '.baar.json' },
name = 'bar.json',
url = 'https://example.com/schema/bar.json',
},
},
},
validate = { enable = true },
},
},
}
To use a local schema file, specify the path using the file://
scheme or plain file paths:
require("schemastore").json.schemas({
extra = {
{
description = "Local JSON schema",
fileMatch = "local.json",
name = "local.json",
url = "file:///path/to/your/schema.json", -- or '/path/to/your/schema.json'
},
},
})
ยฉ 2021-2024 Maddison Hellstrom and Contributors.
Released under the Apache 2.0 License.