From ef9faefa65b63832779a416321e1c2ece16523a6 Mon Sep 17 00:00:00 2001 From: Mat Jones Date: Thu, 10 Aug 2023 08:37:54 -0400 Subject: [PATCH] feat(nvim): Do not update LSP format statusline component for markdown previews --- nvim/lua/my/configure/heirline/statusline.lua | 6 ++++-- nvim/lua/my/lsp/utils/init.lua | 16 +++++++++++----- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/nvim/lua/my/configure/heirline/statusline.lua b/nvim/lua/my/configure/heirline/statusline.lua index dc3e2e0c..c08818b1 100644 --- a/nvim/lua/my/configure/heirline/statusline.lua +++ b/nvim/lua/my/configure/heirline/statusline.lua @@ -200,7 +200,8 @@ M.OnePassword = { M.LspFormatToggle = { provider = function() - if require('my.lsp.utils').is_formatting_supported() then + local buf = vim.b.mdpreview_session and vim.b.mdpreview_session.source_buf or 0 ---@diagnostic disable-line + if require('my.lsp.utils').is_formatting_supported(buf) then return '  ' else return '  ' @@ -219,7 +220,8 @@ M.LspFormatToggle = { }, { provider = function() - local name = require('my.lsp.utils').get_formatter_name() + local buf = vim.b.mdpreview_session and vim.b.mdpreview_session.source_buf or 0 ---@diagnostic disable-line + local name = require('my.lsp.utils').get_formatter_name(buf) if name then return string.format(' (%s) ', name) end diff --git a/nvim/lua/my/lsp/utils/init.lua b/nvim/lua/my/lsp/utils/init.lua index 59279d8b..a70bd21f 100644 --- a/nvim/lua/my/lsp/utils/init.lua +++ b/nvim/lua/my/lsp/utils/init.lua @@ -112,12 +112,15 @@ function M.toggle_formatting_enabled(enable) end end -function M.get_formatter_name() - local clients = vim.lsp.get_active_clients({ bufnr = vim.api.nvim_get_current_buf() }) +---@param buf number|nil defaults to 0 (current buffer) +---@return string|nil +function M.get_formatter_name(buf) + buf = buf or tonumber(vim.g.actual_curbuf or vim.api.nvim_get_current_buf()) + local clients = vim.lsp.get_active_clients({ bufnr = buf }) for _, client in ipairs(clients) do if client.supports_method('textDocument/formatting') then if client.name == 'efm' then - local ft_config = require('my.lsp.filetypes').config[vim.bo[tonumber(vim.g.actual_curbuf or 0)].filetype] + local ft_config = require('my.lsp.filetypes').config[vim.bo[buf].filetype] if ft_config then if type(ft_config.formatter) == 'table' then return ft_config.formatter[1] @@ -133,12 +136,15 @@ function M.get_formatter_name() return nil end -function M.is_formatting_supported() +---@param buf number|nil defaults to 0 (current buffer) +---@return boolean +function M.is_formatting_supported(buf) + buf = buf or vim.api.nvim_get_current_buf() if not formatting_enabled then return false end - local clients = vim.lsp.get_active_clients({ bufnr = vim.api.nvim_get_current_buf() }) + local clients = vim.lsp.get_active_clients({ bufnr = buf }) for _, client in ipairs(clients) do if client.supports_method('textDocument/formatting') then return true