fix(neovim): improve formatting setup

This commit is contained in:
Felix Schröter 2022-10-04 14:44:30 +02:00
parent c70ecc1dd1
commit 62284ccb57
Signed by: felschr
GPG key ID: 671E39E6744C807D
2 changed files with 42 additions and 62 deletions

View file

@ -6,6 +6,16 @@ require("nvim-lightbulb").setup({
}
})
LspFormat = function(bufnr)
vim.lsp.buf.format({
filter = function(client)
return not vim.tbl_contains({ "tsserver", "jsonls", "rnix" }, client.name)
end,
bufnr,
timeout_ms = 5000,
})
end
local format_augroup = vim.api.nvim_create_augroup("LspFormatting", {})
local on_attach = function(client, bufnr)
-- codelens
@ -21,8 +31,7 @@ local on_attach = function(client, bufnr)
group = format_augroup,
buffer = bufnr,
callback = function()
-- TODO switch to `vim.lsp.buf.format` after updating to nvim 0.8
vim.lsp.buf.formatting_seq_sync(nil, nil, { "tsserver", "null-ls" })
LspFormat(bufnr)
end,
})
end
@ -42,50 +51,30 @@ if not configs.glslls then
}
end
local default_capabilities = function()
local capabilities_ = vim.lsp.protocol.make_client_capabilities()
local capabilities = require("cmp_nvim_lsp").update_capabilities(capabilities_)
capabilities.textDocument.completion.completionItem.snippetSupport = true
return capabilities
end
local capabilities = default_capabilities()
local capabilities_no_formatting = default_capabilities()
capabilities_no_formatting.textDocument.formatting = false
capabilities_no_formatting.textDocument.rangeFormatting = false
capabilities_no_formatting.textDocument.range_formatting = false
-- lsp configs
local c = {
default = {
local default_config = {
on_attach = on_attach,
capabilities = capabilities,
},
no_formatting = {
on_attach = function(client, bufnr)
client.server_capabilities.documentFormattingProvider = false
client.server_capabilities.documentRangeFormattingProvider = false
on_attach(client, bufnr)
end,
capabilities = capabilities_no_formatting,
},
}
config.bashls.setup(c.default)
config.jsonls.setup(c.default)
config.yamlls.setup(c.default)
config.html.setup(c.default)
config.cssls.setup(c.default)
config.dockerls.setup(c.default)
config.rnix.setup(c.no_formatting)
config.tsserver.setup(c.default)
config.graphql.setup(c.default)
config.pylsp.setup(c.default)
config.terraformls.setup(c.default)
config.hls.setup(c.default)
config.bufls.setup(c.default)
config.vimls.setup(c.default)
config.glslls.setup(c.default)
config.bashls.setup(default_config)
config.jsonls.setup(default_config)
config.yamlls.setup(default_config)
config.html.setup(default_config)
config.cssls.setup(default_config)
config.dockerls.setup(default_config)
config.rnix.setup(default_config)
config.tsserver.setup(default_config)
config.graphql.setup(default_config)
config.pylsp.setup(default_config)
config.terraformls.setup(default_config)
config.hls.setup(default_config)
config.bufls.setup(default_config)
config.vimls.setup(default_config)
config.glslls.setup(default_config)
config.rust_analyzer.setup {
on_attach = on_attach,
@ -160,20 +149,17 @@ null_ls.setup({
null_ls.builtins.diagnostics.eslint_d,
null_ls.builtins.diagnostics.stylelint,
null_ls.builtins.formatting.shfmt,
null_ls.builtins.formatting.prettier_d_slim.with {
filetypes = {
"css",
"scss",
"less",
"html",
"json",
"jsonc",
"yaml",
"markdown",
"graphql",
"handlebars",
null_ls.builtins.formatting.eslint,
-- TODO prettier_d_slim isn't working
null_ls.builtins.formatting.prettier.with {
disabled_filetypes = {
"javascript",
"javascriptreact",
"typescript",
"typescriptreact",
},
},
null_ls.builtins.formatting.stylelint,
null_ls_custom.formatting.nix_fmt,
null_ls.builtins.formatting.buf,
null_ls.builtins.formatting.rustfmt,

View file

@ -21,13 +21,7 @@ wk.register({
d = { require("telescope.builtin").lsp_document_symbols, "Document symbol" },
w = { require("telescope.builtin").lsp_workspace_symbols, "Workspace symbol" },
},
f = {
function()
-- TODO switch to `vim.lsp.buf.format` after updating to nvim 0.8
vim.lsp.buf.formatting_seq_sync(nil, nil, { "tsserver", "null-ls" })
end,
"Format file",
},
f = { LspFormat, "Format file" },
a = { vim.lsp.buf.code_action, "Code actions" },
r = { vim.lsp.buf.rename, "Rename" },
l = { vim.lsp.codelens.run, "Run codelens" },