Move lsp config to local file structure
This commit is contained in:
parent
e5c3bb2492
commit
20801272fc
383 changed files with 11829 additions and 114 deletions
102
.config/nvim/lsp/jdtls.lua
Normal file
102
.config/nvim/lsp/jdtls.lua
Normal file
|
|
@ -0,0 +1,102 @@
|
|||
---@brief
|
||||
---
|
||||
--- https://projects.eclipse.org/projects/eclipse.jdt.ls
|
||||
---
|
||||
--- Language server for Java.
|
||||
---
|
||||
--- IMPORTANT: If you want all the features jdtls has to offer, [nvim-jdtls](https://github.com/mfussenegger/nvim-jdtls)
|
||||
--- is highly recommended. If all you need is diagnostics, completion, imports, gotos and formatting and some code actions
|
||||
--- you can keep reading here.
|
||||
---
|
||||
--- For manual installation you can download precompiled binaries from the
|
||||
--- [official downloads site](http://download.eclipse.org/jdtls/snapshots/?d)
|
||||
--- and ensure that the `PATH` variable contains the `bin` directory of the extracted archive.
|
||||
---
|
||||
--- ```lua
|
||||
--- -- init.lua
|
||||
--- vim.lsp.enable('jdtls')
|
||||
--- ```
|
||||
---
|
||||
--- You can also pass extra custom jvm arguments with the JDTLS_JVM_ARGS environment variable as a space separated list of arguments,
|
||||
--- that will be converted to multiple --jvm-arg=<param> args when passed to the jdtls script. This will allow for example tweaking
|
||||
--- the jvm arguments or integration with external tools like lombok:
|
||||
---
|
||||
--- ```sh
|
||||
--- export JDTLS_JVM_ARGS="-javaagent:$HOME/.local/share/java/lombok.jar"
|
||||
--- ```
|
||||
---
|
||||
--- For automatic installation you can use the following unofficial installers/launchers under your own risk:
|
||||
--- - [jdtls-launcher](https://github.com/eruizc-dev/jdtls-launcher) (Includes lombok support by default)
|
||||
--- ```lua
|
||||
--- -- init.lua
|
||||
--- vim.lsp.config('jdtls', { cmd = { 'jdtls' } })
|
||||
--- ```
|
||||
|
||||
local function get_jdtls_cache_dir()
|
||||
return vim.fn.stdpath('cache') .. '/jdtls'
|
||||
end
|
||||
|
||||
local function get_jdtls_workspace_dir()
|
||||
return get_jdtls_cache_dir() .. '/workspace'
|
||||
end
|
||||
|
||||
local function get_jdtls_jvm_args()
|
||||
local env = os.getenv('JDTLS_JVM_ARGS')
|
||||
local args = {}
|
||||
for a in string.gmatch((env or ''), '%S+') do
|
||||
local arg = string.format('--jvm-arg=%s', a)
|
||||
table.insert(args, arg)
|
||||
end
|
||||
return unpack(args)
|
||||
end
|
||||
|
||||
local root_markers1 = {
|
||||
-- Multi-module projects
|
||||
'mvnw', -- Maven
|
||||
'gradlew', -- Gradle
|
||||
'settings.gradle', -- Gradle
|
||||
'settings.gradle.kts', -- Gradle
|
||||
-- Use git directory as last resort for multi-module maven projects
|
||||
-- In multi-module maven projects it is not really possible to determine what is the parent directory
|
||||
-- and what is submodule directory. And jdtls does not break if the parent directory is at higher level than
|
||||
-- actual parent pom.xml so propagating all the way to root git directory is fine
|
||||
'.git',
|
||||
}
|
||||
local root_markers2 = {
|
||||
-- Single-module projects
|
||||
'build.xml', -- Ant
|
||||
'pom.xml', -- Maven
|
||||
'build.gradle', -- Gradle
|
||||
'build.gradle.kts', -- Gradle
|
||||
}
|
||||
|
||||
---@type vim.lsp.Config
|
||||
return {
|
||||
---@param dispatchers? vim.lsp.rpc.Dispatchers
|
||||
---@param config vim.lsp.ClientConfig
|
||||
cmd = function(dispatchers, config)
|
||||
local workspace_dir = get_jdtls_workspace_dir()
|
||||
local data_dir = workspace_dir
|
||||
|
||||
if config.root_dir then
|
||||
data_dir = data_dir .. '/' .. vim.fn.fnamemodify(config.root_dir, ':p:h:t')
|
||||
end
|
||||
|
||||
local config_cmd = {
|
||||
'jdtls',
|
||||
'-data',
|
||||
data_dir,
|
||||
get_jdtls_jvm_args(),
|
||||
}
|
||||
|
||||
return vim.lsp.rpc.start(config_cmd, dispatchers, {
|
||||
cwd = config.cmd_cwd,
|
||||
env = config.cmd_env,
|
||||
detached = config.detached,
|
||||
})
|
||||
end,
|
||||
filetypes = { 'java' },
|
||||
root_markers = vim.fn.has('nvim-0.11.3') == 1 and { root_markers1, root_markers2 }
|
||||
or vim.list_extend(root_markers1, root_markers2),
|
||||
init_options = {},
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue