summaryrefslogtreecommitdiff
path: root/config/essentials/nvim/ftplugin/java.lua
diff options
context:
space:
mode:
authorRaymaekers Luca <raymaekers.luca@gmail.com>2023-03-21 00:21:14 +0100
committerRaymaekers Luca <raymaekers.luca@gmail.com>2023-03-21 00:21:14 +0100
commit392517e91a07e762a4f946fb2625b39e0aab2471 (patch)
tree707f306219add3b65ea9bbdbaa57267ae7bf6554 /config/essentials/nvim/ftplugin/java.lua
parentd9ababa442b5d02414e100f7de1f574e5616125d (diff)
use nvim-jdtls instead of nvim-cmp
Diffstat (limited to 'config/essentials/nvim/ftplugin/java.lua')
-rw-r--r--config/essentials/nvim/ftplugin/java.lua56
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)