From e4411276a5fd5683a4e78bbd3280c4479fed346d Mon Sep 17 00:00:00 2001 From: w0rp Date: Fri, 8 Sep 2023 23:44:48 +0100 Subject: #4442 Configure signs in Neovim diagnostics Respect ALE's options to enable/disable signs in Neovim diagnostics, and use ALE's priority setting. --- doc/ale.txt | 4 ++++ lua/diagnostics.lua | 33 +++++++++++++++++++++++++++++++-- 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/doc/ale.txt b/doc/ale.txt index 4f4cb9c7..be8f1e7d 100644 --- a/doc/ale.txt +++ b/doc/ale.txt @@ -2106,6 +2106,10 @@ g:ale_set_signs *g:ale_set_signs* When this option is set to `1`, the |sign| column will be populated with signs marking where problems appear in the file. + When |g:ale_use_neovim_diagnostics_api| is `1`, the only other setting that + will be respected for signs is |g:ale_sign_priority|. No other settings, + highlights, text, or behaviors will apply. + ALE will use the following highlight groups for problems: |ALEErrorSign| - Items with `'type': 'E'` diff --git a/lua/diagnostics.lua b/lua/diagnostics.lua index aa2ec92d..55b50d6a 100644 --- a/lua/diagnostics.lua +++ b/lua/diagnostics.lua @@ -6,6 +6,18 @@ local ale_type_to_diagnostic_severity = { I = vim.diagnostic.severity.INFO } +-- Equivalent to ale#Var, only we can't error on missing global keys. +module.aleVar = function(buffer, key) + key = "ale_" .. key + local exists, value = pcall(vim.api.nvim_buf_get_var, buffer, key) + + if exists then + return value + end + + return vim.g[key] +end + module.sendAleResultsToDiagnostics = function(buffer, loclist) local diagnostics = {} @@ -38,13 +50,30 @@ module.sendAleResultsToDiagnostics = function(buffer, loclist) end end - local virtualtext_enabled_set = {['all'] = true, ['2'] = true, [2] = true, ['current'] = true, ['1'] = true, [1] = true} + local virtualtext_enabled_set = { + ['all'] = true, + ['2'] = true, + [2] = true, + ['current'] = true, + ['1'] = true, + [1] = true, + } + + local signs = module.aleVar(buffer, 'set_signs') == 1 + + if signs then + -- If signs are enabled, set the priority for them. + signs = {priority = vim.g.ale_sign_priority } + end vim.diagnostic.set( vim.api.nvim_create_namespace('ale'), buffer, diagnostics, - { virtual_text = virtualtext_enabled_set[vim.g.ale_virtualtext_cursor] ~= nil} + { + virtual_text = virtualtext_enabled_set[vim.g.ale_virtualtext_cursor] ~= nil, + signs = signs, + } ) end -- cgit v1.2.3