From 3b332b462a04258252ab549c379788e41a8184e4 Mon Sep 17 00:00:00 2001 From: Prabhat Maurya Date: Sun, 23 Feb 2025 09:44:50 +0530 Subject: [PATCH] updated jdtls --- init.lua | 5 +- lua/user/lsp.lua | 1 + lua/user/lsp_servers/graphql.lua | 6 ++ lua/user/lsp_servers/jdtls.lua | 142 +++++++++++++++++-------------- 4 files changed, 89 insertions(+), 65 deletions(-) create mode 100644 lua/user/lsp_servers/graphql.lua diff --git a/init.lua b/init.lua index 2494cba..97980e0 100644 --- a/init.lua +++ b/init.lua @@ -1,4 +1,4 @@ --- -- Load user configuration files + -- Load user configuration files require("user.options") require("user.keymaps") require("user.cmp") @@ -7,7 +7,6 @@ require("user.telescope") require("user.gruvbox") require("user.lsp") - require("user.java") require("user.treesitter") require("user.null-ls") -- Load null-ls configuration require("user.terminal") @@ -34,7 +33,7 @@ require("user.test")(use) -- NERDTree plugin - use("preservim/nerdtree") + use("preservim/nerdtree") -- Plugin for integrating formatters/linters use("jose-elias-alvarez/null-ls.nvim") diff --git a/lua/user/lsp.lua b/lua/user/lsp.lua index 06939a7..2091946 100644 --- a/lua/user/lsp.lua +++ b/lua/user/lsp.lua @@ -4,6 +4,7 @@ require("user.lsp_servers.ts_ls") require("user.lsp_servers.jdtls") require("user.lsp_servers.marksman") require("user.lsp_servers.kotlin_ls") +require("user.lsp_servers.graphql") -- Mason setup require("mason").setup() diff --git a/lua/user/lsp_servers/graphql.lua b/lua/user/lsp_servers/graphql.lua new file mode 100644 index 0000000..aaa73b2 --- /dev/null +++ b/lua/user/lsp_servers/graphql.lua @@ -0,0 +1,6 @@ +local lspconfig = require("lspconfig") + +lspconfig.graphql.setup({ + capabilities = require("cmp_nvim_lsp").default_capabilities(), + filetypes = { "graphql", "gql", "javascript", "typescript" }, +}) diff --git a/lua/user/lsp_servers/jdtls.lua b/lua/user/lsp_servers/jdtls.lua index 2c5512c..362ef07 100644 --- a/lua/user/lsp_servers/jdtls.lua +++ b/lua/user/lsp_servers/jdtls.lua @@ -1,67 +1,85 @@ local lspconfig = require("lspconfig") local capabilities = require("cmp_nvim_lsp").default_capabilities(vim.lsp.protocol.make_client_capabilities()) +-- Java binary (ensure it's Java 21) +local java_bin = "/usr/lib/jvm/java-21-openjdk/bin/java" + +-- Find JDTLS and Lombok paths dynamically +local jdtls_path = "/home/prabhat/.local/share/nvim/mason/packages/jdtls" +local jdtls_launcher_jar = vim.fn.glob(jdtls_path .. "/plugins/org.eclipse.equinox.launcher_*.jar") +local lombok_jar = vim.fn.glob(jdtls_path .. "/lombok.jar") + lspconfig.jdtls.setup({ -cmd = { - "/home/prabhat/.local/share/nvim/mason/packages/jdtls/bin/jdtls", - "-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=INFO", - "-Xmx2G", - "-Xms100m", - "--add-modules=ALL-SYSTEM", - "--add-opens", "java.base/java.util=ALL-UNNAMED", - "--add-opens", "java.base/java.lang=ALL-UNNAMED", - "-jar", "/home/prabhat/.local/share/nvim/mason/packages/jdtls/plugins/org.eclipse.equinox.launcher_1.6.900.v20240613-2009.jar", - "-configuration", "/home/prabhat/.local/share/nvim/mason/packages/jdtls/config_linux", - "-data", vim.fn.stdpath("data") .. "/jdtls-workspace/" .. vim.fn.fnamemodify(vim.loop.cwd(), ":p:h:t"), -}, - capabilities = capabilities, - root_dir = function() - return vim.fs.dirname( - vim.fs.find({ ".git", "mvnw", "gradlew", "pom.xml", "build.gradle" }, { upward = true })[1] - ) - end, - settings = { - java = { - completion = { - favoriteStaticMembers = { - "org.junit.jupiter.api.Assertions.*", - "org.mockito.Mockito.*", - "java.util.Objects.requireNonNull", - "java.util.Objects.requireNonNullElse", - }, - filteredTypes = { - "com.sun.*", - "io.micrometer.shaded.*", - "java.awt.*", - "jdk.*", - "sun.*", - }, - }, - import = { - exclusions = { - "**/internal/**", - }, - maven = { - enabled = true, - downloadSources = true, - }, - gradle = { - enabled = true, - }, - settings = { - -- Customize import order - importOrder = { - "java", - "javax", - "org", - "com", - }, - }, - }, - }, - }, + cmd = { + java_bin, + "-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=INFO", + "-Xmx2G", -- Max heap size + "-Xms256m", -- Min heap size + "--add-modules=ALL-SYSTEM", + "--add-opens", "java.base/java.util=ALL-UNNAMED", + "--add-opens", "java.base/java.lang=ALL-UNNAMED", + "-javaagent:" .. lombok_jar, -- Lombok support + "-jar", jdtls_launcher_jar, -- JDTLS launcher + "-configuration", jdtls_path .. "/config_linux", + "-data", vim.fn.stdpath("data") .. "/jdtls-workspace/" .. vim.fn.fnamemodify(vim.loop.cwd(), ":p:h:t"), + }, + capabilities = capabilities, + root_dir = function() + return vim.fs.dirname( + vim.fs.find({ ".git", "mvnw", "gradlew", "pom.xml", "build.gradle" }, { upward = true })[1] + ) + end, + settings = { + java = { + completion = { + favoriteStaticMembers = { + "org.junit.jupiter.api.Assertions.*", + "org.mockito.Mockito.*", + "java.util.Objects.requireNonNull", + "java.util.Objects.requireNonNullElse", + }, + filteredTypes = { + "com.sun.*", + "io.micrometer.shaded.*", + "java.awt.*", + "jdk.*", + "sun.*", + }, + }, + import = { + exclusions = { + "**/internal/**", + }, + maven = { + enabled = true, + downloadSources = true, + }, + gradle = { + enabled = true, + }, + settings = { + importOrder = { + "java", + "javax", + "org", + "com", + }, + }, + }, + inlayHints = { + parameterNames = { enabled = "all" }, + }, + format = { + enabled = true, + settings = { + url = jdtls_path .. "/eclipse-formatter.xml", + }, + }, + }, + }, }) +