From eda519d451cda27bf6c3b8c36e762b47e105cc35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=A9tan=20Lepage?= <33058747+GaetanLepage@users.noreply.github.com> Date: Tue, 28 Mar 2023 18:20:54 +0200 Subject: [PATCH] plugins/nvim-jdtls: init + tests (#298) --- plugins/default.nix | 1 + plugins/languages/nvim-jdtls.nix | 81 +++++++++++++++++++ .../plugins/languages/nvim-jdtls.nix | 23 ++++++ 3 files changed, 105 insertions(+) create mode 100644 plugins/languages/nvim-jdtls.nix create mode 100644 tests/test-sources/plugins/languages/nvim-jdtls.nix diff --git a/plugins/default.nix b/plugins/default.nix index 822edbe7..627ef889 100644 --- a/plugins/default.nix +++ b/plugins/default.nix @@ -27,6 +27,7 @@ ./languages/ledger.nix ./languages/markdown-preview.nix ./languages/nix.nix + ./languages/nvim-jdtls.nix ./languages/plantuml-syntax.nix ./languages/rust.nix ./languages/sniprun.nix diff --git a/plugins/languages/nvim-jdtls.nix b/plugins/languages/nvim-jdtls.nix new file mode 100644 index 00000000..0b7f365e --- /dev/null +++ b/plugins/languages/nvim-jdtls.nix @@ -0,0 +1,81 @@ +{ + pkgs, + config, + lib, + ... +}: +with lib; let + cfg = config.plugins.nvim-jdtls; + helpers = import ../helpers.nix {inherit lib;}; +in { + options.plugins.nvim-jdtls = + helpers.extraOptionsOptions + // { + enable = mkEnableOption "nvim-jdtls"; + + package = helpers.mkPackageOption "nvim-jdtls" pkgs.vimPlugins.nvim-jdtls; + + cmd = mkOption { + type = types.listOf types.str; + description = "The command that starts the language server"; + default = ["${pkgs.jdt-language-server}/bin/jdt-language-server"]; + }; + + rootDir = + helpers.defaultNullOpts.mkNullable + (types.either types.str helpers.rawType) + ''{ __raw = "require('jdtls.setup').find_root({'.git', 'mvnw', 'gradlew'})"; }'' + '' + This is the default if not provided, you can remove it. Or adjust as needed. + One dedicated LSP server & client will be started per unique root_dir + ''; + + settings = + helpers.mkNullOrOption (types.attrs) + '' + Here you can configure eclipse.jdt.ls specific settings + See https://github.com/eclipse/eclipse.jdt.ls/wiki/Running-the-JAVA-LS-server-from-the-command-line#initialize-request + for a list of options. + ''; + + initOptions = + helpers.mkNullOrOption (types.attrs) + '' + Language server `initializationOptions` + You need to extend the `bundles` with paths to jar files if you want to use additional + eclipse.jdt.ls plugins. + + See https://github.com/mfussenegger/nvim-jdtls#java-debug-installation + + If you don't plan on using the debugger or other eclipse.jdt.ls plugins, ignore this option + ''; + }; + + config = let + options = + { + inherit (cfg) cmd; + root_dir = cfg.rootDir; + inherit (cfg) settings; + init_options = cfg.initOptions; + } + // cfg.extraOptions; + in + mkIf cfg.enable { + extraPlugins = [cfg.package]; + + extraPackages = [pkgs.jdt-language-server]; + + autoCmd = [ + { + event = "FileType"; + pattern = "java"; + callback.__raw = '' + function () + require('jdtls').start_or_attach(${helpers.toLuaObject options}) + end + ''; + } + ]; + }; +} diff --git a/tests/test-sources/plugins/languages/nvim-jdtls.nix b/tests/test-sources/plugins/languages/nvim-jdtls.nix new file mode 100644 index 00000000..1e8620c0 --- /dev/null +++ b/tests/test-sources/plugins/languages/nvim-jdtls.nix @@ -0,0 +1,23 @@ +{pkgs}: { + empty = { + plugins.nvim-jdtls.enable = true; + }; + + example = { + plugins.nvim-jdtls = { + enable = true; + + cmd = ["${pkgs.jdt-language-server}/bin/jdt-language-server"]; + + rootDir.__raw = "require('jdtls.setup').find_root({'.git', 'mvnw', 'gradlew'})"; + + settings = { + java = {}; + }; + + initOptions = { + bundles = {}; + }; + }; + }; +}