local map = require("utils").map map("n", "db", ":lua require'dap'.toggle_breakpoint()") map("n", "dsi", ":lua require'dap'.step_into()") map("n", "dso", ":lua require'dap'.step_over()") map("n", "di", ":lua require'dap'.repl.open()") local on_attach = function(client, bufnr) require("jdtls.setup").add_commands() require("jdtls").setup_dap() require("lsp-status").register_progress() -- require'lspkind'.init() -- require'lspsaga'.init_lsp_saga() -- Kommentary vim.api.nvim_set_keymap("n", "/", "kommentary_line_default", {}) vim.api.nvim_set_keymap("v", "/", "kommentary_visual_default", {}) vim.api.nvim_exec( [[ augroup FormatAutogroup autocmd! autocmd BufWritePost *.java FormatWrite augroup end ]], true ) local function buf_set_keymap(...) vim.api.nvim_buf_set_keymap(bufnr, ...) end local function buf_set_option(...) vim.api.nvim_buf_set_option(bufnr, ...) end buf_set_option("omnifunc", "v:lua.vim.lsp.omnifunc") -- Mappings. local opts = { noremap = true, silent = true } -- buf_set_keymap('n', '', 'lua vim.lsp.buf.signature_help()', opts) -- buf_set_keymap('n', 'wa', 'lua vim.lsp.buf.add_workspace_folder()', opts) -- buf_set_keymap('n', 'wr', 'lua vim.lsp.buf.remove_workspace_folder()', opts) -- buf_set_keymap('n', 'wl', 'lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))', opts) -- buf_set_keymap('n', 'D', 'lua vim.lsp.buf.type_definition()', opts) -- buf_set_keymap('n', 'rn', 'lua vim.lsp.buf.rename()', opts) -- buf_set_keymap('n', 'gr', 'lua vim.lsp.buf.references() && vim.cmd("copen")', opts) -- buf_set_keymap('n', 'e', 'lua vim.lsp.diagnostic.show_line_diagnostics()', opts) -- buf_set_keymap('n', '[d', 'lua vim.lsp.diagnostic.goto_prev()', opts) -- buf_set_keymap('n', ']d', 'lua vim.lsp.diagnostic.goto_next()', opts) -- buf_set_keymap('n', 'q', 'lua vim.lsp.diagnostic.set_loclist()', opts) -- Java specific -- buf_set_keymap("n", "di", "lua require'jdtls'.organize_imports()", opts) -- buf_set_keymap("n", "dt", "lua require'jdtls'.test_class()", opts) -- buf_set_keymap("n", "dn", "lua require'jdtls'.test_nearest_method()", opts) buf_set_keymap("v", "de", "lua require('jdtls').extract_variable(true)", opts) buf_set_keymap("n", "de", "lua require('jdtls').extract_variable()", opts) buf_set_keymap("v", "dm", "lua require('jdtls').extract_method(true)", opts) vim.api.nvim_exec( [[ hi LspReferenceRead cterm=bold ctermbg=red guibg=LightYellow hi LspReferenceText cterm=bold ctermbg=red guibg=LightYellow hi LspReferenceWrite cterm=bold ctermbg=red guibg=LightYellow augroup lsp_document_highlight autocmd! autocmd CursorHold lua vim.lsp.buf.document_highlight() autocmd CursorMoved lua vim.lsp.buf.clear_references() augroup END ]], false ) end local root_markers = { "gradlew", "pom.xml", "BUILD" } local root_dir = require("jdtls.setup").find_root(root_markers) local home = os.getenv("HOME") local capabilities = { workspace = { configuration = true, }, textDocument = { completion = { completionItem = { snippetSupport = true, }, }, }, } local workspace_folder = home .. "/.workspace" .. vim.fn.fnamemodify(root_dir, ":p:h:t") local config = { flags = { allow_incremental_sync = true, }, capabilities = capabilities, on_attach = on_attach, } config.settings = { ["java.format.settings.url"] = home .. "/.config/nvim/language-servers/java-google-formatter.xml", ["java.format.settings.profile"] = "GoogleStyle", java = { signatureHelp = { enabled = true }, contentProvider = { preferred = "fernflower" }, completion = { favoriteStaticMembers = { "org.hamcrest.MatcherAssert.assertThat", "org.hamcrest.Matchers.*", "org.hamcrest.CoreMatchers.*", "org.junit.jupiter.api.Assertions.*", "java.util.Objects.requireNonNull", "java.util.Objects.requireNonNullElse", "org.mockito.Mockito.*", }, }, sources = { organizeImports = { starThreshold = 9999, staticStarThreshold = 9999, }, }, codeGeneration = { toString = { template = "${object.className}{${member.name()}=${member.value}, ${otherMembers}}", }, }, configuration = { runtimes = { { name = "JavaSE-11", path = home .. "/.sdkman/candidates/java/11.0.10-open/", }, { name = "JavaSE-14", path = home .. "/.sdkman/candidates/java/14.0.2-open/", }, { name = "JavaSE-15", path = home .. "/.sdkman/candidates/java/15.0.1-open/", }, }, }, }, } config.cmd = { "javalsp", workspace_folder } config.on_attach = on_attach config.on_init = function(client, _) client.notify("workspace/didChangeConfiguration", { settings = config.settings }) end local extendedClientCapabilities = require("jdtls").extendedClientCapabilities extendedClientCapabilities.resolveAdditionalTextEditsSupport = true config.init_options = { -- bundles = bundles; extendedClientCapabilities = extendedClientCapabilities, } -- UI local finders = require("telescope.finders") local sorters = require("telescope.sorters") local actions = require("telescope.actions") local pickers = require("telescope.pickers") require("jdtls.ui").pick_one_async = function(items, prompt, label_fn, cb) local opts = {} pickers .new(opts, { prompt_title = prompt, finder = finders.new_table({ results = items, entry_maker = function(entry) return { value = entry, display = label_fn(entry), ordinal = label_fn(entry), } end, }), sorter = sorters.get_generic_fuzzy_sorter(), attach_mappings = function(prompt_bufnr) actions.goto_file_selection_edit:replace(function() local selection = actions.get_selected_entry(prompt_bufnr) actions.close(prompt_bufnr) cb(selection.value) end) return true end, }) :find() end local dap = require("dap") dap.configurations.java = { { type = "java", request = "attach", name = "Debug (Attach) - Remote", hostName = "127.0.0.1", port = 5005, }, } -- Server require("jdtls").start_or_attach(config)