diff --git a/plugins/by-name/none-ls/prettier.nix b/plugins/by-name/none-ls/prettier.nix index 64af50b8..773dea55 100644 --- a/plugins/by-name/none-ls/prettier.nix +++ b/plugins/by-name/none-ls/prettier.nix @@ -1,14 +1,14 @@ { lib, config, ... }: let cfg = config.plugins.none-ls.sources.formatting.prettier; - ts-ls-cfg = config.plugins.lsp.servers.ts-ls; + ts-ls-cfg = config.plugins.lsp.servers.ts_ls; in { options.plugins.none-ls.sources.formatting.prettier = { disableTsServerFormatter = lib.mkOption { type = with lib.types; nullOr bool; description = '' - Disables the formatting capability of the `ts-ls` language server if it is enabled. + Disables the formatting capability of the `ts_ls` language server if it is enabled. ''; default = null; example = true; @@ -18,14 +18,14 @@ in config = lib.mkIf cfg.enable { warnings = lib.optional ((cfg.disableTsServerFormatter == null) && ts-ls-cfg.enable) '' You have enabled the `prettier` formatter in none-ls. - You have also enabled the `ts-ls` language server which also brings a formatting feature. + You have also enabled the `ts_ls` language server which also brings a formatting feature. - - To disable the formatter built-in the `ts-ls` language server, set + - To disable the formatter built-in the `ts_ls` language server, set `plugins.none-ls.sources.formatting.prettier.disableTsServerFormatter` to `true`. - Else, to silence this warning, explicitly set the option to `false`. ''; - plugins.lsp.servers.ts-ls = + plugins.lsp.servers.ts_ls = lib.mkIf ( cfg.enable diff --git a/plugins/lsp/language-servers/_mk-lsp.nix b/plugins/lsp/language-servers/_mk-lsp.nix index 8d1df8a8..cf4cf4b0 100644 --- a/plugins/lsp/language-servers/_mk-lsp.nix +++ b/plugins/lsp/language-servers/_mk-lsp.nix @@ -58,7 +58,8 @@ in cmd = mkOption { type = with types; nullOr (listOf str); - default = if (cfg.package or null) != null then cmd cfg else null; + default = + if (cfg.package or null) != null then if builtins.isFunction cmd then cmd cfg else cmd else null; description = '' A list where each entry corresponds to the blankspace delimited part of the command that launches the server. diff --git a/plugins/lsp/language-servers/_renamed.nix b/plugins/lsp/language-servers/_renamed.nix new file mode 100644 index 00000000..443630ab --- /dev/null +++ b/plugins/lsp/language-servers/_renamed.nix @@ -0,0 +1,39 @@ +{ + tsserver = "ts-ls"; + + # TODO: Remove after 24.11 + # Names before the LSP server auto-generation + ast-grep = "ast_grep"; + clojure-lsp = "clojure_lsp"; + csharp-ls = "csharp_ls"; + dhall-lsp-server = "dhall_lsp_server"; + docker-compose-language-service = "docker_compose_language_service"; + emmet-ls = "emmet_ls"; + futhark-lsp = "futhark_lsp"; + golangci-lint-ls = "golangci_lint_ls"; + harper-ls = "harper_ls"; + helm-ls = "helm_ls"; + idris2-lsp = "idris2_lsp"; + java-language-server = "java_language_server"; + jdt-language-server = "jdtls"; + jsonnet-ls = "jsonnet_ls"; + kotlin-language-server = "kotlin_language_server"; + lua-ls = "lua_ls"; + nginx-language-server = "nginx_language_server"; + nickel-ls = "nickel_ls"; + nil-ls = "nil_ls"; + openscad-lsp = "openscad_lsp"; + pest-ls = "pest_ls"; + prolog-ls = "prolog_ls"; + r-language-server = "r_language_server"; + rnix-lsp = "rnix"; + ruby-lsp = "ruby_lsp"; + ruff-lsp = "ruff_lsp"; + rust-analyzer = "rust_analyzer"; + slint-lsp = "slint_lsp"; + ts-ls = "ts_ls"; + typos-lsp = "typos_lsp"; + typst-lsp = "typst_lsp"; + vala-ls = "vala_ls"; + vhdl-ls = "vhdl_ls"; +} diff --git a/plugins/lsp/language-servers/default.nix b/plugins/lsp/language-servers/default.nix index dd15f24f..cc51058b 100644 --- a/plugins/lsp/language-servers/default.nix +++ b/plugins/lsp/language-servers/default.nix @@ -6,197 +6,14 @@ }: with lib; let - servers = [ - { - name = "ansiblels"; - description = "ansiblels for Ansible"; - package = "ansible-language-server"; - cmd = cfg: [ - "${cfg.package}/bin/ansible-language-server" - "--stdio" - ]; - } - { - name = "ast-grep"; - description = '' - ast-grep(sg) is a fast and polyglot tool for code structural search, lint, rewriting at large scale. - ast-grep LSP only works in projects that have `sgconfig.y[a]ml` in their root directories. - ''; - serverName = "ast_grep"; - } - { - name = "astro"; - description = "astrols for Astro"; - package = "astro-language-server"; - cmd = cfg: [ - "${cfg.package}/bin/astro-ls" - "--stdio" - ]; - } - { - name = "basedpyright"; - description = "basedpyright, a static type checker and language server for python"; - } - { - name = "bashls"; - description = "bashls for bash"; - package = "bash-language-server"; - } - { - name = "beancount"; - description = "beancount-language-server"; - package = "beancount-language-server"; - } - { - name = "biome"; - description = "Biome, Toolchain of the Web"; - } - { - name = "bufls"; - description = "Prototype for a Protobuf language server compatible with Buf."; - package = "buf-language-server"; - } - { - name = "ccls"; - description = "ccls for C/C++"; - } - { - name = "clangd"; - description = "clangd LSP for C/C++"; - package = "clang-tools"; - } - { - name = "clojure-lsp"; - description = "clojure-lsp for Clojure"; - serverName = "clojure_lsp"; - } - { - name = "cmake"; - description = "cmake language server"; - package = "cmake-language-server"; - } - { - name = "csharp-ls"; - description = "csharp-ls for C#"; - serverName = "csharp_ls"; - } - { - name = "cssls"; - description = "cssls for CSS"; - package = "vscode-langservers-extracted"; - cmd = cfg: [ - "${cfg.package}/bin/vscode-css-language-server" - "--stdio" - ]; - } - { - name = "dagger"; - description = "dagger for Cuelang"; - package = "cuelsp"; - } - { - name = "dartls"; - description = "dart language-server"; - package = "dart"; + renamedServers = import ./_renamed.nix; + + lspExtraArgs = { + dartls = { settingsOptions = import ./dartls-settings.nix { inherit lib helpers; }; settings = cfg: { dart = cfg; }; - } - { - name = "denols"; - description = "denols for Deno"; - package = "deno"; - } - { - name = "dhall-lsp-server"; - description = "dhall-lsp-server for Dhall"; - serverName = "dhall_lsp_server"; - } - { - name = "digestif"; - description = "digestif for LaTeX"; - # luaPackages.digestif is currently broken, using lua54Packages instead - package = [ - "lua54Packages" - "digestif" - ]; - } - { - name = "docker-compose-language-service"; - description = "docker-compose-language-service for Docker Compose"; - serverName = "docker_compose_language_service"; - } - { - name = "dockerls"; - description = "dockerls for Dockerfile"; - package = "dockerfile-language-server-nodejs"; - cmd = cfg: [ - "${cfg.package}/bin/docker-langserver" - "--stdio" - ]; - } - { - name = "efm"; - description = "efm-langserver for misc tools"; - package = "efm-langserver"; - } - { - name = "elmls"; - description = "elmls for Elm"; - package = [ - "elmPackages" - "elm-language-server" - ]; - } - { - name = "emmet-ls"; - description = "emmet_ls, emmet support based on LSP"; - serverName = "emmet_ls"; - } - { - name = "eslint"; - package = "vscode-langservers-extracted"; - cmd = cfg: [ - "${cfg.package}/bin/vscode-eslint-language-server" - "--stdio" - ]; - } - { - name = "elixirls"; - package = "elixir-ls"; - cmd = cfg: [ "${cfg.package}/bin/elixir-ls" ]; - } - { - name = "fortls"; - description = "fortls for Fortran"; - cmd = cfg: [ - "${cfg.package}/bin/fortls" - "--hover_signature" - "--hover_language=fortran" - "--use_signature_help" - ]; - } - { - name = "fsautocomplete"; - description = "fsautocomplete for F#"; - } - { - name = "futhark-lsp"; - description = "futhark-lsp for Futhark"; - package = "futhark"; - serverName = "futhark_lsp"; - } - { - name = "gdscript"; - description = "gdscript for Godot"; - package = null; - } - { - name = "gleam"; - description = "gleam for gleam"; - } - { - name = "gopls"; - description = "gopls for Go"; + }; + gopls = { extraOptions = { goPackage = lib.mkPackageOption pkgs "go" { nullable = true; @@ -205,224 +22,40 @@ let extraConfig = cfg: { extraPackages = [ cfg.goPackage ]; }; - } - { - name = "golangci-lint-ls"; - description = "golangci-lint-ls for Go"; - serverName = "golangci_lint_ls"; - package = "golangci-lint-langserver"; - } - { - name = "graphql"; - description = "graphql for GraphQL"; - package = [ - "nodePackages" - "graphql-language-service-cli" - ]; - } - { - name = "harper-ls"; - description = "The Grammar Checker for Developers"; - serverName = "harper_ls"; - package = "harper"; - } - { - name = "helm-ls"; - description = "helm_ls for Helm"; - serverName = "helm_ls"; - } - { - name = "hls"; - description = "haskell language server"; - package = "haskell-language-server"; - cmd = cfg: [ - "haskell-language-server-wrapper" - "--lsp" - ]; - } - { - name = "html"; - description = "HTML language server from `vscode-langservers-extracted`"; - package = "vscode-langservers-extracted"; - cmd = cfg: [ - "${cfg.package}/bin/vscode-html-language-server" - "--stdio" - ]; - } - { - name = "htmx"; - description = "htmx for HTMX"; - package = "htmx-lsp"; - } - { - name = "idris2-lsp"; - description = '' - Idris 2 Language Server. - Enabling this also enables the required `idris2` plugin. - ''; - serverName = "idris2_lsp"; - package = [ - "idris2Packages" - "idris2Lsp" - ]; + }; + idris2_lsp = { extraConfig = cfg: mkIf cfg.enable { plugins.idris2.enable = lib.mkDefault true; }; - } - { - name = "intelephense"; - description = "intelephense for PHP"; - package = [ - "nodePackages" - "intelephense" - ]; - } - { - name = "java-language-server"; - description = "Java language server"; - serverName = "java_language_server"; - cmd = cfg: [ "${cfg.package}/bin/java-language-server" ]; - } - { - name = "jdt-language-server"; - description = "Eclipse JDT Language Server for Java"; - serverName = "jdtls"; - cmd = cfg: [ (lib.getExe cfg.package) ]; - } - { - name = "jsonls"; - description = "jsonls for JSON"; - package = "vscode-langservers-extracted"; - cmd = cfg: [ - "${cfg.package}/bin/vscode-json-language-server" - "--stdio" - ]; + }; + jsonls = { settings = cfg: { json = cfg; }; - } - { - name = "jsonnet-ls"; - description = "jsonnet language server"; - package = "jsonnet-language-server"; - serverName = "jsonnet_ls"; + }; + jsonnet_ls = { settingsOptions = import ./jsonnet-ls-settings.nix { inherit lib helpers; }; - } - { - name = "julials"; - description = "julials for Julia"; - # The julia language server has to be installed from julia and thus is not packaged "as is" in - # nixpkgs. - package = null; - } - { - name = "kotlin-language-server"; - description = "Kotlin language server"; - serverName = "kotlin_language_server"; - } - { - name = "leanls"; - description = "leanls for Lean"; - package = "lean4"; - } - { - name = "lemminx"; - description = "lemminx for XML"; - } - { - name = "lexical"; - description = "lexical for Elixir"; - } - { - name = "ltex"; - description = "ltex-ls for LanguageTool"; - package = "ltex-ls"; + }; + ltex = { settingsOptions = import ./ltex-settings.nix { inherit lib helpers; }; settings = cfg: { ltex = cfg; }; - } - { - name = "lua-ls"; - description = "lua-ls for Lua"; - package = "lua-language-server"; - serverName = "lua_ls"; + }; + lua_ls = { settingsOptions = import ./lua-ls-settings.nix { inherit lib helpers; }; settings = cfg: { Lua = cfg; }; - } - { - name = "marksman"; - description = "marksman for Markdown"; - } - { - name = "metals"; - description = "metals for Scala"; - } - { - name = "nextls"; - description = "The language server for Elixir that just works."; - package = "next-ls"; - cmd = cfg: [ - "nextls" - "--stdio" - ]; - } - { - name = "nginx-language-server"; - description = "nginx-language-server for `nginx.conf`"; - serverName = "nginx_language_server"; - } - { - name = "nickel-ls"; - description = "nls for Nickel"; - package = "nls"; - serverName = "nickel_ls"; - } - { - name = "nil-ls"; - description = "nil for Nix"; - package = "nil"; - serverName = "nil_ls"; + }; + nil_ls = { settingsOptions = import ./nil-ls-settings.nix { inherit lib helpers; }; settings = cfg: { nil = cfg; }; - } - { - name = "nimls"; - description = "nimls for Nim"; - package = "nimlsp"; - } - { - name = "nixd"; - description = "nixd for Nix"; + }; + nixd = { settings = cfg: { nixd = cfg; }; settingsOptions = import ./nixd-settings.nix { inherit lib helpers; }; extraConfig = cfg: { extraPackages = optional (cfg.settings.formatting.command == [ "nixpkgs-fmt" ]) pkgs.nixpkgs-fmt; }; - } - { - name = "nushell"; - description = "Nushell language server"; - cmd = cfg: [ - "${cfg.package}/bin/nu" - "--lsp" - ]; - } - { - name = "ocamllsp"; - description = "ocamllsp for OCaml"; - package = [ - "ocamlPackages" - "ocaml-lsp" - ]; - } - { - name = "ols"; - description = "ols for the Odin programming language"; - } - { - name = "omnisharp"; - description = "OmniSharp language server for C#"; - package = "omnisharp-roslyn"; - cmd = cfg: [ "${cfg.package}/bin/OmniSharp" ]; + }; + omnisharp = { settings = cfg: { omnisharp = cfg; }; settingsOptions = { enableEditorConfigSupport = helpers.defaultNullOpts.mkBool true '' @@ -471,180 +104,19 @@ let Only run analyzers against open files when 'enableRoslynAnalyzers' is true. ''; }; - } - { - name = "openscad-lsp"; - description = "A Language Server Protocol server for OpenSCAD"; - serverName = "openscad_lsp"; - } - { - name = "perlpls"; - description = "PLS for Perl"; - package = [ - "perlPackages" - "PLS" - ]; - } - { - name = "pest-ls"; - description = "pest_ls for pest"; - package = "pest-ide-tools"; - serverName = "pest_ls"; - } - { - name = "phpactor"; - description = "phpactor for PHP"; - package = "phpactor"; - } - { - name = "prismals"; - description = "prismals for Prisma"; - package = [ - "nodePackages" - "@prisma/language-server" - ]; - } - { - name = "prolog-ls"; - description = "prolog_ls for SWI-Prolog"; - serverName = "prolog_ls"; - package = "swi-prolog"; - } - { - name = "purescriptls"; - description = "purescriptls for PureScript"; - package = [ - "nodePackages" - "purescript-language-server" - ]; - } - { - name = "pylsp"; - description = "pylsp for Python"; - package = [ - "python3Packages" - "python-lsp-server" - ]; + }; + pylsp = { settings = cfg: { pylsp = cfg; }; - } - { - name = "pylyzer"; - description = "pylyzer for Python"; - } - { - name = "pyright"; - description = "pyright for Python"; - } - { - name = "r-language-server"; - description = "languageserver for R"; - package = [ - "rPackages" - "languageserver" - ]; - serverName = "r_language_server"; - } - { - name = "rnix-lsp"; - description = "rnix LSP for Nix"; - serverName = "rnix"; - package = null; - } - { - name = "ruby-lsp"; - description = "ruby-lsp for Ruby"; - serverName = "ruby_lsp"; - } - { - name = "ruff"; - description = "Official ruff language server (Rust) for Python"; - } - { - name = "ruff-lsp"; - description = "ruff-lsp, for Python"; - serverName = "ruff_lsp"; - } - { - name = "rust-analyzer"; - description = "rust-analyzer for Rust"; - serverName = "rust_analyzer"; - + }; + rust_analyzer = { settingsOptions = import ./rust-analyzer-config.nix lib helpers; settings = cfg: { rust-analyzer = cfg; }; - } - { - name = "slint-lsp"; - description = "slint_lsp for Slint GUI language"; - serverName = "slint_lsp"; - } - { - name = "solargraph"; - description = "solargraph for Ruby"; - package = [ - "rubyPackages" - "solargraph" - ]; - } - { - name = "sourcekit"; - description = "sourcekit language server for Swift and C/C++/Objective-C"; - package = "sourcekit-lsp"; - } - { - name = "sqls"; - description = "sqls for SQL"; - } - { - name = "svelte"; - description = "svelte language server for Svelte"; - package = [ - "nodePackages" - "svelte-language-server" - ]; - } - { - name = "tailwindcss"; - description = "tailwindcss language server for tailwindcss"; - package = [ - "nodePackages" - "@tailwindcss/language-server" - ]; - } - { - name = "taplo"; - description = "taplo for TOML"; - } - { - name = "templ"; - description = "templ language server for the templ HTML templating language"; - } - { - name = "terraformls"; - description = "terraform-ls for terraform"; - package = "terraform-ls"; - } - { - name = "texlab"; - description = "texlab language server for LaTeX"; - } - { - name = "tflint"; - description = "tflint, a terraform linter"; - } - { - name = "tinymist"; - description = "tinymist for Typst"; - settingsOptions = import ./tinymist-settings.nix { inherit lib helpers; }; - } - { - name = "ts-ls"; - serverName = "ts_ls"; - description = "ts_ls for TypeScript"; - package = "typescript-language-server"; + }; + ts_ls = { # NOTE: Provide the plugin default filetypes so that # `plugins.lsp.servers.volar.tslsIntegration` doesn't wipe out the default filetypes extraConfig = cfg: { - plugins.lsp.servers.ts-ls = { + plugins.lsp.servers.ts_ls = { filetypes = [ "javascript" "javascriptreact" @@ -655,34 +127,8 @@ let ]; }; }; - } - { - name = "typos-lsp"; - serverName = "typos_lsp"; - description = "Source code spell checker for Visual Studio Code and LSP clients"; - } - { - name = "typst-lsp"; - serverName = "typst_lsp"; - description = "typst-lsp for typst"; - } - { - name = "vala-ls"; - description = "vala_ls for Vala"; - serverName = "vala_ls"; - package = "vala-language-server"; - } - { - name = "vhdl-ls"; - description = "vhdl_ls for VHDL"; - serverName = "vhdl_ls"; - } - { - name = "vls"; - description = "vls for V"; - # The v language server has to be installed from v and thus is not packaged "as is" in - # nixpkgs. - package = null; + }; + vls = { extraOptions = { autoSetFiletype = mkOption { type = types.bool; @@ -697,22 +143,8 @@ let extraConfig = cfg: { filetype.extension = mkIf (cfg.enable && cfg.autoSetFiletype) { v = "vlang"; }; }; - } - { - name = "vuels"; - description = "vuels for Vue"; - package = [ - "nodePackages" - "vls" - ]; - } - { - name = "volar"; - description = "@volar/vue-language-server for Vue"; - package = [ - "nodePackages" - "@volar/vue-language-server" - ]; + }; + volar = { extraOptions = { tslsIntegration = mkOption { type = types.bool; @@ -724,7 +156,7 @@ let }; }; extraConfig = cfg: { - plugins.lsp.servers.ts-ls = lib.mkIf (cfg.enable && cfg.tslsIntegration) { + plugins.lsp.servers.ts_ls = lib.mkIf (cfg.enable && cfg.tslsIntegration) { filetypes = [ "vue" ]; extraOptions = { init_options = { @@ -739,27 +171,48 @@ let }; }; }; - } - { - name = "yamlls"; - description = "yamlls for YAML"; - package = "yaml-language-server"; + }; + yamlls = { settings = cfg: { yaml = cfg; }; - } - { - name = "zls"; - description = "zls for Zig"; - } - ]; - renamedServers = { - tsserver = "ts-ls"; + }; }; + + lspPackages = import ../lsp-packages.nix; + + getLspPackage = + name: + if lib.hasAttr name lspPackages.packages then + { package = lspPackages.packages.${name}; } + else if lib.hasAttr name lspPackages.customCmd then + { inherit (lspPackages.customCmd.${name}) package cmd; } + else + assert lib.assertMsg (lib.elem name lspPackages.unpackaged) "LSP server ${name} is unknown"; + { + package = null; + }; + + generatedServers = lib.pipe ../../../generated/lspconfig-servers.json [ + lib.importJSON + (lib.map ( + { + name, + desc ? "${name} language server", + ... + }: + { + inherit name; + description = desc; + } + // (getLspPackage name) + // (lspExtraArgs.${name} or { }) + )) + ]; in { imports = let mkLsp = import ./_mk-lsp.nix; - lspModules = map mkLsp servers; + lspModules = map mkLsp generatedServers; baseLspPath = [ "plugins" "lsp" diff --git a/plugins/lsp/language-servers/rust-analyzer.nix b/plugins/lsp/language-servers/rust-analyzer.nix index 62a66415..465c8693 100644 --- a/plugins/lsp/language-servers/rust-analyzer.nix +++ b/plugins/lsp/language-servers/rust-analyzer.nix @@ -6,10 +6,10 @@ }: with lib; let - cfg = config.plugins.lsp.servers.rust-analyzer; + cfg = config.plugins.lsp.servers.rust_analyzer; in { - options.plugins.lsp.servers.rust-analyzer = { + options.plugins.lsp.servers.rust_analyzer = { # https://github.com/nix-community/nixvim/issues/674 installCargo = mkOption { type = with types; nullOr bool; @@ -35,21 +35,21 @@ in warnings = (optional (cfg.installCargo == null) '' `rust_analyzer` relies on `cargo`. - - Set `plugins.lsp.servers.rust-analyzer.installCargo = true` to install it automatically + - Set `plugins.lsp.servers.rust_analyzer.installCargo = true` to install it automatically with Nixvim. You can customize which package to install by changing - `plugins.lsp.servers.rust-analyzer.cargoPackage`. - - Set `plugins.lsp.servers.rust-analyzer.installCargo = false` to not have it install + `plugins.lsp.servers.rust_analyzer.cargoPackage`. + - Set `plugins.lsp.servers.rust_analyzer.installCargo = false` to not have it install through Nixvim. By doing so, you will dismiss this warning. '') ++ (optional (cfg.installRustc == null) '' `rust_analyzer` relies on `rustc`. - - Set `plugins.lsp.servers.rust-analyzer.installRustc = true` to install it automatically + - Set `plugins.lsp.servers.rust_analyzer.installRustc = true` to install it automatically with Nixvim. You can customize which package to install by changing - `plugins.lsp.servers.rust-analyzer.rustcPackage`. - - Set `plugins.lsp.servers.rust-analyzer.installRustc = false` to not have it install + `plugins.lsp.servers.rust_analyzer.rustcPackage`. + - Set `plugins.lsp.servers.rust_analyzer.installRustc = false` to not have it install through Nixvim. By doing so, you will dismiss this warning. ''); diff --git a/tests/lsp-servers.nix b/tests/lsp-servers.nix index e66e867f..d0bd871a 100644 --- a/tests/lsp-servers.nix +++ b/tests/lsp-servers.nix @@ -9,7 +9,7 @@ pkgs.lib.optionalAttrs servers = { ansiblels.enable = true; - ast-grep.enable = true; + ast_grep.enable = true; astro.enable = true; basedpyright.enable = true; bashls.enable = true; @@ -18,53 +18,53 @@ pkgs.lib.optionalAttrs bufls.enable = true; ccls.enable = true; clangd.enable = true; - clojure-lsp.enable = true; + clojure_lsp.enable = true; cmake.enable = true; - csharp-ls.enable = true; + csharp_ls.enable = true; cssls.enable = true; dagger.enable = true; dartls.enable = true; denols.enable = true; - dhall-lsp-server.enable = true; + dhall_lsp_server.enable = true; digestif.enable = true; - docker-compose-language-service.enable = true; + docker_compose_language_service.enable = true; dockerls.enable = true; efm.enable = true; elmls.enable = true; - emmet-ls.enable = true; + emmet_ls.enable = true; eslint.enable = true; elixirls.enable = true; fortls.enable = true; # pkgs.fsautocomplete only supports linux platforms fsautocomplete.enable = pkgs.stdenv.isLinux; - futhark-lsp.enable = true; + futhark_lsp.enable = true; gleam.enable = true; gopls.enable = true; - golangci-lint-ls.enable = true; + golangci_lint_ls.enable = true; graphql.enable = true; - harper-ls.enable = true; - helm-ls.enable = true; + harper_ls.enable = true; + helm_ls.enable = true; hls.enable = true; html.enable = true; htmx.enable = true; - idris2-lsp.enable = true; - java-language-server.enable = true; - jdt-language-server.enable = true; + idris2_lsp.enable = true; + java_language_server.enable = true; + jdtls.enable = true; jsonls.enable = true; - jsonnet-ls.enable = true; + jsonnet_ls.enable = true; julials.enable = true; - kotlin-language-server.enable = true; + kotlin_language_server.enable = true; leanls.enable = true; lemminx.enable = true; lexical.enable = true; ltex.enable = true; - lua-ls.enable = true; + lua_ls.enable = true; marksman.enable = true; metals.enable = true; nextls.enable = true; - nginx-language-server.enable = true; - nickel-ls.enable = true; - nil-ls.enable = true; + nginx_language_server.enable = true; + nickel_ls.enable = true; + nil_ls.enable = true; nimls.enable = true; nixd.enable = true; nushell.enable = true; @@ -73,25 +73,25 @@ pkgs.lib.optionalAttrs # ols is not supported on aarch64-linux pkgs.stdenv.hostPlatform.system != "aarch64-linux"; omnisharp.enable = true; - openscad-lsp.enable = true; + openscad_lsp.enable = true; perlpls.enable = true; - pest-ls.enable = true; + pest_ls.enable = true; prismals.enable = true; - prolog-ls.enable = true; + prolog_ls.enable = true; purescriptls.enable = true; pylsp.enable = true; pylyzer.enable = true; pyright.enable = true; - r-language-server.enable = true; - ruby-lsp.enable = true; + r_language_server.enable = true; + ruby_lsp.enable = true; ruff.enable = true; - ruff-lsp.enable = true; - rust-analyzer = { + ruff_lsp.enable = true; + rust_analyzer = { enable = true; installCargo = true; installRustc = true; }; - slint-lsp.enable = true; + slint_lsp.enable = true; solargraph.enable = true; # As of 2024-09-13, sourcekit-lsp is broken due to swift dependency # TODO: re-enable this test when fixed @@ -105,11 +105,11 @@ pkgs.lib.optionalAttrs texlab.enable = true; tflint.enable = true; tinymist.enable = true; - ts-ls.enable = true; - typos-lsp.enable = true; - typst-lsp.enable = true; - vala-ls.enable = true; - vhdl-ls.enable = true; + ts_ls.enable = true; + typos_lsp.enable = true; + typst_lsp.enable = true; + vala_ls.enable = true; + vhdl_ls.enable = true; vls.enable = true; vuels.enable = true; yamlls.enable = true; diff --git a/tests/test-sources/example-configurations/issues.nix b/tests/test-sources/example-configurations/issues.nix index d87f91d5..a25494fe 100644 --- a/tests/test-sources/example-configurations/issues.nix +++ b/tests/test-sources/example-configurations/issues.nix @@ -31,7 +31,7 @@ lsp = { enable = true; servers = { - rust-analyzer = { + rust_analyzer = { enable = true; installCargo = true; installRustc = true; @@ -84,7 +84,7 @@ enable = true; servers = { nixd.enable = true; - rust-analyzer = { + rust_analyzer = { enable = true; installCargo = true; installRustc = true; diff --git a/tests/test-sources/plugins/lsp/_lsp.nix b/tests/test-sources/plugins/lsp/_lsp.nix index 46158ca9..93bebc38 100644 --- a/tests/test-sources/plugins/lsp/_lsp.nix +++ b/tests/test-sources/plugins/lsp/_lsp.nix @@ -67,13 +67,13 @@ enable = true; package = null; }; - nil-ls.enable = true; - rust-analyzer = { + nil_ls.enable = true; + rust_analyzer = { enable = true; installCargo = true; installRustc = true; }; - ruff-lsp = { + ruff_lsp = { enable = true; extraOptions = { init_options.settings.args = [ "--config=/path/to/config.toml" ]; @@ -102,7 +102,7 @@ enable = true; servers = { volar.enable = true; - ts-ls = { + ts_ls = { enable = true; filetypes = [ "typescript" ]; }; @@ -111,17 +111,17 @@ assertions = [ { - assertion = lib.any (x: x == "vue") config.plugins.lsp.servers.ts-ls.filetypes; + assertion = lib.any (x: x == "vue") config.plugins.lsp.servers.ts_ls.filetypes; message = "Expected `vue` filetype configuration."; } { assertion = lib.any ( x: x.name == "@vue/typescript-plugin" - ) config.plugins.lsp.servers.ts-ls.extraOptions.init_options.plugins; + ) config.plugins.lsp.servers.ts_ls.extraOptions.init_options.plugins; message = "Expected `@vue/typescript-plugin` plugin."; } { - assertion = lib.any (x: x == "typescript") config.plugins.lsp.servers.ts-ls.filetypes; + assertion = lib.any (x: x == "typescript") config.plugins.lsp.servers.ts_ls.filetypes; message = "Expected `typescript` filetype configuration."; } ]; @@ -133,7 +133,7 @@ plugins.lsp = { enable = true; servers = { - ts-ls = { + ts_ls = { enable = true; }; }; @@ -141,17 +141,17 @@ assertions = [ { - assertion = lib.all (x: x != "vue") config.plugins.lsp.servers.ts-ls.filetypes; + assertion = lib.all (x: x != "vue") config.plugins.lsp.servers.ts_ls.filetypes; message = "Did not expect `vue` filetype configuration."; } - (lib.mkIf (config.plugins.lsp.servers.ts-ls.extraOptions ? init_options) { + (lib.mkIf (config.plugins.lsp.servers.ts_ls.extraOptions ? init_options) { assertion = lib.all ( x: x.name != "@vue/typescript-plugin" - ) config.plugins.lsp.servers.ts-ls.extraOptions.init_options.plugins; + ) config.plugins.lsp.servers.ts_ls.extraOptions.init_options.plugins; message = "Did not expect `@vue/typescript-plugin` plugin."; }) { - assertion = lib.any (x: x == "typescript") config.plugins.lsp.servers.ts-ls.filetypes; + assertion = lib.any (x: x == "typescript") config.plugins.lsp.servers.ts_ls.filetypes; message = "Expected `typescript` filetype configuration."; } ]; diff --git a/tests/test-sources/plugins/lsp/language-servers/jsonnet.nix b/tests/test-sources/plugins/lsp/language-servers/jsonnet.nix index 7a17b57e..2790e159 100644 --- a/tests/test-sources/plugins/lsp/language-servers/jsonnet.nix +++ b/tests/test-sources/plugins/lsp/language-servers/jsonnet.nix @@ -3,7 +3,7 @@ plugins.lsp = { enable = true; - servers.jsonnet-ls = { + servers.jsonnet_ls = { enable = true; settings = { diff --git a/tests/test-sources/plugins/lsp/language-servers/lua-ls.nix b/tests/test-sources/plugins/lsp/language-servers/lua-ls.nix index 3af04541..0a925681 100644 --- a/tests/test-sources/plugins/lsp/language-servers/lua-ls.nix +++ b/tests/test-sources/plugins/lsp/language-servers/lua-ls.nix @@ -3,7 +3,7 @@ plugins.lsp = { enable = true; - servers.lua-ls = { + servers.lua_ls = { enable = true; settings = { diff --git a/tests/test-sources/plugins/lsp/language-servers/nil-ls.nix b/tests/test-sources/plugins/lsp/language-servers/nil-ls.nix index 59852165..51bd3765 100644 --- a/tests/test-sources/plugins/lsp/language-servers/nil-ls.nix +++ b/tests/test-sources/plugins/lsp/language-servers/nil-ls.nix @@ -3,7 +3,7 @@ plugins.lsp = { enable = true; - servers.nil-ls = { + servers.nil_ls = { enable = true; settings = {