From 7827e7db110791cf63341a81809ee035989febe9 Mon Sep 17 00:00:00 2001 From: wires Date: Sat, 8 Mar 2025 06:59:21 -0500 Subject: [PATCH] re-add per-lsp format on save config --- lua/lsp/servers.lua | 20 +++++++++++++------- lua/lsp/servers/defaults.lua | 14 ++++++++++---- lua/plugins/auto-session/init.lua | 6 +++--- lua/plugins/null-ls.lua | 3 +-- lua/plugins/nvim-lspconfig.lua | 2 +- lua/utils/lsp.lua | 19 +++++++++++++++++++ 6 files changed, 47 insertions(+), 17 deletions(-) diff --git a/lua/lsp/servers.lua b/lua/lsp/servers.lua index 1b30b4a..6819ce0 100644 --- a/lua/lsp/servers.lua +++ b/lua/lsp/servers.lua @@ -1,9 +1,15 @@ return { - 'rust_analyzer', - 'erlangls', - 'lua_ls', - 'cssls', - 'eslint', - 'ts_ls', - 'svelte', + rust_analyzer = true, + erlangls = true, + lua_ls = { + format_on_save = false, + }, + cssls = { + format_on_save = false, + }, + eslint = true, + ts_ls = { + format_on_save = false, + }, + svelte = true, } diff --git a/lua/lsp/servers/defaults.lua b/lua/lsp/servers/defaults.lua index fbcf2f0..85df485 100644 --- a/lua/lsp/servers/defaults.lua +++ b/lua/lsp/servers/defaults.lua @@ -2,6 +2,7 @@ local M = {} local augroup_name = 'CosmicNvimLspFormat' local config = require('config') local u = require('utils') +local lsp_utils = require('utils.lsp') local lsp_mappings = require('lsp.mappings') M.augroup = vim.api.nvim_create_augroup(augroup_name, { clear = true }) @@ -31,10 +32,15 @@ function M.on_attach(client, bufnr) }) vim.api.nvim_create_autocmd('BufWritePre', { callback = function() - vim.lsp.buf.format({ - timeout_ms = config.lsp.format_timeout, - bufnr = bufnr, - }) + if lsp_utils.format_on_save_enabled then + vim.lsp.buf.format({ + timeout_ms = config.lsp.format_timeout, + bufnr = bufnr, + filter = function(cl) + return lsp_utils.can_client_format_on_save(cl) + end, + }) + end end, buffer = bufnr, group = M.augroup, diff --git a/lua/plugins/auto-session/init.lua b/lua/plugins/auto-session/init.lua index 2e4745d..1b9edbc 100644 --- a/lua/plugins/auto-session/init.lua +++ b/lua/plugins/auto-session/init.lua @@ -1,8 +1,8 @@ local config = { + auto_restore = true, + auto_session = true, + enabled = true, pre_save_cmds = { 'cclose', 'lua vim.notify.dismiss()' }, - auto_session_enabled = true, - auto_restore_enabled = true, - auto_save_enabled = true, } return { diff --git a/lua/plugins/null-ls.lua b/lua/plugins/null-ls.lua index 748f82e..f8e607d 100644 --- a/lua/plugins/null-ls.lua +++ b/lua/plugins/null-ls.lua @@ -13,7 +13,6 @@ return { local config_opts = { sources = { null_ls.builtins.code_actions.gitsigns, - null_ls.builtins.diagnostics.markdownlint, null_ls.builtins.formatting.prettierd.with({ env = { PRETTIERD_LOCAL_PRETTIER_ONLY = 1, @@ -21,7 +20,7 @@ return { extra_filetypes = { 'astro' }, }), null_ls.builtins.formatting.stylua, - } + }, } null_ls.setup(u.merge(defaults, config_opts)) diff --git a/lua/plugins/nvim-lspconfig.lua b/lua/plugins/nvim-lspconfig.lua index 8dfd94b..32b5e24 100644 --- a/lua/plugins/nvim-lspconfig.lua +++ b/lua/plugins/nvim-lspconfig.lua @@ -18,7 +18,7 @@ return { lspconfig[server].setup(server_config) end - for _, server in pairs(require('lsp.servers')) do + for server, _ in pairs(require('lsp.servers')) do start_server(server) end end, diff --git a/lua/utils/lsp.lua b/lua/utils/lsp.lua index c21a451..9665b62 100644 --- a/lua/utils/lsp.lua +++ b/lua/utils/lsp.lua @@ -1,4 +1,5 @@ local config = require('config') +local servers = require('lsp.servers') local M = {} M.format_on_save_enabled = true @@ -8,6 +9,24 @@ function M.toggle_format_on_save() vim.notify(string.format('Format on save: %s', M.format_on_save_enabled)) end +function M.can_client_format_on_save(client) + local server_config = servers[client.name] + + if server_config == true then + return true + end + + if server_config then + if server_config.format_on_save == nil then + return true + end + + return server_config.format_on_save == true + end + + return true +end + function M.buf_format(bufnr, timeout) if timeout == '' or timeout == nil then timeout = config.lsp.format_timeout