dotfiles/symlinks/config/nvim/lua/esensar/lsp/jdtls_setup.lua

83 lines
2.1 KiB
Lua

-------------------------------------------------------------------------------
-- - JDTLS server configuration -
-------------------------------------------------------------------------------
local common_config = require("esensar.lsp.server_config")
local M = {}
local function is_in_config_home(bufname)
bufname = bufname or vim.api.nvim_buf_get_name(vim.api.nvim_get_current_buf())
local dirname = vim.fn.fnamemodify(bufname, ":p:h")
local getparent = function(p)
return vim.fn.fnamemodify(p, ":h")
end
local config_path = vim.fn.resolve(vim.fn.expand(vim.fn.stdpath("config")))
while getparent(dirname) ~= dirname do
if dirname == config_path then
return true
else
dirname = getparent(dirname)
end
end
return false
end
function M.setup()
local installed_jdtls = {}
installed_jdtls.cmd = { "jdtls" }
require("jdtls").setup_dap({ hotcoredeplace = "auto" })
local config = vim.tbl_deep_extend("force", installed_jdtls, {
flags = {
allow_incremental_sync = true,
},
on_attach = common_config.on_attach,
capabilities = {
textDocument = {
completion = {
completionItem = {
snippetSupport = true,
},
},
},
},
})
config.settings = {
java = {
signatureHelp = { enabled = true },
sources = {
organizeImports = {
starThreshold = 9999,
staticStarThreshold = 9999,
},
},
},
}
if is_in_config_home() then
config.root_dir = vim.fn.resolve(vim.fn.expand(vim.fn.stdpath("config"))) .. "/rplugin/java"
config.settings.java.project = {
referencedLibraries = require("java_plugin_host").classpath,
}
end
config.root_dir = require("jdtls.setup").find_root({ "gradlew", "pom.xml" })
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,
}
-- Server
require("jdtls").start_or_attach(config)
end
return M