From 041c9fb929182d68ee70e629af8b181e8b0c2ece Mon Sep 17 00:00:00 2001 From: Roel de Cort Date: Thu, 16 May 2024 01:19:35 +0200 Subject: [PATCH] update conform formatting and lsp config --- config/plugins/lsp/conform.nix | 183 +++++++++++++++++++++++++++++---- config/plugins/lsp/lsp.nix | 1 + 2 files changed, 165 insertions(+), 19 deletions(-) diff --git a/config/plugins/lsp/conform.nix b/config/plugins/lsp/conform.nix index a796a48..fa9d051 100644 --- a/config/plugins/lsp/conform.nix +++ b/config/plugins/lsp/conform.nix @@ -1,23 +1,168 @@ { - plugins.conform-nvim = { - enable = true; - formatOnSave = { - lspFallback = true; - timeoutMs = 500; - }; - notifyOnError = true; - formattersByFt = { - liquidsoap = ["liquidsoap-prettier"]; - html = [["prettierd" "prettier"]]; - css = [["prettierd" "prettier"]]; - javascript = [["prettierd" "prettier"]]; - typescript = [["prettierd" "prettier"]]; - python = ["black"]; - lua = ["stylua"]; - nix = ["alejandra"]; - markdown = [["prettierd" "prettier"]]; - yaml = ["yamllint" "yamlfmt"]; - terraform = ["terraform-fmt"]; + lib, + pkgs, + ... +}: { + config = { + extraConfigLuaPre = + # lua + '' + local slow_format_filetypes = {} + + vim.api.nvim_create_user_command("FormatDisable", function(args) + if args.bang then + -- FormatDisable! will disable formatting just for this buffer + vim.b.disable_autoformat = true + else + vim.g.disable_autoformat = true + end + end, { + desc = "Disable autoformat-on-save", + bang = true, + }) + vim.api.nvim_create_user_command("FormatEnable", function() + vim.b.disable_autoformat = false + vim.g.disable_autoformat = false + end, { + desc = "Re-enable autoformat-on-save", + }) + vim.api.nvim_create_user_command("FormatToggle", function(args) + if args.bang then + -- Toggle formatting for current buffer + vim.b.disable_autoformat = not vim.b.disable_autoformat + else + -- Toggle formatting globally + vim.g.disable_autoformat = not vim.g.disable_autoformat + end + end, { + desc = "Toggle autoformat-on-save", + bang = true, + }) + ''; + plugins.conform-nvim = { + enable = true; + formatOnSave = '' + function(bufnr) + if vim.g.disable_autoformat or vim.b[bufnr].disable_autoformat then + return + end + + if slow_format_filetypes[vim.bo[bufnr].filetype] then + return + end + + local function on_format(err) + if err and err:match("timeout$") then + slow_format_filetypes[vim.bo[bufnr].filetype] = true + end + end + + return { timeout_ms = 200, lsp_fallback = true }, on_format + end + ''; + + formatAfterSave = '' + function(bufnr) + if vim.g.disable_autoformat or vim.b[bufnr].disable_autoformat then + return + end + + if not slow_format_filetypes[vim.bo[bufnr].filetype] then + return + end + + return { lsp_fallback = true } + end + ''; + #formatOnSave = { + # lspFallback = true; + # timeoutMs = 500; + #}; + notifyOnError = true; + formattersByFt = { + html = [ + [ + "prettierd" + "prettier" + ] + ]; + css = [ + [ + "prettierd" + "prettier" + ] + ]; + javascript = [ + [ + "prettierd" + "prettier" + ] + ]; + typescript = [ + [ + "prettierd" + "prettier" + ] + ]; + python = [ + "black" + "isort" + ]; + lua = ["stylua"]; + nix = ["alejandra"]; + markdown = [ + [ + "prettierd" + "prettier" + ] + ]; + yaml = [ + [ + "prettierd" + "prettier" + ] + ]; + terraform = ["terraform_fmt"]; + bash = [ + "shellcheck" + "shellharden" + "shfmt" + ]; + json = ["jq"]; + "_" = ["trim_whitespace"]; + }; + formatters = { + black = { + command = "${lib.getExe pkgs.black}"; + }; + isort = { + command = "${lib.getExe pkgs.isort}"; + }; + alejandra = { + command = "${lib.getExe pkgs.alejandra}"; + }; + jq = { + command = "${lib.getExe pkgs.jq}"; + }; + prettierd = { + command = "${lib.getExe pkgs.prettierd}"; + }; + stylua = { + command = "${lib.getExe pkgs.stylua}"; + }; + shellcheck = { + command = "${lib.getExe pkgs.shellcheck}"; + }; + shfmt = { + command = "${lib.getExe pkgs.shfmt}"; + }; + shellharden = { + command = "${lib.getExe pkgs.shellharden}"; + }; + #yamlfmt = { + # command = "${lib.getExe pkgs.yamlfmt}"; + #}; + }; }; }; } diff --git a/config/plugins/lsp/lsp.nix b/config/plugins/lsp/lsp.nix index fde4eb3..cf286a1 100644 --- a/config/plugins/lsp/lsp.nix +++ b/config/plugins/lsp/lsp.nix @@ -1,5 +1,6 @@ { plugins = { + lsp-lines = {enable = true;}; lsp-format = {enable = true;}; lsp = { enable = true;