115 lines
3.3 KiB
Lua
115 lines
3.3 KiB
Lua
-- https://www.lazyvim.org/plugins/lsp
|
|
|
|
return {
|
|
|
|
-- change mason config
|
|
-- note: don't forget to update treesitter for languages
|
|
{
|
|
"williamboman/mason.nvim",
|
|
|
|
opts = function(_, opts)
|
|
local ensure_installed = {
|
|
-- python
|
|
"ruff-lsp",
|
|
"pyright",
|
|
|
|
-- lua
|
|
"lua-language-server",
|
|
|
|
-- shell
|
|
"bash-language-server",
|
|
|
|
-- docker
|
|
"dockerfile-language-server",
|
|
|
|
-- rust
|
|
"rust-analyzer",
|
|
|
|
--svelte
|
|
"svelte-language-server",
|
|
|
|
-- vue
|
|
"vue-language-server",
|
|
|
|
-- php
|
|
"intelephense",
|
|
-- see lazy.lua for LazyVim extras
|
|
}
|
|
|
|
opts.ensure_installed = opts.ensure_installed or {}
|
|
vim.list_extend(opts.ensure_installed, ensure_installed)
|
|
end,
|
|
},
|
|
{
|
|
"nvimtools/none-ls.nvim",
|
|
dependencies = { "mason.nvim" },
|
|
event = { "BufReadPre", "BufNewFile" },
|
|
opts = function(_, opts)
|
|
local null_ls = require("null-ls")
|
|
local formatting = null_ls.builtins.formatting
|
|
local diagnostics = null_ls.builtins.diagnostics
|
|
local code_actions = null_ls.builtins.code_actions
|
|
|
|
-- null_ls.setup({
|
|
-- debug = false, -- Turn on debug for :NullLsLog
|
|
-- -- diagnostics_format = "#{m} #{s}[#{c}]",
|
|
-- })
|
|
|
|
local function prefer_bin_from_venv(executable_name)
|
|
-- Return the path to the executable if $VIRTUAL_ENV is set and the binary exists somewhere beneath the $VIRTUAL_ENV path, otherwise get it from Mason
|
|
if vim.env.VIRTUAL_ENV then
|
|
local paths = vim.fn.glob(vim.env.VIRTUAL_ENV .. "/**/bin/" .. executable_name, true, true)
|
|
local executable_path = table.concat(paths, ", ")
|
|
if executable_path ~= "" then
|
|
-- vim.api.nvim_echo(
|
|
-- { { "Using path for " .. executable_name .. ": " .. executable_path, "None" } },
|
|
-- false,
|
|
-- {}
|
|
-- )
|
|
return executable_path
|
|
end
|
|
end
|
|
|
|
local mason_registry = require("mason-registry")
|
|
local mason_path = mason_registry.get_package(executable_name):get_install_path()
|
|
.. "/venv/bin/"
|
|
.. executable_name
|
|
-- vim.api.nvim_echo({ { "Using Mason for " .. executable_name .. ": " .. mason_path, "None" } }, false, {})
|
|
return mason_path
|
|
end
|
|
|
|
local sources = {
|
|
-- list of supported sources:
|
|
-- https://github.com/jose-elias-alvarez/null-ls.nvim/blob/main/doc/BUILTINS.md
|
|
|
|
diagnostics.mypy.with({
|
|
filetypes = { "python" },
|
|
command = prefer_bin_from_venv("mypy"),
|
|
}),
|
|
formatting.black.with({
|
|
filetypes = { "python" },
|
|
command = prefer_bin_from_venv("black"),
|
|
}),
|
|
|
|
-- installed via Mason
|
|
formatting.stylua.with({
|
|
extra_args = { "--indent-type", "Spaces", "--indent-width", "2" },
|
|
}),
|
|
formatting.shfmt,
|
|
formatting.yamlfix, -- requires python
|
|
formatting.prettierd,
|
|
diagnostics.yamllint,
|
|
diagnostics.sqlfluff.with({
|
|
extra_args = { "--dialect", "postgres" },
|
|
}),
|
|
code_actions.gitsigns,
|
|
}
|
|
|
|
-- extend opts.sources
|
|
for _, source in ipairs(sources) do
|
|
table.insert(opts.sources, source)
|
|
end
|
|
end,
|
|
},
|
|
}
|