vim.bo.expandtab = true vim.bo.tabstop = 4 vim.bo.shiftwidth = 4 require'lsphelp' local jdtls_home = os.getenv('HOME') .. '/Projects/lsp/eclipse.jdt.ls/org.eclipse.jdt.ls.product/target/repository' local project_name = vim.fn.fnamemodify(vim.fn.getcwd(), ':p:h:t') local jdtls = require'jdtls' -- The on_attach function is used to set key maps after the language server -- attaches to the current buffer local on_attach = function(client, bufnr) default_on_attach(client, bufnr) -- Java extensions provided by jdtls nnoremap("", jdtls.organize_imports, bufopts, "Organize imports") nnoremap("ev", jdtls.extract_variable, bufopts, "Extract variable") nnoremap("ec", jdtls.extract_constant, bufopts, "Extract constant") vim.keymap.set('v', "em", [[lua require('jdtls').extract_method(true)]], { noremap=true, silent=true, buffer=bufnr, desc = "Extract method" }) end -- See `:help vim.lsp.start_client` for an overview of the supported `config` options. local config = { on_attach = on_attach, -- We pass our on_attach keybindings to the configuration map flags = { debounce_text_changes = 150, }, -- The command that starts the language server -- See: https://github.com/eclipse/eclipse.jdt.ls#running-from-the-command-line cmd = { 'java', '-Declipse.application=org.eclipse.jdt.ls.core.id1', '-Dosgi.bundles.defaultStartLevel=4', '-Declipse.product=org.eclipse.jdt.ls.core.product', '-Dlog.protocol=true', '-Dlog.level=ALL', '-Xms1g', '--add-modules=ALL-SYSTEM', '--add-opens', 'java.base/java.util=ALL-UNNAMED', '--add-opens', 'java.base/java.lang=ALL-UNNAMED', '-jar', jdtls_home .. '/plugins/org.eclipse.equinox.launcher_1.6.900.v20240613-2009.jar', '-configuration', jdtls_home .. '/config_linux', '-data', os.getenv('HOME') .. '/.cache/jdtls/' .. project_name }, -- 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 root_dir = vim.fs.root(0, {'.git', 'mvnw', 'gradlew', 'build.gradle'}), -- 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 settings = { java = { signatureHelp = { enabled = true }, jdt = { ls = { androidSupport = { enabled = true }, } } } }, -- 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 you can remove this init_options = { bundles = {} }, } -- This starts a new client & server, -- or attaches to an existing client & server depending on the `root_dir`. jdtls.start_or_attach(config)