From 62284ccb57de249fed7935ec62fe61bdd5ccd970 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Schr=C3=B6ter?= Date: Tue, 4 Oct 2022 14:44:30 +0200 Subject: [PATCH] fix(neovim): improve formatting setup --- home/editors/neovim/lsp/lsp.lua | 96 ++++++++++++---------------- home/editors/neovim/lsp/mappings.lua | 8 +-- 2 files changed, 42 insertions(+), 62 deletions(-) diff --git a/home/editors/neovim/lsp/lsp.lua b/home/editors/neovim/lsp/lsp.lua index c7a0837..cee025c 100644 --- a/home/editors/neovim/lsp/lsp.lua +++ b/home/editors/neovim/lsp/lsp.lua @@ -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_ = vim.lsp.protocol.make_client_capabilities() +local capabilities = require("cmp_nvim_lsp").update_capabilities(capabilities_) +capabilities.textDocument.completion.completionItem.snippetSupport = true -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 = { - 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, - }, +local default_config = { + on_attach = on_attach, + capabilities = capabilities, } -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, diff --git a/home/editors/neovim/lsp/mappings.lua b/home/editors/neovim/lsp/mappings.lua index b3f4e55..7cf1b1b 100644 --- a/home/editors/neovim/lsp/mappings.lua +++ b/home/editors/neovim/lsp/mappings.lua @@ -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" },