114 lines
3.1 KiB
Lua
114 lines
3.1 KiB
Lua
return {
|
|
recommended = function()
|
|
return LazyVim.extras.wants({
|
|
ft = "kotlin",
|
|
root = {
|
|
"settings.gradle", -- Gradle (multi-project)
|
|
"settings.gradle.kts", -- Gradle (multi-project)
|
|
"build.xml", -- Ant
|
|
"pom.xml", -- Maven
|
|
"build.gradle", -- Gradle
|
|
"build.gradle.kts", -- Gradle
|
|
},
|
|
})
|
|
end,
|
|
-- Add packages(linting, debug adapter)
|
|
{
|
|
"williamboman/mason.nvim",
|
|
opts = { ensure_installed = { "ktlint" } },
|
|
},
|
|
-- Add syntax highlighting
|
|
{
|
|
"nvim-treesitter/nvim-treesitter",
|
|
opts = { ensure_installed = { "kotlin" } },
|
|
},
|
|
-- Add language server
|
|
{
|
|
"neovim/nvim-lspconfig",
|
|
opts = {
|
|
servers = {
|
|
kotlin_language_server = {},
|
|
},
|
|
},
|
|
},
|
|
-- Add linting
|
|
{
|
|
"mfussenegger/nvim-lint",
|
|
optional = true,
|
|
dependencies = "williamboman/mason.nvim",
|
|
opts = {
|
|
linters_by_ft = { kotlin = { "ktlint" } },
|
|
},
|
|
},
|
|
-- Add formatting
|
|
{
|
|
"stevearc/conform.nvim",
|
|
optional = true,
|
|
opts = {
|
|
formatters_by_ft = { kotlin = { "ktlint" } },
|
|
},
|
|
},
|
|
-- Add formatting and linting
|
|
{
|
|
"nvimtools/none-ls.nvim",
|
|
optional = true,
|
|
opts = function(_, opts)
|
|
local nls = require("null-ls")
|
|
opts.sources = vim.list_extend(opts.sources or {}, {
|
|
nls.builtins.formatting.ktlint,
|
|
nls.builtins.diagnostics.ktlint,
|
|
})
|
|
end,
|
|
},
|
|
-- Add debugger
|
|
{
|
|
"mfussenegger/nvim-dap",
|
|
optional = true,
|
|
dependencies = "williamboman/mason.nvim",
|
|
opts = function()
|
|
local dap = require("dap")
|
|
if not dap.adapters.kotlin then
|
|
dap.adapters.kotlin = {
|
|
type = "executable",
|
|
command = "kotlin-debug-adapter",
|
|
options = { auto_continue_if_many_stopped = false },
|
|
}
|
|
end
|
|
|
|
dap.configurations.kotlin = {
|
|
{
|
|
type = "kotlin",
|
|
request = "launch",
|
|
name = "This file",
|
|
-- may differ, when in doubt, whatever your project structure may be,
|
|
-- it has to correspond to the class file located at `build/classes/`
|
|
-- and of course you have to build before you debug
|
|
mainClass = function()
|
|
local root = vim.fs.find("src", { path = vim.uv.cwd(), upward = true, stop = vim.env.HOME })[1] or ""
|
|
local fname = vim.api.nvim_buf_get_name(0)
|
|
-- src/main/kotlin/websearch/Main.kt -> websearch.MainKt
|
|
return fname:gsub(root, ""):gsub("main/kotlin/", ""):gsub(".kt", "Kt"):gsub("/", "."):sub(2, -1)
|
|
end,
|
|
projectRoot = "${workspaceFolder}",
|
|
jsonLogFile = "",
|
|
enableJsonLogging = false,
|
|
},
|
|
{
|
|
-- Use this for unit tests
|
|
-- First, run
|
|
-- ./gradlew --info cleanTest test --debug-jvm
|
|
-- then attach the debugger to it
|
|
type = "kotlin",
|
|
request = "attach",
|
|
name = "Attach to debugging session",
|
|
port = 5005,
|
|
args = {},
|
|
projectRoot = vim.fn.getcwd,
|
|
hostName = "localhost",
|
|
timeout = 2000,
|
|
},
|
|
}
|
|
end,
|
|
},
|
|
}
|