diff options
Diffstat (limited to 'config/essentials/nvim/ftplugin')
-rw-r--r-- | config/essentials/nvim/ftplugin/java.lua | 56 |
1 files changed, 53 insertions, 3 deletions
diff --git a/config/essentials/nvim/ftplugin/java.lua b/config/essentials/nvim/ftplugin/java.lua index eeaff47..9cb52e1 100644 --- a/config/essentials/nvim/ftplugin/java.lua +++ b/config/essentials/nvim/ftplugin/java.lua @@ -1,3 +1,53 @@ -vim.keymap.set({"n", "i"}, "<LocalLeader>t", "<cmd>s/\\(\\s*\\)\\(.*\\)/\\1System.out.print(\"\\2\");<cr>") -vim.keymap.set({"n", "i"}, "<LocalLeader>i", "<cmd>s/\\(\\s*\\)\\(.*\\)/\\1System.out.print(\"\\2: \" + \\2);<cr>") -vim.keymap.set({"n", "i"}, "<LocalLeader>l", "<cmd>s/print(/println(/<cr>") +local home = os.getenv('HOME') +local root_markers = {'gradlew', 'mvnw', '.git'} +local root_dir = require('jdtls.setup').find_root(root_markers) +local workspace_folder = home .. "/.local/share/eclipse/" .. vim.fn.fnamemodify(root_dir, ":p:h:t") + +function nnoremap(rhs, lhs, bufopts, desc) + bufopts.desc = desc + vim.keymap.set("n", rhs, lhs, bufopts) +end + +local on_attach = function(client, bufnr) + -- Regular Neovim LSP client keymappings + local bufopts = { noremap=true, silent=true, buffer=bufnr } + nnoremap('gD', vim.lsp.buf.declaration, bufopts, "Go to declaration") + nnoremap('gd', vim.lsp.buf.definition, bufopts, "Go to definition") + nnoremap('gi', vim.lsp.buf.implementation, bufopts, "Go to implementation") + nnoremap('K', vim.lsp.buf.hover, bufopts, "Hover text") + nnoremap('<C-k>', vim.lsp.buf.signature_help, bufopts, "Show signature") + nnoremap('<space>wa', vim.lsp.buf.add_workspace_folder, bufopts, "Add workspace folder") + nnoremap('<space>wr', vim.lsp.buf.remove_workspace_folder, bufopts, "Remove workspace folder") + nnoremap('<space>wl', function() + print(vim.inspect(vim.lsp.buf.list_workspace_folders())) + end, bufopts, "List workspace folders") + nnoremap('<space>D', vim.lsp.buf.type_definition, bufopts, "Go to type definition") + nnoremap('<space>rn', vim.lsp.buf.rename, bufopts, "Rename") + nnoremap('<space>ca', vim.lsp.buf.code_action, bufopts, "Code actions") + vim.keymap.set('v', "<space>ca", "<ESC><CMD>lua vim.lsp.buf.range_code_action()<CR>", + { noremap=true, silent=true, buffer=bufnr, desc = "Code actions" }) + nnoremap('<space>f', function() vim.lsp.buf.format { async = true } end, bufopts, "Format file") + + -- Java extensions provided by jdtls + nnoremap("<C-o>", jdtls.organize_imports, bufopts, "Organize imports") + nnoremap("<space>ev", jdtls.extract_variable, bufopts, "Extract variable") + nnoremap("<space>ec", jdtls.extract_constant, bufopts, "Extract constant") + vim.keymap.set('v', "<space>em", [[<ESC><CMD>lua require('jdtls').extract_method(true)<CR>]], + { noremap=true, silent=true, buffer=bufnr, desc = "Extract method" }) +end + +local config = { + flags = { + debounce_text_changes = 80, + }, + cmd = { + 'jdtls', + '-Dlog.protocol=true', + '-Dlog.level=ALL', + '-Xms4g', + '-data', workspace_folder, + }, + on_attach = on_attach, + root_dir = root_dir, +} +require('jdtls').start_or_attach(config) |