added java lsp
This commit is contained in:
parent
ca8ac8d170
commit
a0a128b6fe
|
|
@ -8,7 +8,7 @@ set.termguicolors = true
|
||||||
set.swapfile = false
|
set.swapfile = false
|
||||||
set.cursorline = true
|
set.cursorline = true
|
||||||
set.cursorlineopt = "number"
|
set.cursorlineopt = "number"
|
||||||
set.scrolloff = 10
|
set.scrolloff = 5
|
||||||
|
|
||||||
vim.cmd [[filetype plugin indent on]]
|
vim.cmd [[filetype plugin indent on]]
|
||||||
set.tabstop = 2
|
set.tabstop = 2
|
||||||
|
|
|
||||||
|
|
@ -203,9 +203,11 @@ return require("packer").startup(
|
||||||
{
|
{
|
||||||
"jameshiew/nvim-magic",
|
"jameshiew/nvim-magic",
|
||||||
config = function()
|
config = function()
|
||||||
require("nvim-magic").setup({
|
require("nvim-magic").setup(
|
||||||
use_default_keymap = false
|
{
|
||||||
})
|
use_default_keymap = false
|
||||||
|
}
|
||||||
|
)
|
||||||
end,
|
end,
|
||||||
tag = "v0.2.1", -- recommended to pin to a tag and update manually as there may be breaking changes
|
tag = "v0.2.1", -- recommended to pin to a tag and update manually as there may be breaking changes
|
||||||
requires = {
|
requires = {
|
||||||
|
|
@ -214,5 +216,19 @@ return require("packer").startup(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
use {
|
||||||
|
"mfussenegger/nvim-jdtls",
|
||||||
|
config = function()
|
||||||
|
vim.cmd(
|
||||||
|
[[
|
||||||
|
augroup jdtls_lsp
|
||||||
|
autocmd!
|
||||||
|
autocmd FileType java lua require'plugins/java-lsp'.setup()
|
||||||
|
augroup end
|
||||||
|
]]
|
||||||
|
)
|
||||||
|
end,
|
||||||
|
requires = {"mfussenegger/nvim-dap"}
|
||||||
|
}
|
||||||
end
|
end
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,238 @@
|
||||||
|
local M = {}
|
||||||
|
|
||||||
|
function M.setup()
|
||||||
|
local on_attach = function(client, bufnr)
|
||||||
|
require "jdtls.setup".add_commands()
|
||||||
|
require "jdtls".setup_dap()
|
||||||
|
-- require "lsp-status".register_progress()
|
||||||
|
require "compe".setup {
|
||||||
|
enabled = true,
|
||||||
|
autocomplete = true,
|
||||||
|
debug = false,
|
||||||
|
min_length = 1,
|
||||||
|
preselect = "enable",
|
||||||
|
throttle_time = 80,
|
||||||
|
source_timeout = 200,
|
||||||
|
incomplete_delay = 400,
|
||||||
|
max_abbr_width = 100,
|
||||||
|
max_kind_width = 100,
|
||||||
|
max_menu_width = 100,
|
||||||
|
documentation = true,
|
||||||
|
source = {
|
||||||
|
path = true,
|
||||||
|
buffer = true,
|
||||||
|
calc = true,
|
||||||
|
vsnip = false,
|
||||||
|
nvim_lsp = true,
|
||||||
|
nvim_lua = true,
|
||||||
|
spell = true,
|
||||||
|
tags = true,
|
||||||
|
snippets_nvim = false,
|
||||||
|
treesitter = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
require "lspkind".init()
|
||||||
|
|
||||||
|
require "formatter".setup {
|
||||||
|
filetype = {
|
||||||
|
java = {
|
||||||
|
function()
|
||||||
|
return {
|
||||||
|
exe = "java",
|
||||||
|
args = {
|
||||||
|
"--add-exports",
|
||||||
|
"jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED",
|
||||||
|
"--add-exports",
|
||||||
|
"jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED",
|
||||||
|
"--add-exports",
|
||||||
|
"jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED",
|
||||||
|
"--add-exports",
|
||||||
|
"jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED",
|
||||||
|
"--add-exports",
|
||||||
|
"jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED",
|
||||||
|
"-jar",
|
||||||
|
os.getenv("HOME") .. "/.local/jars/google-java-format.jar",
|
||||||
|
vim.api.nvim_buf_get_name(0)
|
||||||
|
},
|
||||||
|
stdin = true
|
||||||
|
}
|
||||||
|
end
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
vim.api.nvim_exec(
|
||||||
|
[[
|
||||||
|
augroup FormatAutogroup
|
||||||
|
autocmd!
|
||||||
|
autocmd BufWritePost *.java FormatWrite
|
||||||
|
augroup end
|
||||||
|
]],
|
||||||
|
true
|
||||||
|
)
|
||||||
|
|
||||||
|
local function buf_set_keymap(...)
|
||||||
|
vim.api.nvim_buf_set_keymap(bufnr, ...)
|
||||||
|
end
|
||||||
|
local function buf_set_option(...)
|
||||||
|
vim.api.nvim_buf_set_option(bufnr, ...)
|
||||||
|
end
|
||||||
|
|
||||||
|
buf_set_option("omnifunc", "v:lua.vim.lsp.omnifunc")
|
||||||
|
|
||||||
|
-- Mappings.
|
||||||
|
local opts = {noremap = true, silent = true}
|
||||||
|
buf_set_keymap("n", "gD", "<Cmd>lua vim.lsp.buf.declaration()<CR>", opts)
|
||||||
|
buf_set_keymap("n", "gd", "<Cmd>lua vim.lsp.buf.definition()<CR>", opts)
|
||||||
|
buf_set_keymap("n", "K", "<Cmd>lua vim.lsp.buf.hover()<CR>", opts)
|
||||||
|
buf_set_keymap("n", "gi", "<cmd>lua vim.lsp.buf.implementation()<CR>", opts)
|
||||||
|
buf_set_keymap("n", "<C-k>", "<cmd>lua vim.lsp.buf.signature_help()<CR>", opts)
|
||||||
|
buf_set_keymap("n", "<leader>wa", "<cmd>lua vim.lsp.buf.add_workspace_folder()<CR>", opts)
|
||||||
|
buf_set_keymap("n", "<leader>wr", "<cmd>lua vim.lsp.buf.remove_workspace_folder()<CR>", opts)
|
||||||
|
buf_set_keymap("n", "<leader>wl", "<cmd>lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))<CR>", opts)
|
||||||
|
buf_set_keymap("n", "<leader>D", "<cmd>lua vim.lsp.buf.type_definition()<CR>", opts)
|
||||||
|
buf_set_keymap("n", "<F2>", "<cmd>lua vim.lsp.buf.rename()<CR>", opts)
|
||||||
|
buf_set_keymap("n", "<leader>a", "<Cmd>lua require('jdtls').code_action()<CR>", opts)
|
||||||
|
buf_set_keymap("v", "<leader>a", "<Esc><Cmd>lua require('jdtls').code_action(true)<CR>", opts)
|
||||||
|
buf_set_keymap("n", "<leader>r", "<Cmd>lua require('jdtls').code_action(false, 'refactor')<CR>", opts)
|
||||||
|
buf_set_keymap("n", "gr", '<cmd>lua vim.lsp.buf.references() && vim.cmd("copen")<CR>', opts)
|
||||||
|
buf_set_keymap("n", "<leader>d", "<cmd>lua vim.lsp.diagnostic.show_line_diagnostics()<CR>", opts)
|
||||||
|
buf_set_keymap("n", "[d", "<cmd>lua vim.lsp.diagnostic.goto_prev()<CR>", opts)
|
||||||
|
buf_set_keymap("n", "]d", "<cmd>lua vim.lsp.diagnostic.goto_next()<CR>", opts)
|
||||||
|
buf_set_keymap("n", "<leader>q", "<cmd>lua vim.lsp.diagnostic.set_loclist()<CR>", opts)
|
||||||
|
-- Java specific
|
||||||
|
buf_set_keymap("n", "<leader>rt", "<Cmd>lua require'jdtls'.test_class()<CR>", opts)
|
||||||
|
buf_set_keymap("n", "<leader>rn", "<Cmd>lua require'jdtls'.test_nearest_method()<CR>", opts)
|
||||||
|
buf_set_keymap("v", "<leader>ev", "<Esc><Cmd>lua require('jdtls').extract_variable(true)<CR>", opts)
|
||||||
|
buf_set_keymap("n", "<leader>ev", "<Cmd>lua require('jdtls').extract_variable()<CR>", opts)
|
||||||
|
buf_set_keymap("v", "<leader>em", "<Esc><Cmd>lua require('jdtls').extract_method(true)<CR>", opts)
|
||||||
|
end
|
||||||
|
|
||||||
|
local root_markers = {"gradlew", "pom.xml"}
|
||||||
|
local root_dir = require("jdtls.setup").find_root(root_markers)
|
||||||
|
local home = os.getenv("HOME")
|
||||||
|
|
||||||
|
local capabilities = {
|
||||||
|
workspace = {
|
||||||
|
configuration = true
|
||||||
|
},
|
||||||
|
textDocument = {
|
||||||
|
completion = {
|
||||||
|
completionItem = {
|
||||||
|
snippetSupport = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
local workspace_folder = home .. "/.workspace" .. vim.fn.fnamemodify(root_dir, ":p:h:t")
|
||||||
|
local config = {
|
||||||
|
flags = {
|
||||||
|
allow_incremental_sync = true
|
||||||
|
},
|
||||||
|
capabilities = capabilities,
|
||||||
|
on_attach = on_attach
|
||||||
|
}
|
||||||
|
|
||||||
|
config.settings = {
|
||||||
|
["java.format.settings.url"] = home .. "/.config/nvim/language-servers/java-google-formatter.xml",
|
||||||
|
["java.format.settings.profile"] = "GoogleStyle",
|
||||||
|
java = {
|
||||||
|
signatureHelp = {enabled = true},
|
||||||
|
contentProvider = {preferred = "fernflower"},
|
||||||
|
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.*"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
sources = {
|
||||||
|
organizeImports = {
|
||||||
|
starThreshold = 9999,
|
||||||
|
staticStarThreshold = 9999
|
||||||
|
}
|
||||||
|
},
|
||||||
|
codeGeneration = {
|
||||||
|
toString = {
|
||||||
|
template = "${object.className}{${member.name()}=${member.value}, ${otherMembers}}"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
config.cmd = {"java-lsp.sh", workspace_folder}
|
||||||
|
config.on_attach = on_attach
|
||||||
|
config.on_init = function(client, _)
|
||||||
|
client.notify("workspace/didChangeConfiguration", {settings = config.settings})
|
||||||
|
end
|
||||||
|
|
||||||
|
-- local jar_patterns = {
|
||||||
|
-- '/dev/microsoft/java-debug/com.microsoft.java.debug.plugin/target/com.microsoft.java.debug.plugin-*.jar',
|
||||||
|
-- '/dev/dgileadi/vscode-java-decompiler/server/*.jar',
|
||||||
|
-- '/dev/microsoft/vscode-java-test/server/*.jar',
|
||||||
|
-- }
|
||||||
|
|
||||||
|
-- local bundles = {}
|
||||||
|
-- for _, jar_pattern in ipairs(jar_patterns) do
|
||||||
|
-- for _, bundle in ipairs(vim.split(vim.fn.glob(home .. jar_pattern), '\n')) do
|
||||||
|
-- if not vim.endswith(bundle, 'com.microsoft.java.test.runner.jar') then
|
||||||
|
-- table.insert(bundles, bundle)
|
||||||
|
-- end
|
||||||
|
-- end
|
||||||
|
-- end
|
||||||
|
|
||||||
|
local extendedClientCapabilities = require "jdtls".extendedClientCapabilities
|
||||||
|
extendedClientCapabilities.resolveAdditionalTextEditsSupport = true
|
||||||
|
config.init_options = {
|
||||||
|
-- bundles = bundles;
|
||||||
|
extendedClientCapabilities = extendedClientCapabilities
|
||||||
|
}
|
||||||
|
|
||||||
|
-- UI
|
||||||
|
--[[ local finders = require "telescope.finders"
|
||||||
|
local sorters = require "telescope.sorters"
|
||||||
|
local actions = require "telescope.actions"
|
||||||
|
local pickers = require "telescope.pickers"
|
||||||
|
require("jdtls.ui").pick_one_async = function(items, prompt, label_fn, cb)
|
||||||
|
local opts = {}
|
||||||
|
pickers.new(
|
||||||
|
opts,
|
||||||
|
{
|
||||||
|
prompt_title = prompt,
|
||||||
|
finder = finders.new_table {
|
||||||
|
results = items,
|
||||||
|
entry_maker = function(entry)
|
||||||
|
return {
|
||||||
|
value = entry,
|
||||||
|
display = label_fn(entry),
|
||||||
|
ordinal = label_fn(entry)
|
||||||
|
}
|
||||||
|
end
|
||||||
|
},
|
||||||
|
sorter = sorters.get_generic_fuzzy_sorter(),
|
||||||
|
attach_mappings = function(prompt_bufnr)
|
||||||
|
actions.goto_file_selection_edit:replace(
|
||||||
|
function()
|
||||||
|
local selection = actions.get_selected_entry(prompt_bufnr)
|
||||||
|
actions.close(prompt_bufnr)
|
||||||
|
|
||||||
|
cb(selection.value)
|
||||||
|
end
|
||||||
|
)
|
||||||
|
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
}
|
||||||
|
):find()
|
||||||
|
end
|
||||||
|
]]
|
||||||
|
-- Server
|
||||||
|
require("jdtls").start_or_attach(config)
|
||||||
|
end
|
||||||
|
|
||||||
|
return M
|
||||||
|
|
@ -127,6 +127,10 @@ require "lspconfig".tsserver.setup {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
--[[ require "lspconfig".java_language_server.setup {
|
||||||
|
on_attach = on_attach,
|
||||||
|
cmd = {"java-language-server"}
|
||||||
|
} ]]
|
||||||
local servers = {"pyright", "bashls", "clangd", "cssls"}
|
local servers = {"pyright", "bashls", "clangd", "cssls"}
|
||||||
for _, lsp in ipairs(servers) do
|
for _, lsp in ipairs(servers) do
|
||||||
nvim_lsp[lsp].setup {
|
nvim_lsp[lsp].setup {
|
||||||
|
|
|
||||||
|
|
@ -8,3 +8,4 @@ Mojang
|
||||||
config
|
config
|
||||||
#echnic
|
#echnic
|
||||||
technic/!
|
technic/!
|
||||||
|
ConfigManager
|
||||||
|
|
|
||||||
Binary file not shown.
Loading…
Reference in New Issue