From e4a2bff0f289b4c575fd1c3905db07aa062c9f04 Mon Sep 17 00:00:00 2001 From: JINNOUCHI Yasushi Date: Tue, 11 Mar 2025 22:14:21 +0900 Subject: [PATCH] Consider the original config for signs in Neovim (#4872) Preserve a user-configured sign priority in Neovim if set, and use the ALE setting if not configured otherwise. --- lua/ale/diagnostics.lua | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/lua/ale/diagnostics.lua b/lua/ale/diagnostics.lua index 21f81e2a..baec4e0a 100644 --- a/lua/ale/diagnostics.lua +++ b/lua/ale/diagnostics.lua @@ -61,11 +61,31 @@ module.sendAleResultsToDiagnostics = function(buffer, loclist) [1] = true, } - local signs = module.aleVar(buffer, 'set_signs') == 1 + local set_signs = module.aleVar(buffer, 'set_signs') + local sign_priority = module.aleVar(buffer, 'sign_priority') + local signs - if signs then + if set_signs == 1 and sign_priority then -- If signs are enabled, set the priority for them. - signs = {priority = vim.g.ale_sign_priority } + local local_cfg = { priority = sign_priority } + -- NOTE: vim.diagnostic.config() -- retrieving the current config values + -- fails in Neovim older than v0.7.0. + local ok, diag_cfg = pcall(vim.diagnostic.config) + if not ok or not diag_cfg then + diag_cfg = { signs = {} } + end + local global_cfg = diag_cfg.signs + + if type(global_cfg) == 'boolean' then + signs = local_cfg + elseif type(global_cfg) == 'table' then + signs = vim.tbl_extend('force', global_cfg, local_cfg) + else + signs = function(...) + local calculated = global_cfg(...) + return vim.tbl_extend('force', calculated, local_cfg) + end + end end vim.diagnostic.set( @@ -73,8 +93,8 @@ module.sendAleResultsToDiagnostics = function(buffer, loclist) buffer, diagnostics, { - virtual_text = virtualtext_enabled_set[vim.g.ale_virtualtext_cursor] ~= nil, - signs = signs, + virtual_text = virtualtext_enabled_set[vim.g.ale_virtualtext_cursor] ~= nil, + signs = signs, } ) end