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

View file

@ -21,13 +21,7 @@ wk.register({
d = { require("telescope.builtin").lsp_document_symbols, "Document symbol" }, d = { require("telescope.builtin").lsp_document_symbols, "Document symbol" },
w = { require("telescope.builtin").lsp_workspace_symbols, "Workspace symbol" }, w = { require("telescope.builtin").lsp_workspace_symbols, "Workspace symbol" },
}, },
f = { f = { LspFormat, "Format file" },
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",
},
a = { vim.lsp.buf.code_action, "Code actions" }, a = { vim.lsp.buf.code_action, "Code actions" },
r = { vim.lsp.buf.rename, "Rename" }, r = { vim.lsp.buf.rename, "Rename" },
l = { vim.lsp.codelens.run, "Run codelens" }, l = { vim.lsp.codelens.run, "Run codelens" },