From 5e51771f9ccd5e469aabd361d478fd9c587f03ac Mon Sep 17 00:00:00 2001 From: Christian Nieves Date: Thu, 26 Jan 2023 19:17:16 +0000 Subject: [PATCH] java stuff --- scripts/scripts/javalsp | 15 +++ vim/.vim/lua/config/dap.lua | 198 ++++++++++++++++++++++++++++++++++++ vim/.vim/lua/plugins.lua | 7 ++ vim/.vim/prefs/golang.vim | 63 ------------ vim/.vim/prefs/leader.vim | 4 - 5 files changed, 220 insertions(+), 67 deletions(-) create mode 100755 scripts/scripts/javalsp create mode 100644 vim/.vim/lua/config/dap.lua delete mode 100644 vim/.vim/prefs/golang.vim diff --git a/scripts/scripts/javalsp b/scripts/scripts/javalsp new file mode 100755 index 0000000..20d68e2 --- /dev/null +++ b/scripts/scripts/javalsp @@ -0,0 +1,15 @@ +cd "$HOME/bin/jdtls" + +java \ + -Declipse.application=org.eclipse.jdt.ls.core.id1 \ + -Dosgi.bundles.defaultStartLevel=4 \ + -Declipse.product=org.eclipse.jdt.ls.core.product \ + -Dlog.level=ALL \ + -noverify \ + -Xmx1G \ + -jar ./plugins/org.eclipse.equinox.launcher_1.6.400.v20210924-0641.jar \ + -configuration ./config_linux \ + -data "$HOME/jdtls_data" \ + --add-modules=ALL-SYSTEM \ + --add-opens java.base/java.util=ALL-UNNAMED \ + --add-opens java.base/java.lang=ALL-UNNAMED diff --git a/vim/.vim/lua/config/dap.lua b/vim/.vim/lua/config/dap.lua new file mode 100644 index 0000000..a2a4f03 --- /dev/null +++ b/vim/.vim/lua/config/dap.lua @@ -0,0 +1,198 @@ +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) + + buf_set_keymap("n", "cf", "lua vim.lsp.buf.formatting()", 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 = {'java-lsp', 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) + diff --git a/vim/.vim/lua/plugins.lua b/vim/.vim/lua/plugins.lua index 82b3035..bbb7901 100644 --- a/vim/.vim/lua/plugins.lua +++ b/vim/.vim/lua/plugins.lua @@ -104,6 +104,13 @@ require('packer').startup(function(use) } use 'apalmer1377/factorus' + use { + 'mfussenegger/nvim-dap', + 'mfussenegger/nvim-jdtls', + config = [[ require("config.dap")]], + ft = {'java','kotlin'} + } + use 'hrsh7th/vim-vsnip' use 'kosayoda/nvim-lightbulb' use {'andymass/vim-matchup', event = 'VimEnter'} diff --git a/vim/.vim/prefs/golang.vim b/vim/.vim/prefs/golang.vim deleted file mode 100644 index b72c529..0000000 --- a/vim/.vim/prefs/golang.vim +++ /dev/null @@ -1,63 +0,0 @@ -" -------- VIM-GO -------- -let g:go_def_mode='gopls' -let g:go_info_mode="gopls" -let g:go_auto_type_info='gopls' -let g:go_fmt_command = "goimports" -let g:go_metalinter_autosave = 0 -let g:go_metalinter_command = "golangci-lint" -let g:go_metalinter_enabled = ['govet', 'errcheck', 'deadcode', 'staticcheck', 'ineffassign'] -let g:go_metalinter_deadline = "10s" -let g:go_metalinter_autosave_enabled = ['govet', 'errcheck', 'deadcode', 'staticcheck', 'ineffassign'] - -let g:go_highlight_functions = 1 -let g:go_highlight_function_calls = 1 -let g:go_highlight_methods = 1 -let g:go_highlight_fields = 1 -let g:go_highlight_types = 1 -let g:go_highlight_structs = 1 -let g:go_highlight_interfaces = 1 -let g:go_highlight_operators = 1 -let g:go_highlight_build_constraints = 1 -let g:go_code_completion_enabled = 1 - -let g:go_auto_type_info = 1 - -let g:syntastic_c_checkers = [] -let g:syntastic_rust_checkers = [] -let g:syntastic_cpp_checkers = [] -let g:syntastic_python_python_exec = 'python3' - -" get rid of bull shit mappings -let g:go_doc_keywordprg_enabled = 0 -let g:go_def_mapping_enabled = 0 -let g:go_bin_path = "/usr/lib/google-golang/bin/go " -"let $GOPATH = $HOME."/go" - -" --------- GOLANG MAPPINGS --------- -nmap d :GoDef -nmap b :GoBuild -nmap tf :GoTestFunc -nmap fs :GoFillStruct -nmap at :GoAddTags -nmap ie :GoIfErr - -nmap ga :GoAlternate -nmap gat :GoAddTags -nmap grt :GoRemoveTags -nmap gc :GoCoverageToggle -nmap gd :GoDef -nmap gfs :GoFillStruct -nmap gl :GoMetaLinter -nmap gr :GoRun -nmap gt :GoTest -nmap gtf :GoTestFunc -nmap gv :GoVet - -autocmd FileType go nmap gtj :CocCommand go.tags.add json -autocmd FileType go nmap gty :CocCommand go.tags.add yaml -autocmd FileType go nmap gtx :CocCommand go.tags.clear - -"nmap gd (coc-definition) -"nmap gy (coc-type-definition) -"nmap gi (coc-implementation) -"nmap gr (coc-references) diff --git a/vim/.vim/prefs/leader.vim b/vim/.vim/prefs/leader.vim index a0f37f0..fa337a7 100644 --- a/vim/.vim/prefs/leader.vim +++ b/vim/.vim/prefs/leader.vim @@ -31,10 +31,6 @@ imap v "+pa " Copy to OS clipboard vnoremap y "yy :call system('xclip', @y) map y "yy :call system('xclip', @y) -" map y !xclip -selection clipboard -" vmap y !xclip -selection clipboard -" map y "+Y -" vmap y "+y " --------- WINDOW/PANE MAPPINGS --------- map wr r