From 99c497e34f45194d4d52982c89f720c93942be36 Mon Sep 17 00:00:00 2001 From: Lintao Date: Sun, 31 Mar 2024 21:51:38 +0800 Subject: [PATCH 1/2] feat: show diagnostic with fallbacks --- lua/lspsaga/command.lua | 3 +++ lua/lspsaga/diagnostic/show.lua | 20 +++++++++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/lua/lspsaga/command.lua b/lua/lspsaga/command.lua index aab58bed7..b3cff4891 100644 --- a/lua/lspsaga/command.lua +++ b/lua/lspsaga/command.lua @@ -25,6 +25,9 @@ local subcommands = { hover_doc = function(args) require('lspsaga.hover'):render_hover_doc(args) end, + show_diagnostics = function(args) + require('lspsaga.diagnostic.show'):show_diagnostics({ fallback = true, args = args }) + end, show_workspace_diagnostics = function(args) require('lspsaga.diagnostic.show'):show_diagnostics({ workspace = true, args = args }) end, diff --git a/lua/lspsaga/diagnostic/show.lua b/lua/lspsaga/diagnostic/show.lua index bcc1606cb..113566054 100644 --- a/lua/lspsaga/diagnostic/show.lua +++ b/lua/lspsaga/diagnostic/show.lua @@ -336,13 +336,31 @@ function sd:show(opt) end) end +local function get_diagnostic_entrys(opt) + if opt.fallback then + local scopes = { 'cursor', 'line', 'buffer' } + for _, scope in ipairs(scopes) do + local result = diag:get_diagnostic({ [scope] = true }) + if not (next(result) == nil) then + opt[scope] = true -- not sure if it's a good idea to modify the opt table here + return result + end + end + + return diag:get_diagnostic({}) + else + return diag:get_diagnostic(opt) + end +end + function sd:show_diagnostics(opt) local has_jump_win = require('lspsaga.diagnostic').winid if has_jump_win and api.nvim_win_is_valid(has_jump_win) then return end - local entrys = diag:get_diagnostic(opt) + local entrys = get_diagnostic_entrys(opt) + if next(entrys) == nil then return end From e730a9796f9c7e5075f4f7c9da37577f810619a5 Mon Sep 17 00:00:00 2001 From: Lintao Date: Mon, 1 Apr 2024 21:54:44 +0800 Subject: [PATCH 2/2] refactor: check diag by table length instead of next --- lua/lspsaga/diagnostic/show.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lspsaga/diagnostic/show.lua b/lua/lspsaga/diagnostic/show.lua index 113566054..59bf7b45b 100644 --- a/lua/lspsaga/diagnostic/show.lua +++ b/lua/lspsaga/diagnostic/show.lua @@ -341,7 +341,7 @@ local function get_diagnostic_entrys(opt) local scopes = { 'cursor', 'line', 'buffer' } for _, scope in ipairs(scopes) do local result = diag:get_diagnostic({ [scope] = true }) - if not (next(result) == nil) then + if #result > 0 then opt[scope] = true -- not sure if it's a good idea to modify the opt table here return result end