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)