From 6b3949b0fa9afc5a4d6fc4795d65711e6a2c7960 Mon Sep 17 00:00:00 2001 From: xiaoshihou Date: Sat, 26 Oct 2024 20:24:46 +0100 Subject: [PATCH 1/5] fix: impure formatting --- lua/guard/format.lua | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/lua/guard/format.lua b/lua/guard/format.lua index 4d3dcf8..a38ad90 100644 --- a/lua/guard/format.lua +++ b/lua/guard/format.lua @@ -1,9 +1,7 @@ -local api = vim.api local spawn = require('guard.spawn') local util = require('guard.util') -local report_error = util.report_error local filetype = require('guard.filetype') -local iter, filter = vim.iter, vim.tbl_filter +local api, iter, filter = vim.api, vim.iter, vim.tbl_filter local function save_views(bufnr) local views = {} @@ -53,8 +51,9 @@ end local function do_fmt(buf) buf = buf or api.nvim_get_current_buf() local ft_conf = filetype[vim.bo[buf].filetype] + if not ft_conf or not ft_conf.formatter then - report_error('missing config for filetype ' .. vim.bo[buf].filetype) + util.report_error('missing config for filetype ' .. vim.bo[buf].filetype) return end @@ -81,7 +80,7 @@ local function do_fmt(buf) -- check if all cmds executable again, since user can call format manually local all_executable = not iter(fmt_configs):any(function(config) if config.cmd and vim.fn.executable(config.cmd) ~= 1 then - report_error(config.cmd .. ' not executable') + util.report_error(config.cmd .. ' not executable') return true end return false @@ -101,8 +100,8 @@ local function do_fmt(buf) -- error if one of the formatters is impure and the user requested range formatting if range and #impure:totable() > 0 then - report_error('Cannot apply range formatting for filetype ' .. vim.bo[buf].filetype) - report_error(impure + util.report_error('Cannot apply range formatting for filetype ' .. vim.bo[buf].filetype) + util.report_error(impure :map(function(config) return config.cmd end) @@ -214,7 +213,7 @@ local function do_fmt(buf) end -- refresh buffer - if impure and #impure > 0 then + if impure and #impure:totable() > 0 then vim.schedule(function() api.nvim_buf_call(buf, function() local views = save_views(buf) From e1ae4830339696716ee1f8c986c8b4fbc95d6d28 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 26 Oct 2024 19:25:06 +0000 Subject: [PATCH 2/5] chore(doc): auto generate docs --- doc/guard.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/guard.nvim.txt b/doc/guard.nvim.txt index f0ab3f2..cdd2a43 100644 --- a/doc/guard.nvim.txt +++ b/doc/guard.nvim.txt @@ -1,4 +1,4 @@ -*guard.nvim.txt* For NVIM v0.8.0 Last change: 2024 October 25 +*guard.nvim.txt* For NVIM v0.8.0 Last change: 2024 October 26 ============================================================================== Table of Contents *guard.nvim-table-of-contents* From f971c247b07c992cb6d1480e08ab36b2eebddb88 Mon Sep 17 00:00:00 2001 From: xiaoshihou Date: Sat, 26 Oct 2024 20:35:35 +0100 Subject: [PATCH 3/5] fix: default to lsp works on load --- lua/guard/events.lua | 41 ++++++++++++++++++++++++----------------- plugin/guard.lua | 14 ++++++++++++++ 2 files changed, 38 insertions(+), 17 deletions(-) diff --git a/lua/guard/events.lua b/lua/guard/events.lua index 0053a8d..072aa41 100644 --- a/lua/guard/events.lua +++ b/lua/guard/events.lua @@ -60,6 +60,28 @@ function M.watch_ft(ft) }) end +---@param config table +---@param ft string +---@param buf number +function M.maybe_default_to_lsp(config, ft, buf) + if config and config.formatter then + return + end + config:fmt('lsp') + if getopt('fmt_on_save') then + if + #api.nvim_get_autocmds({ + group = M.group, + event = 'FileType', + pattern = ft, + }) == 0 + then + M.watch_ft(ft) + end + M.try_attach_to_buf(buf) + end +end + function M.create_lspattach_autocmd() au('LspAttach', { group = M.group, @@ -68,27 +90,12 @@ function M.create_lspattach_autocmd() return end local client = vim.lsp.get_client_by_id(args.data.client_id) - ---@diagnostic disable-next-line: need-check-nil - if not client.supports_method('textDocument/formatting') then + if client and not client.supports_method('textDocument/formatting') then return end local ft_handler = require('guard.filetype') local ft = vim.bo[args.buf].filetype - if not (ft_handler[ft] and ft_handler[ft].formatter) then - ft_handler(ft):fmt('lsp') - end - if getopt('fmt_on_save') then - if - #api.nvim_get_autocmds({ - group = M.group, - event = 'FileType', - pattern = ft, - }) == 0 - then - M.watch_ft(ft) - end - M.try_attach_to_buf(args.buf) - end + M.maybe_default_to_lsp(ft_handler[ft], ft, args.buf) end, }) end diff --git a/plugin/guard.lua b/plugin/guard.lua index b504de7..e3f0b24 100644 --- a/plugin/guard.lua +++ b/plugin/guard.lua @@ -6,6 +6,7 @@ loaded = true local api = vim.api local events = require('guard.events') +local ft_handler = require('guard.filetype') local cmds = { fmt = function() @@ -114,3 +115,16 @@ end, { }) events.create_lspattach_autocmd() + +for _, buf in ipairs(api.nvim_list_bufs()) do + if api.nvim_buf_is_loaded(buf) then + if + vim.iter(vim.lsp.get_clients({ bufnr = buf })):any(function(c) + return c.supports_method('textDocument/formatting') + end) + then + local ft = vim.bo[buf].ft + events.maybe_default_to_lsp(ft_handler[ft], ft, buf) + end + end +end From 41587990763f9c2d14689557e7de59bdf6bece63 Mon Sep 17 00:00:00 2001 From: xiaoshihou Date: Sat, 26 Oct 2024 20:59:42 +0100 Subject: [PATCH 4/5] fix --- lua/guard/events.lua | 5 ++++- plugin/guard.lua | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/lua/guard/events.lua b/lua/guard/events.lua index 072aa41..db8bab9 100644 --- a/lua/guard/events.lua +++ b/lua/guard/events.lua @@ -90,7 +90,10 @@ function M.create_lspattach_autocmd() return end local client = vim.lsp.get_client_by_id(args.data.client_id) - if client and not client.supports_method('textDocument/formatting') then + if + not client + or not client.supports_method('textDocument/formatting', { bufnr = args.data.buf }) + then return end local ft_handler = require('guard.filetype') diff --git a/plugin/guard.lua b/plugin/guard.lua index e3f0b24..be51196 100644 --- a/plugin/guard.lua +++ b/plugin/guard.lua @@ -124,7 +124,7 @@ for _, buf in ipairs(api.nvim_list_bufs()) do end) then local ft = vim.bo[buf].ft - events.maybe_default_to_lsp(ft_handler[ft], ft, buf) + events.maybe_default_to_lsp(ft_handler(ft), ft, buf) end end end From aaba04c3b5933c54493fd5051d928634705efd97 Mon Sep 17 00:00:00 2001 From: xiaoshihou Date: Sat, 26 Oct 2024 21:00:40 +0100 Subject: [PATCH 5/5] chore: remove redundant nil check --- lua/guard/events.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lua/guard/events.lua b/lua/guard/events.lua index db8bab9..20ae9a9 100644 --- a/lua/guard/events.lua +++ b/lua/guard/events.lua @@ -64,7 +64,7 @@ end ---@param ft string ---@param buf number function M.maybe_default_to_lsp(config, ft, buf) - if config and config.formatter then + if config.formatter then return end config:fmt('lsp') @@ -98,7 +98,7 @@ function M.create_lspattach_autocmd() end local ft_handler = require('guard.filetype') local ft = vim.bo[args.buf].filetype - M.maybe_default_to_lsp(ft_handler[ft], ft, args.buf) + M.maybe_default_to_lsp(ft_handler(ft), ft, args.buf) end, }) end