More neovim java setup
parent
f2402276ae
commit
c5f7c1f717
|
@ -43,6 +43,7 @@ return require("lazy").setup({
|
||||||
-- Tools
|
-- Tools
|
||||||
"direnv/direnv.vim", -- Integration with Direnv
|
"direnv/direnv.vim", -- Integration with Direnv
|
||||||
"nvim-neotest/neotest", -- Running tests from NeoVim
|
"nvim-neotest/neotest", -- Running tests from NeoVim
|
||||||
|
"nvim-neotest/nvim-nio",
|
||||||
"nvim-neotest/neotest-plenary",
|
"nvim-neotest/neotest-plenary",
|
||||||
"rouge8/neotest-rust",
|
"rouge8/neotest-rust",
|
||||||
"nvim-neotest/neotest-vim-test", -- vim-test plugin for neotest
|
"nvim-neotest/neotest-vim-test", -- vim-test plugin for neotest
|
||||||
|
@ -56,7 +57,10 @@ return require("lazy").setup({
|
||||||
"https://codeberg.org/neovim-java/neovim-java-plugin-host", -- Host for Java plugins
|
"https://codeberg.org/neovim-java/neovim-java-plugin-host", -- Host for Java plugins
|
||||||
|
|
||||||
-- Snippets
|
-- Snippets
|
||||||
"L3MON4D3/LuaSnip", -- snippets support
|
{
|
||||||
|
"L3MON4D3/LuaSnip",
|
||||||
|
build = "make install_jsregexp",
|
||||||
|
}, -- snippets support
|
||||||
"rafamadriz/friendly-snippets", -- Collection of snippets
|
"rafamadriz/friendly-snippets", -- Collection of snippets
|
||||||
"saadparwaiz1/cmp_luasnip", -- cmp snippets support
|
"saadparwaiz1/cmp_luasnip", -- cmp snippets support
|
||||||
|
|
||||||
|
|
|
@ -47,6 +47,13 @@ cmp.setup({
|
||||||
fallback()
|
fallback()
|
||||||
end
|
end
|
||||||
end, { "i", "s" }),
|
end, { "i", "s" }),
|
||||||
|
["<C-;>"] = cmp.mapping(function(fallback)
|
||||||
|
if luasnip.choice_active() then
|
||||||
|
luasnip.change_choice(1)
|
||||||
|
else
|
||||||
|
fallback()
|
||||||
|
end
|
||||||
|
end, { "i", "s" }),
|
||||||
},
|
},
|
||||||
sources = {
|
sources = {
|
||||||
{ name = "nvim_lsp" },
|
{ name = "nvim_lsp" },
|
||||||
|
|
|
@ -36,7 +36,7 @@ require("formatter").setup({
|
||||||
require("formatter.filetypes.zig").zigfmt,
|
require("formatter.filetypes.zig").zigfmt,
|
||||||
},
|
},
|
||||||
java = {
|
java = {
|
||||||
require("formatter.filetypes.java").clangformat,
|
require("esensar.lsp.formatters.clang-format-java"),
|
||||||
},
|
},
|
||||||
godot = {
|
godot = {
|
||||||
require("esensar.lsp.formatters.gdformat"),
|
require("esensar.lsp.formatters.gdformat"),
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
return function()
|
||||||
|
local java_clang_format = require("formatter.filetypes.java").clangformat()
|
||||||
|
for i = #java_clang_format.args, 1, -1 do
|
||||||
|
if java_clang_format.args[i]:find("--style", 1, true) == 1 then
|
||||||
|
table.remove(java_clang_format.args, i)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
vim.list_extend(java_clang_format.args, { '--style="{BasedOnStyle: Google, IndentWidth: 4}"' })
|
||||||
|
return java_clang_format
|
||||||
|
end
|
|
@ -23,18 +23,26 @@ local function is_in_config_home(bufname)
|
||||||
end
|
end
|
||||||
|
|
||||||
function M.setup()
|
function M.setup()
|
||||||
local installed_jdtls = {
|
local installed_jdtls = {}
|
||||||
}
|
|
||||||
|
|
||||||
installed_jdtls.cmd = { "jdtls" }
|
installed_jdtls.cmd = { "jdtls" }
|
||||||
|
|
||||||
require("jdtls").setup_dap({ hotcoredeplace = "auto" })
|
require("jdtls").setup_dap({ hotcoredeplace = "auto" })
|
||||||
|
|
||||||
local config = vim.tbl_extend("force", installed_jdtls, {
|
local config = vim.tbl_deep_extend("force", installed_jdtls, {
|
||||||
flags = {
|
flags = {
|
||||||
allow_incremental_sync = true,
|
allow_incremental_sync = true,
|
||||||
},
|
},
|
||||||
on_attach = common_config.on_attach,
|
on_attach = common_config.on_attach,
|
||||||
|
capabilities = {
|
||||||
|
textDocument = {
|
||||||
|
completion = {
|
||||||
|
completionItem = {
|
||||||
|
snippetSupport = true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
})
|
})
|
||||||
config.settings = {
|
config.settings = {
|
||||||
java = {
|
java = {
|
||||||
|
|
|
@ -326,6 +326,9 @@ local java_project_config = {
|
||||||
["src/main/resources/*"] = {
|
["src/main/resources/*"] = {
|
||||||
type = "resource",
|
type = "resource",
|
||||||
},
|
},
|
||||||
|
["src/main/resources/META-INF/MANIFEST.MF"] = {
|
||||||
|
type = "manifest",
|
||||||
|
},
|
||||||
["src/test/resources/*"] = {
|
["src/test/resources/*"] = {
|
||||||
type = "testresource",
|
type = "testresource",
|
||||||
},
|
},
|
||||||
|
@ -380,6 +383,36 @@ local kotlin_project_config = {
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
local maven_project_config = {
|
||||||
|
["*"] = {
|
||||||
|
start = "mvn package",
|
||||||
|
},
|
||||||
|
["pom.xml"] = {
|
||||||
|
type = "pom",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
local gradle_project_config = {
|
||||||
|
["*"] = {
|
||||||
|
start = "./gradlew assemble",
|
||||||
|
},
|
||||||
|
["build.gradle"] = {
|
||||||
|
type = "build",
|
||||||
|
},
|
||||||
|
["build.gradle.kts"] = {
|
||||||
|
type = "build",
|
||||||
|
},
|
||||||
|
["settings.gradle"] = {
|
||||||
|
type = "settings",
|
||||||
|
},
|
||||||
|
["gradle.properties"] = {
|
||||||
|
type = "properties",
|
||||||
|
},
|
||||||
|
["local.properties"] = {
|
||||||
|
type = "localproperties",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
local mint_config = {
|
local mint_config = {
|
||||||
["*"] = {
|
["*"] = {
|
||||||
start = "mint start",
|
start = "mint start",
|
||||||
|
@ -635,6 +668,8 @@ vim.g.projectionist_heuristics = {
|
||||||
["lua/"] = lua_vim_plugin_config,
|
["lua/"] = lua_vim_plugin_config,
|
||||||
["build.gradle|pom.xml"] = java_project_config,
|
["build.gradle|pom.xml"] = java_project_config,
|
||||||
["build.gradle|build.gradle.kts"] = kotlin_project_config,
|
["build.gradle|build.gradle.kts"] = kotlin_project_config,
|
||||||
|
["build.gradle|build.gradle.kts|settings.gradle"] = gradle_project_config,
|
||||||
|
["pom.xml"] = maven_project_config,
|
||||||
["mint.json"] = mint_config,
|
["mint.json"] = mint_config,
|
||||||
["shard.yml"] = crystal_config,
|
["shard.yml"] = crystal_config,
|
||||||
["Cargo.toml"] = rust_config,
|
["Cargo.toml"] = rust_config,
|
||||||
|
|
|
@ -1,6 +1,27 @@
|
||||||
local luasnip = require("luasnip")
|
local luasnip = require("luasnip")
|
||||||
|
local types = require("luasnip.util.types")
|
||||||
local s = luasnip.snippet
|
local s = luasnip.snippet
|
||||||
|
local sn = luasnip.snippet_node
|
||||||
local f = luasnip.function_node
|
local f = luasnip.function_node
|
||||||
|
local t = luasnip.text_node
|
||||||
|
local i = luasnip.insert_node
|
||||||
|
local c = luasnip.choice_node
|
||||||
|
local d = luasnip.dynamic_node
|
||||||
|
|
||||||
|
luasnip.config.setup({
|
||||||
|
ext_opts = {
|
||||||
|
[types.choiceNode] = {
|
||||||
|
active = {
|
||||||
|
virt_text = { { "●", "GruvboxOrange" } },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
[types.insertNode] = {
|
||||||
|
active = {
|
||||||
|
virt_text = { { "●", "GruvboxBlue" } },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
luasnip.add_snippets("all", {
|
luasnip.add_snippets("all", {
|
||||||
s("date", { f(function(_, _)
|
s("date", { f(function(_, _)
|
||||||
|
@ -17,4 +38,122 @@ luasnip.add_snippets("all", {
|
||||||
end) }),
|
end) }),
|
||||||
})
|
})
|
||||||
|
|
||||||
|
-- Java snippets
|
||||||
|
local function jdocsnip(args, _, old_state)
|
||||||
|
-- !!! old_state is used to preserve user-input here. DON'T DO IT THAT WAY!
|
||||||
|
-- Using a restoreNode instead is much easier.
|
||||||
|
-- View this only as an example on how old_state functions.
|
||||||
|
local nodes = {
|
||||||
|
t({ "/**", " * " }),
|
||||||
|
i(1, "A short Description"),
|
||||||
|
t({ "", "" }),
|
||||||
|
}
|
||||||
|
|
||||||
|
-- These will be merged with the snippet; that way, should the snippet be updated,
|
||||||
|
-- some user input eg. text can be referred to in the new snippet.
|
||||||
|
local param_nodes = {}
|
||||||
|
|
||||||
|
if old_state then
|
||||||
|
nodes[2] = i(1, old_state.descr:get_text())
|
||||||
|
end
|
||||||
|
param_nodes.descr = nodes[2]
|
||||||
|
|
||||||
|
-- At least one param.
|
||||||
|
if string.find(args[2][1], ", ") then
|
||||||
|
vim.list_extend(nodes, { t({ " * ", "" }) })
|
||||||
|
end
|
||||||
|
|
||||||
|
local insert = 2
|
||||||
|
for _, arg in ipairs(vim.split(args[2][1], ", ", true)) do
|
||||||
|
-- Get actual name parameter.
|
||||||
|
arg = vim.split(arg, " ", true)[2]
|
||||||
|
if arg then
|
||||||
|
local inode
|
||||||
|
-- if there was some text in this parameter, use it as static_text for this new snippet.
|
||||||
|
if old_state and old_state[arg] then
|
||||||
|
inode = i(insert, old_state["arg" .. arg]:get_text())
|
||||||
|
else
|
||||||
|
inode = i(insert)
|
||||||
|
end
|
||||||
|
vim.list_extend(nodes, { t({ " * @param " .. arg .. " " }), inode, t({ "", "" }) })
|
||||||
|
param_nodes["arg" .. arg] = inode
|
||||||
|
|
||||||
|
insert = insert + 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if args[1][1] ~= "void" then
|
||||||
|
local inode
|
||||||
|
if old_state and old_state.ret then
|
||||||
|
inode = i(insert, old_state.ret:get_text())
|
||||||
|
else
|
||||||
|
inode = i(insert)
|
||||||
|
end
|
||||||
|
|
||||||
|
vim.list_extend(nodes, { t({ " * ", " * @return " }), inode, t({ "", "" }) })
|
||||||
|
param_nodes.ret = inode
|
||||||
|
insert = insert + 1
|
||||||
|
end
|
||||||
|
|
||||||
|
if vim.tbl_count(args[3]) ~= 1 then
|
||||||
|
local exc = string.gsub(args[3][2], " throws ", "")
|
||||||
|
local ins
|
||||||
|
if old_state and old_state.ex then
|
||||||
|
ins = i(insert, old_state.ex:get_text())
|
||||||
|
else
|
||||||
|
ins = i(insert)
|
||||||
|
end
|
||||||
|
vim.list_extend(nodes, { t({ " * ", " * @throws " .. exc .. " " }), ins, t({ "", "" }) })
|
||||||
|
param_nodes.ex = ins
|
||||||
|
insert = insert + 1
|
||||||
|
end
|
||||||
|
|
||||||
|
vim.list_extend(nodes, { t({ " */" }) })
|
||||||
|
|
||||||
|
local snip = sn(nil, nodes)
|
||||||
|
-- Error on attempting overwrite.
|
||||||
|
snip.old_state = param_nodes
|
||||||
|
return snip
|
||||||
|
end
|
||||||
|
|
||||||
|
luasnip.add_snippets("java", {
|
||||||
|
-- Very long example for a java class.
|
||||||
|
s("fn", {
|
||||||
|
d(6, jdocsnip, { 2, 4, 5 }),
|
||||||
|
t({ "", "" }),
|
||||||
|
c(1, {
|
||||||
|
t("public "),
|
||||||
|
t("private "),
|
||||||
|
}),
|
||||||
|
c(2, {
|
||||||
|
t("void"),
|
||||||
|
t("String"),
|
||||||
|
t("char"),
|
||||||
|
t("int"),
|
||||||
|
t("double"),
|
||||||
|
t("boolean"),
|
||||||
|
i(nil, ""),
|
||||||
|
}),
|
||||||
|
t(" "),
|
||||||
|
i(3, "myFunc"),
|
||||||
|
t("("),
|
||||||
|
i(4),
|
||||||
|
t(")"),
|
||||||
|
c(5, {
|
||||||
|
t(""),
|
||||||
|
sn(nil, {
|
||||||
|
t({ "", " throws " }),
|
||||||
|
i(1),
|
||||||
|
}),
|
||||||
|
}),
|
||||||
|
t({ " {", "\t" }),
|
||||||
|
i(0),
|
||||||
|
t({ "", "}" }),
|
||||||
|
}),
|
||||||
|
}, {
|
||||||
|
key = "java",
|
||||||
|
})
|
||||||
|
|
||||||
require("luasnip.loaders.from_vscode").lazy_load()
|
require("luasnip.loaders.from_vscode").lazy_load()
|
||||||
|
|
||||||
|
require("luasnip").filetype_extend("java", { "javadoc", "java-tests" })
|
||||||
|
|
Loading…
Reference in New Issue