From 8523385bd8046723e174e57d0730277c2078720b Mon Sep 17 00:00:00 2001 From: Johan Larsson Date: Thu, 1 May 2025 10:59:47 +0200 Subject: [PATCH] plugins/schemastore: adapt to new lsp module Modify warnings, tests, and default settings to work with the new lsp module. Update plugins/by-name/schemastore/default.nix Co-authored-by: Matt Sturgeon Update plugins/by-name/schemastore/default.nix Co-authored-by: Matt Sturgeon --- plugins/by-name/schemastore/default.nix | 42 ++++- .../plugins/by-name/schemastore/default.nix | 144 +++++++++++------- 2 files changed, 130 insertions(+), 56 deletions(-) diff --git a/plugins/by-name/schemastore/default.nix b/plugins/by-name/schemastore/default.nix index 886e622f..435d3571 100644 --- a/plugins/by-name/schemastore/default.nix +++ b/plugins/by-name/schemastore/default.nix @@ -128,15 +128,22 @@ lib.nixvim.plugins.mkVimPlugin { message = "You have enabled the plugin, but neither `json` or `yaml` schemas are enabled."; } { - when = !(cfg.json.enable -> config.plugins.lsp.servers.jsonls.enable); - message = "You have enabled `json` schemas, but `plugins.lsp.servers.jsonls` is not enabled."; + when = + cfg.json.enable && !(config.plugins.lsp.servers.jsonls.enable || config.lsp.servers.jsonls.enable); + message = '' + You have enabled `json` schemas, but neither `plugins.lsp.servers.jsonls` nor `lsp.servers.jsonls` is enabled. + ''; } { - when = !(cfg.yaml.enable -> config.plugins.lsp.servers.yamlls.enable); - message = "You have enabled `yaml` schemas, but `plugins.lsp.servers.yamlls` is not enabled."; + when = + cfg.yaml.enable && !(config.plugins.lsp.servers.yamlls.enable || config.lsp.servers.yamlls.enable); + message = '' + You have enabled `yaml` schemas, but neither `plugins.lsp.servers.yamlls` nor `lsp.servers.yamlls` is enabled. + ''; } ]; + # TODO: Remove once `plugins.lsp` is defunct. plugins.lsp.servers = { jsonls.settings = mkIf cfg.json.enable { schemas.__raw = '' @@ -163,5 +170,32 @@ lib.nixvim.plugins.mkVimPlugin { ''; }; }; + + lsp.servers = { + jsonls.settings.settings = mkIf cfg.json.enable { + schemas.__raw = '' + require('schemastore').json.schemas(${lib.nixvim.toLuaObject cfg.json.settings}) + ''; + + # The plugin recommends to enable this option in its README. + # Learn more: https://github.com/b0o/SchemaStore.nvim/issues/8 + validate.enable = mkDefault true; + }; + + yamlls.settings.settings = mkIf cfg.yaml.enable { + schemaStore = { + # From the README: "You must disable built-in schemaStore support if you want to use + # this plugin and its advanced options like `ignore`." + enable = mkDefault false; + + # From the README: "Avoid TypeError: Cannot read properties of undefined (reading 'length')" + url = mkDefault ""; + }; + + schemas.__raw = '' + require('schemastore').yaml.schemas(${lib.nixvim.toLuaObject cfg.yaml.settings}) + ''; + }; + }; }; } diff --git a/tests/test-sources/plugins/by-name/schemastore/default.nix b/tests/test-sources/plugins/by-name/schemastore/default.nix index 79abd520..7b312595 100644 --- a/tests/test-sources/plugins/by-name/schemastore/default.nix +++ b/tests/test-sources/plugins/by-name/schemastore/default.nix @@ -1,5 +1,94 @@ { empty = { + lsp = { + servers = { + jsonls.enable = true; + yamlls.enable = true; + }; + }; + + plugins.schemastore.enable = true; + }; + + example = { + lsp = { + servers = { + jsonls.enable = true; + yamlls.enable = true; + }; + }; + + plugins.schemastore = { + enable = true; + + json = { + enable = true; + settings = { + replace."package.json" = { + description = "package.json overridden"; + fileMatch = [ "package.json" ]; + name = "package.json"; + url = "https://example.com/package.json"; + }; + 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"; + } + ]; + }; + }; + yaml = { + enable = true; + settings = { }; + }; + }; + }; + + withJson = { + lsp = { + servers.jsonls.enable = true; + }; + + plugins.schemastore = { + enable = true; + + json = { + enable = true; + settings = { }; + }; + yaml.enable = false; + }; + }; + + withYaml = { + lsp = { + servers.yamlls.enable = true; + }; + + plugins.schemastore = { + enable = true; + + json.enable = false; + yaml = { + enable = true; + settings = { }; + }; + }; + }; + + emptyOld = { plugins = { lsp = { enable = true; @@ -14,57 +103,7 @@ }; }; - example = { - plugins = { - lsp = { - enable = true; - - servers = { - jsonls.enable = true; - yamlls.enable = true; - }; - }; - - schemastore = { - enable = true; - - json = { - enable = true; - settings = { - replace."package.json" = { - description = "package.json overridden"; - fileMatch = [ "package.json" ]; - name = "package.json"; - url = "https://example.com/package.json"; - }; - 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"; - } - ]; - }; - }; - yaml = { - enable = true; - settings = { }; - }; - }; - }; - }; - - withJson = { + withJsonOld = { plugins = { lsp = { enable = true; @@ -83,7 +122,7 @@ }; }; - withYaml = { + withYamlOld = { plugins = { lsp = { enable = true; @@ -101,4 +140,5 @@ }; }; }; + }