From 8c226d917918ffe92e0f30f4e13acfc088a5faa7 Mon Sep 17 00:00:00 2001 From: Steven Arcangeli Date: Sun, 14 Jul 2024 10:45:06 -0700 Subject: feat: notify when no formatters available for a buffer --- lua/conform/init.lua | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) (limited to 'lua/conform/init.lua') diff --git a/lua/conform/init.lua b/lua/conform/init.lua index da55067..1a648f0 100644 --- a/lua/conform/init.lua +++ b/lua/conform/init.lua @@ -9,6 +9,7 @@ M.formatters_by_ft = {} M.formatters = {} M.notify_on_error = true +M.notify_no_formatters = true ---@type conform.DefaultFormatOpts M.default_format_opts = {} @@ -38,6 +39,10 @@ M.setup = function(opts) if notify_on_error ~= nil then M.notify_on_error = notify_on_error end + local notify_no_formatters = opts.notify_no_formatters + if notify_no_formatters ~= nil then + M.notify_no_formatters = notify_no_formatters + end local aug = vim.api.nvim_create_augroup("Conform", { clear = true }) if opts.format_on_save then @@ -370,6 +375,8 @@ local function has_lsp_formatter(opts) return not vim.tbl_isempty(lsp_format.get_format_clients(opts)) end +local has_notified_ft_no_formatters = {} + ---Format a buffer ---@param opts? conform.FormatOpts ---@param callback? fun(err: nil|string, did_edit: nil|boolean) Called once formatting has completed @@ -504,8 +511,20 @@ M.format = function(opts, callback) return true else local level = has_explicit_formatters and "warn" or "debug" - log[level]("No formatters found for %s", vim.api.nvim_buf_get_name(opts.bufnr)) - callback("No formatters found for buffer") + log[level]("Formatters unavailable for %s", vim.api.nvim_buf_get_name(opts.bufnr)) + + local ft = vim.bo[opts.bufnr].filetype + if + not vim.tbl_isempty(formatter_names) + and not has_notified_ft_no_formatters[ft] + and not opts.quiet + and M.notify_no_formatters + then + notify(string.format("Formatters unavailable for %s file", ft), vim.log.levels.WARN) + has_notified_ft_no_formatters[ft] = true + end + + callback("No formatters available for buffer") return false end end -- cgit v1.2.3-70-g09d2