diff --git a/docs/release-notes/rl-0.7.md b/docs/release-notes/rl-0.7.md index 87df91e7..351a0dc5 100644 --- a/docs/release-notes/rl-0.7.md +++ b/docs/release-notes/rl-0.7.md @@ -292,7 +292,6 @@ To migrate to `nixfmt`, simply change `vim.languages.nix.format.type` to - Add LSP, diagnostics, formatter and Treesitter support for Kotlin under `vim.languages.kotlin` - changed default keybinds for leap.nvim to avoid altering expected behavior -- Add LSP, formatter and Treesitter support for Vala under `vim.languages.vala` [Bloxx12](https://github.com/Bloxx12) diff --git a/modules/plugins/languages/vala.nix b/modules/plugins/languages/vala.nix index da65a372..58955fa7 100644 --- a/modules/plugins/languages/vala.nix +++ b/modules/plugins/languages/vala.nix @@ -6,10 +6,12 @@ }: let inherit (builtins) attrNames; inherit (lib.options) mkEnableOption mkOption; + inherit (lib.meta) getExe; + inherit (lib.nvim.languages) diagnosticsToLua; inherit (lib.modules) mkIf mkMerge; inherit (lib.lists) isList; inherit (lib.types) enum either listOf package str; - inherit (lib.nvim.types) mkGrammarOption; + inherit (lib.nvim.types) mkGrammarOption diagnostics; inherit (lib.nvim.lua) expToLua; cfg = config.vim.languages.vala; @@ -17,15 +19,8 @@ defaultServer = "vala_ls"; servers = { vala_ls = { - package = pkgs.symlinkJoin { - name = "vala-language-server-wrapper"; - paths = [pkgs.vala-language-server]; - buildInputs = [pkgs.makeBinaryWrapper]; - postBuild = '' - wrapProgram $out/bin/vala-language-server \ - --prefix PATH : ${pkgs.uncrustify}/bin - ''; - }; + package = pkgs.vala-language-server; + runtimeInputs = pkgs.uncrustify; internalFormatter = true; lspConfig = '' lspconfig.vala_ls.setup { @@ -40,6 +35,21 @@ ''; }; }; + + defaultDiagnosticsProvider = ["vala-lint"]; + diagnosticsProviders = { + vala-lint = { + package = pkgs.vala-lint; + nullConfig = pkg: '' + table.insert( + ls_sources, + null_ls.builtins.diagnostics.vala_lint.with({ + command = "${getExe pkg}", + }) + ) + ''; + }; + }; in { options.vim.languages.vala = { enable = mkEnableOption "Vala language support"; @@ -59,10 +69,20 @@ in { package = mkOption { description = "Vala LSP server package, or the command to run as a list of strings"; + example = ''[lib.getExe pkgs.vala-language-server]''; type = either package (listOf str); default = servers.${cfg.lsp.server}.package; }; }; + + extraDiagnostics = { + enable = mkEnableOption "extra Vala diagnostics" // {default = config.vim.languages.enableExtraDiagnostics;}; + types = diagnostics { + langDesc = "Vala"; + inherit diagnosticsProviders; + inherit defaultDiagnosticsProvider; + }; + }; }; config = mkIf cfg.enable (mkMerge [ @@ -71,6 +91,15 @@ in { vim.treesitter.grammars = [cfg.treesitter.package]; }) + (mkIf cfg.extraDiagnostics.enable { + vim.lsp.null-ls.enable = true; + vim.lsp.null-ls.sources = diagnosticsToLua { + lang = "Vala"; + config = cfg.extraDiagnostics.types; + inherit diagnosticsProviders; + }; + }) + (mkIf cfg.lsp.enable { vim.lsp.lspconfig.enable = true; vim.lsp.lspconfig.sources.vala_ls = servers.${cfg.lsp.server}.lspConfig;