summaryrefslogtreecommitdiff
path: root/config/essentials/nvim
diff options
context:
space:
mode:
Diffstat (limited to 'config/essentials/nvim')
-rw-r--r--config/essentials/nvim/ftplugin/java.lua56
-rw-r--r--config/essentials/nvim/lua/tlast/cmp/java.lua2
2 files changed, 54 insertions, 4 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)
diff --git a/config/essentials/nvim/lua/tlast/cmp/java.lua b/config/essentials/nvim/lua/tlast/cmp/java.lua
index 7d13fb3..1027588 100644
--- a/config/essentials/nvim/lua/tlast/cmp/java.lua
+++ b/config/essentials/nvim/lua/tlast/cmp/java.lua
@@ -1 +1 @@
-require'lspconfig'.jdtls.setup{}
+-- require'lspconfig'.jdtls.setup{}