summaryrefslogtreecommitdiff
path: root/nvim/lsp/jdtls.lua
diff options
context:
space:
mode:
Diffstat (limited to 'nvim/lsp/jdtls.lua')
-rwxr-xr-xnvim/lsp/jdtls.lua146
1 files changed, 0 insertions, 146 deletions
diff --git a/nvim/lsp/jdtls.lua b/nvim/lsp/jdtls.lua
deleted file mode 100755
index e9cce6a..0000000
--- a/nvim/lsp/jdtls.lua
+++ /dev/null
@@ -1,146 +0,0 @@
----@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 handlers = require 'vim.lsp.handlers'
-
-local env = {
- HOME = vim.uv.os_homedir(),
- XDG_CACHE_HOME = os.getenv 'XDG_CACHE_HOME',
- JDTLS_JVM_ARGS = os.getenv 'JDTLS_JVM_ARGS',
-}
-
-local function get_cache_dir()
- return env.XDG_CACHE_HOME and env.XDG_CACHE_HOME or env.HOME .. '/.cache'
-end
-
-local function get_jdtls_cache_dir()
- return get_cache_dir() .. '/jdtls'
-end
-
-local function get_jdtls_config_dir()
- return get_jdtls_cache_dir() .. '/config'
-end
-
-local function get_jdtls_workspace_dir()
- return get_jdtls_cache_dir() .. '/workspace'
-end
-
-local function get_jdtls_jvm_args()
- local args = {}
- for a in string.gmatch((env.JDTLS_JVM_ARGS or ''), '%S+') do
- local arg = string.format('--jvm-arg=%s', a)
- table.insert(args, arg)
- end
- return unpack(args)
-end
-
--- TextDocument version is reported as 0, override with nil so that
--- the client doesn't think the document is newer and refuses to update
--- See: https://github.com/eclipse/eclipse.jdt.ls/issues/1695
-local function fix_zero_version(workspace_edit)
- if workspace_edit and workspace_edit.documentChanges then
- for _, change in pairs(workspace_edit.documentChanges) do
- local text_document = change.textDocument
- if text_document and text_document.version and text_document.version == 0 then
- text_document.version = nil
- end
- end
- end
- return workspace_edit
-end
-
-local function on_textdocument_codeaction(err, actions, ctx)
- for _, action in ipairs(actions) do
- -- TODO: (steelsojka) Handle more than one edit?
- if action.command == 'java.apply.workspaceEdit' then -- 'action' is Command in java format
- action.edit = fix_zero_version(action.edit or action.arguments[1])
- elseif type(action.command) == 'table' and action.command.command == 'java.apply.workspaceEdit' then -- 'action' is CodeAction in java format
- action.edit = fix_zero_version(action.edit or action.command.arguments[1])
- end
- end
-
- handlers[ctx.method](err, actions, ctx)
-end
-
-local function on_textdocument_rename(err, workspace_edit, ctx)
- handlers[ctx.method](err, fix_zero_version(workspace_edit), ctx)
-end
-
-local function on_workspace_applyedit(err, workspace_edit, ctx)
- handlers[ctx.method](err, fix_zero_version(workspace_edit), ctx)
-end
-
--- Non-standard notification that can be used to display progress
-local function on_language_status(_, result)
- local command = vim.api.nvim_command
- command 'echohl ModeMsg'
- command(string.format('echo "%s"', result.message))
- command 'echohl None'
-end
-
-return {
- cmd = {
- 'jdtls',
- '-configuration',
- get_jdtls_config_dir(),
- '-data',
- get_jdtls_workspace_dir(),
- get_jdtls_jvm_args(),
- },
- filetypes = { 'java' },
- root_markers = {
- -- Multi-module projects
- '.git',
- 'build.gradle',
- 'build.gradle.kts',
- -- Single-module projects
- 'build.xml', -- Ant
- 'pom.xml', -- Maven
- 'settings.gradle', -- Gradle
- 'settings.gradle.kts', -- Gradle
- },
- init_options = {
- workspace = get_jdtls_workspace_dir(),
- jvm_args = {},
- os_config = nil,
- },
- handlers = {
- -- Due to an invalid protocol implementation in the jdtls we have to conform these to be spec compliant.
- -- https://github.com/eclipse/eclipse.jdt.ls/issues/376
- ['textDocument/codeAction'] = on_textdocument_codeaction,
- ['textDocument/rename'] = on_textdocument_rename,
- ['workspace/applyEdit'] = on_workspace_applyedit,
- ['language/status'] = vim.schedule_wrap(on_language_status),
- },
-}