summaryrefslogtreecommitdiff
path: root/.config/nvim/lua/custom
diff options
context:
space:
mode:
Diffstat (limited to '.config/nvim/lua/custom')
-rw-r--r--.config/nvim/lua/custom/config/language-servers.lua2
-rw-r--r--.config/nvim/lua/custom/config/mason.lua8
-rw-r--r--.config/nvim/lua/custom/plugins/nvim-jdtls.lua154
3 files changed, 163 insertions, 1 deletions
diff --git a/.config/nvim/lua/custom/config/language-servers.lua b/.config/nvim/lua/custom/config/language-servers.lua
index 2d824d0..3c068a7 100644
--- a/.config/nvim/lua/custom/config/language-servers.lua
+++ b/.config/nvim/lua/custom/config/language-servers.lua
@@ -16,7 +16,7 @@ return {
}, -- lua
clangd = true, -- C/C++
gradle_ls = true, -- java package manager
- jdtls = true, -- java eclipse lsp
+ -- jdtls = true, -- java eclipse lsp
kotlin_language_server = true, -- kotlin
pyright = true, -- python
rust_analyzer = false, -- NOTE: using rustaceanvim
diff --git a/.config/nvim/lua/custom/config/mason.lua b/.config/nvim/lua/custom/config/mason.lua
index 886adc2..9d42879 100644
--- a/.config/nvim/lua/custom/config/mason.lua
+++ b/.config/nvim/lua/custom/config/mason.lua
@@ -1,6 +1,7 @@
-- NOTE: Not language servers but still make sure mason installs them
local ensure_installed = {
stylua = true, -- lua formatting
+ jdtls = true, -- java eclipse lsp
}
local servers = require('custom.config.language-servers')
@@ -29,5 +30,12 @@ require('mason-lspconfig').setup({ ensure_installed = servers_to_install })
require('mason-tool-installer').setup({
ensure_installed = {
'stylua', -- lua formatter
+ 'java-debug-adapter',
+ 'java-test',
},
})
+
+-- NOTE: apparently needed due to some issue or smthing?
+vim.api.nvim_command('MasonToolsInstall')
+
+
diff --git a/.config/nvim/lua/custom/plugins/nvim-jdtls.lua b/.config/nvim/lua/custom/plugins/nvim-jdtls.lua
new file mode 100644
index 0000000..16671b4
--- /dev/null
+++ b/.config/nvim/lua/custom/plugins/nvim-jdtls.lua
@@ -0,0 +1,154 @@
+return {
+ 'mfussenegger/nvim-jdtls',
+ ft = { 'java' },
+ dependencies = { 'mfussenegger/nvim-dap', 'williamboman/mason-lspconfig.nvim' },
+ opts = function(_, opts)
+ local jdtls = require('jdtls')
+ local root_markers = { '.git', 'mvnw', 'gradlew', 'pom.xml', 'build.gradle', '.project' }
+ local root_dir = require('jdtls.setup').find_root(root_markers)
+ local project_name = vim.fn.fnamemodify(vim.fn.getcwd(), ':p:h:t')
+ local workspace_dir = vim.fn.stdpath('data') .. '/site/java/workspace-root/' .. project_name
+ os.execute('mkdir ' .. workspace_dir)
+
+ local defaults = {
+ cmd = {
+ 'java',
+ '-Declipse.application=org.eclipse.jdt.ls.core.id1',
+ '-Dosgi.bundles.defaultStartLevel=4',
+ '-Declipse.product=org.eclipse.jdt.ls.core.product',
+ '-Dlog.protocol=true',
+ '-Dlog.level=ALL',
+ '-javaagent:' .. vim.fn.expand('$MASON/share/jdtls/lombok.jar'),
+ '-Xms1g',
+ '--add-modules=ALL-SYSTEM',
+ '--add-opens',
+ 'java.base/java.util=ALL-UNNAMED',
+ '--add-opens',
+ 'java.base/java.lang=ALL-UNNAMED',
+ '-jar',
+ vim.fn.expand('$MASON/share/jdtls/plugins/org.eclipse.equinox.launcher.jar'),
+ '-configuration',
+ -- WARNING: Might need to change to config_linux or smthing
+ vim.fn.expand('$MASON/share/jdtls/config'),
+ '-data',
+ workspace_dir,
+ },
+ root_dir = root_dir,
+ settings = {
+ java = {
+ -- WARNING: might need home = 'path'
+ -- WARNING: might need configuration.runtimes = {} of paths
+ eclipse = { downloadSources = true },
+ configuration = { updateBuildConfiguration = 'interactive' },
+ maven = { downloadSources = true },
+ implementationsCodeLens = { enabled = true },
+ referencesCodeLens = { enabled = true },
+ -- NOTE: maybe want to uncomment this
+ -- references = { includeDecompiledSources = true, },
+ -- signatureHelp = { enabled = true },
+ -- format = {
+ -- enabled = true,
+ -- -- Formatting works by default, but you can refer to a specific file/URL if you choose
+ -- -- settings = {
+ -- -- url = "https://github.com/google/styleguide/blob/gh-pages/intellij-java-google-style.xml",
+ -- -- profile = "GoogleStyle",
+ -- -- },
+ -- },
+ },
+ signatureHelp = { enabled = true },
+ 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.*',
+ },
+ -- importOrder = {
+ -- 'java',
+ -- 'javax',
+ -- 'com',
+ -- 'org',
+ -- },
+ },
+ -- extendedClientCapabilities = jdtls.extendedClientCapabilities,
+ sources = {
+ organizeImports = {
+ starThreshold = 9999,
+ staticStarThreshold = 9999,
+ },
+ },
+ -- codeGeneration = {
+ -- toString = {
+ -- template = '${object.className}{${member.name()}=${member.value}, ${otherMembers}}',
+ -- },
+ -- useBlocks = true,
+ -- },
+ },
+ -- Needed for auto-completion with method signatures and placeholders
+ capabilities = require('cmp_nvim_lsp').default_capabilities(),
+ init_options = {
+ bundles = {
+ vim.fn.expand('$MASON/share/java-debug-adapter/com.microsoft.java.debug.plugin.jar'),
+ -- unpack remaining bundles
+ (table.unpack or unpack)(vim.split(vim.fn.glob('$MASON/share/java-test/*.jar'), '\n', {})),
+ },
+ },
+ -- flags = { allow_incremental_sync = true },
+ handlers = {
+ ['$/progress'] = function()
+ -- disable progress updates.
+ end,
+ },
+ filetypes = { 'java' },
+ on_attach = function(client, bufnr)
+ jdtls.setup_dap({ hotcodereplace = 'auto' })
+ end,
+ }
+
+ -- ensure that table is valid
+ if not opts then
+ opts = {}
+ end
+
+ -- extend the current table with the defaults keeping options in the user opts
+ -- this allows users to pass opts through an opts table in community.lua
+ opts = vim.tbl_deep_extend('keep', opts, defaults)
+
+ -- send opts to config
+ return opts
+ end,
+ config = function(_, opts)
+ -- setup autocmd on filetype detect java
+ vim.api.nvim_create_autocmd('Filetype', {
+ pattern = 'java', -- autocmd to start jdtls
+ callback = function()
+ if opts.root_dir and opts.root_dir ~= '' then
+ require('jdtls').start_or_attach(opts)
+ -- require('jdtls.dap').setup_dap_main_class_configs()
+ else
+ -- require('astronvim.utils').notify(
+ -- 'jdtls: root_dir not found. Please specify a root marker',
+ -- vim.log.levels.ERROR
+ -- )
+ end
+ end,
+ })
+
+ -- -- create autocmd to load main class configs on LspAttach.
+ -- -- This ensures that the LSP is fully attached.
+ -- -- See https://github.com/mfussenegger/nvim-jdtls#nvim-dap-configuration
+ -- vim.api.nvim_create_autocmd('LspAttach', {
+ -- pattern = '*.java',
+ -- callback = function(args)
+ -- local client = vim.lsp.get_client_by_id(args.data.client_id)
+ -- -- ensure that only the jdtls client is activated
+ -- if client.name == 'jdtls' then
+ -- require('jdtls.dap').setup_dap_main_class_configs()
+ -- end
+ -- end,
+ -- })
+ end,
+}