Migrate away from null-ls

main
Ensar Sarajčić 2023-09-04 21:12:30 +02:00
parent adef7b6f56
commit 527da4d59f
9 changed files with 102 additions and 174 deletions

View File

@ -22,7 +22,7 @@ presets = "cpu:1:default,proc:0:default cpu:0:default,mem:0:default,net:0:defaul
#* Set to True to enable "h,j,k,l,g,G" keys for directional control in lists. #* Set to True to enable "h,j,k,l,g,G" keys for directional control in lists.
#* Conflicting keys for h:"help" and k:"kill" is accessible while holding shift. #* Conflicting keys for h:"help" and k:"kill" is accessible while holding shift.
vim_keys = true vim_keys = True
#* Rounded corners on boxes, is ignored if TTY mode is ON. #* Rounded corners on boxes, is ignored if TTY mode is ON.
rounded_corners = True rounded_corners = True

View File

@ -123,7 +123,8 @@ return require("lazy").setup({
"hrsh7th/cmp-nvim-lua", -- Nvim-Lua source for nvim-cmp "hrsh7th/cmp-nvim-lua", -- Nvim-Lua source for nvim-cmp
"hrsh7th/cmp-omni", -- omnifunc source for nvim-cmp "hrsh7th/cmp-omni", -- omnifunc source for nvim-cmp
"hrsh7th/nvim-cmp", -- completion integration "hrsh7th/nvim-cmp", -- completion integration
"jose-elias-alvarez/null-ls.nvim", -- Linting and formatting "mhartington/formatter.nvim", -- formatting support
"mfussenegger/nvim-lint", -- linting support
-- LSP language specific -- LSP language specific
"folke/neodev.nvim", -- Built-in Lua integration with LSP "folke/neodev.nvim", -- Built-in Lua integration with LSP

View File

@ -2,76 +2,81 @@
-- - LSP diagnostics config - -- - LSP diagnostics config -
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
local null_ls = require("null-ls") require("formatter").setup({
local custom_sources = require("esensar.lsp.null-ls_sources") filetype = {
local common_config = require("esensar.lsp.server_config") python = {
require("formatter.filetypes.python").isort,
null_ls.setup({ require("formatter.filetypes.python").autopep8,
sources = { },
-- Python kotlin = {
null_ls.builtins.diagnostics.flake8, require("formatter.filetypes.kotlin").ktlint,
null_ls.builtins.formatting.isort, },
null_ls.builtins.formatting.autopep8, cpp = {
require("formatter.filetypes.cpp").clangformat,
-- Kotlin },
null_ls.builtins.formatting.ktlint, c = {
null_ls.builtins.diagnostics.ktlint, require("formatter.filetypes.c").clangformat,
},
-- Clojure cmake = {
null_ls.builtins.diagnostics.clj_kondo, require("formatter.filetypes.cmake").cmakeformat,
null_ls.builtins.formatting.joker.with({ },
filetypes = { "clojure" }, lua = {
}), require("formatter.filetypes.lua").stylua,
},
-- C++ and C dart = {
null_ls.builtins.formatting.clang_format.with({ require("formatter.filetypes.dart").dartformat,
filetypes = { "cpp", "c" }, },
}), go = {
null_ls.builtins.diagnostics.clang_check, require("formatter.filetypes.go").gofmt,
},
-- Cmake rust = {
null_ls.builtins.formatting.cmake_format, require("formatter.filetypes.rust").rustfmt,
},
-- Lua zig = {
null_ls.builtins.formatting.stylua, require("formatter.filetypes.zig").zigfmt,
null_ls.builtins.diagnostics.luacheck.with({ },
extra_args = { "--config", vim.fn.stdpath("config") .. "/.luacheckrc" }, java = {
}), require("formatter.filetypes.java").clangformat,
},
-- Dart godot = {
null_ls.builtins.formatting.dart_format, require("esensar.lsp.formatters.gdformat"),
},
-- Go ["*"] = {
null_ls.builtins.formatting.gofmt, require("formatter.filetypes.any").remove_trailing_whitespace,
},
-- Rust
null_ls.builtins.formatting.rustfmt,
-- Zig
null_ls.builtins.formatting.zigfmt,
-- Java
null_ls.builtins.formatting.google_java_format,
-- General
null_ls.builtins.formatting.trim_newlines,
null_ls.builtins.formatting.trim_whitespace,
null_ls.builtins.hover.dictionary.with({
filetypes = { "text", "markdown", "vimwiki" },
}),
null_ls.builtins.diagnostics.misspell,
null_ls.builtins.code_actions.gitsigns,
-- Godot
custom_sources.formatters.gdformat,
custom_sources.diagnostics.gdlint,
-- Vim-Ledger
custom_sources.completion.ledger,
}, },
on_attach = common_config.on_attach,
}) })
require("lint").linters_by_ft = {
python = { "flake8" },
kotlin = { "ktlint" },
clojure = { "clj_kondo" },
c = { "clang_check" },
cpp = { "clang_check" },
lua = { "luacheck" },
gdscript = { "gdlint" },
}
require("lint").linters.misspell = {
name = "Misspell",
stdin = true,
cmd = "misspell",
parser = require("lint.parser").from_pattern("(%w+):(%d+):(%d+):(.+)", { "file", "lnum", "col", "message" }),
}
require("lint").linters.gdlint = {
name = "GDLint",
cmd = "gdlint",
stdin = true,
args = {
function()
vim.fn.expand("%")
end,
},
stream = "stderr",
parser = require("lint.parser").from_pattern("(.+):(%d+): Error: (.*)", { "file", "lnum", "message" }),
}
vim.keymap.set("n", "]w", vim.diagnostic.goto_next) vim.keymap.set("n", "]w", vim.diagnostic.goto_next)
vim.keymap.set("n", "[w", vim.diagnostic.goto_prev) vim.keymap.set("n", "[w", vim.diagnostic.goto_prev)
vim.api.nvim_create_user_command( vim.api.nvim_create_user_command(
@ -85,3 +90,13 @@ vim.api.nvim_create_user_command(
{ desc = "Show LSP buffer warnings in a location list" } { desc = "Show LSP buffer warnings in a location list" }
) )
vim.api.nvim_create_user_command("Format", vim.lsp.buf.format, { desc = "Format current buffer using LSP" }) vim.api.nvim_create_user_command("Format", vim.lsp.buf.format, { desc = "Format current buffer using LSP" })
-- Auto linting
vim.api.nvim_create_autocmd({ "BufWritePost" }, {
callback = function()
vim.cmd("FormatWrite")
require("lint").try_lint()
require("lint").try_lint({ "codespell" })
require("lint").try_lint({ "misspell" })
end,
})

View File

@ -0,0 +1,8 @@
return {
exe = "gdformat",
args = {
"--diff",
"-"
},
stdin = true
}

View File

@ -1,17 +0,0 @@
local null_ls = require("null-ls")
local helpers = require("null-ls.helpers")
return {
name = "gdformat",
meta = {
url = "https://github.com/Scony/godot-gdscript-toolkit",
description = "Formatter for GDScript",
},
method = null_ls.methods.FORMATTING,
filetypes = { "gdscript" },
generator = helpers.formatter_factory({
command = "gdformat",
args = { "--diff", "-" },
to_stdin = true,
}),
}

View File

@ -1,33 +0,0 @@
local null_ls = require("null-ls")
local helpers = require("null-ls.helpers")
return {
name = "gdlint",
meta = {
url = "https://github.com/Scony/godot-gdscript-toolkit",
description = "Linter for GDScript",
},
method = null_ls.methods.DIAGNOSTICS_ON_SAVE,
filetypes = { "gdscript" },
generator = helpers.generator_factory({
command = "gdlint",
args = { "$FILENAME" },
format = "line",
from_stderr = true,
multiple_files = true,
check_exit_code = function(code)
return code == 0
end,
on_output = helpers.diagnostics.from_patterns({
{
pattern = "(.+):(%d+): Error: (.*)",
groups = { "filename", "row", "message" },
overrides = {
diagnostic = {
severity = helpers.diagnostics.severities.error,
},
},
},
}),
}),
}

View File

@ -1,12 +0,0 @@
-- Place for custom null-ls sources
return {
formatters = {
gdformat = require("esensar.lsp.null-ls_sources.gdformat"),
},
diagnostics = {
gdlint = require("esensar.lsp.null-ls_sources.gdlint"),
},
completion = {
ledger = require("esensar.lsp.null-ls_sources.ledger"),
},
}

View File

@ -1,40 +0,0 @@
local null_ls = require("null-ls")
local helpers = require("null-ls.helpers")
return {
name = "ledger-complete",
meta = {
url = "https://github.com/ledger/vim-ledger",
description = "vim-ledger omnifunc completion source",
},
method = null_ls.methods.COMPLETION,
filetypes = { "ledger" },
generator = helpers.generator_factory({
fn = function(params, done)
-- This can be slow
if #params.word_to_complete < 4 then
done({ { items = {}, isIncomplete = false } })
return
end
vim.fn.LedgerComplete(1, nil)
local results = vim.fn.LedgerComplete(0, #params.word_to_complete)
local words = {}
local items = {}
for result in ipairs(results) do
table.insert(words, result)
end
for _, word in ipairs(words) do
table.insert(items, {
label = word,
insertText = word,
})
end
done({ { items = items, isIncomplete = #items == 0 } })
end,
async = true,
}),
}

View File

@ -2,12 +2,18 @@
-- - LSP servers configuration - -- - LSP servers configuration -
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
require("neodev").setup({
library = { plugins = { "neotest", "plenary.nvim" }, types = true },
-- Always add neovim plugins into lua_ls library, even if not neovim config
override = function(root_dir, library)
library.enabled = true
library.plugins = true
end,
})
local lspconfig = require("lspconfig") local lspconfig = require("lspconfig")
require("mason").setup() require("mason").setup()
require("mason-lspconfig").setup() require("mason-lspconfig").setup()
require("neodev").setup({
library = { plugins = { "neotest", "plenary.nvim" }, types = true },
})
local common_config = require("esensar.lsp.server_config") local common_config = require("esensar.lsp.server_config")
-- Language specific LSP config overrides -- Language specific LSP config overrides