diff options
author | Gregory Anders <8965202+gpanders@users.noreply.github.com> | 2021-09-26 16:02:18 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-26 16:02:18 -0700 |
commit | 187e3a3b7e210e354a3377fc41ac1fc36876d762 (patch) | |
tree | 55d4f089c96295106476ad05e58a966603b42a46 | |
parent | cb51a1b615376b3bbd6096c1d70f65028e7f6fde (diff) | |
download | rneovim-187e3a3b7e210e354a3377fc41ac1fc36876d762.tar.gz rneovim-187e3a3b7e210e354a3377fc41ac1fc36876d762.tar.bz2 rneovim-187e3a3b7e210e354a3377fc41ac1fc36876d762.zip |
refactor(diagnostic): use sign priority for severity_sort #15785
Rather than relying on the order in which signs are placed to dictate
the order in which they are displayed, explicitly set the priority of
the sign according to the severity of the diagnostic and the value of
severity_sort. If severity_sort is false or unset then all signs use the
same priority.
-rw-r--r-- | runtime/doc/diagnostic.txt | 5 | ||||
-rw-r--r-- | runtime/lua/vim/diagnostic.lua | 27 |
2 files changed, 28 insertions, 4 deletions
diff --git a/runtime/doc/diagnostic.txt b/runtime/doc/diagnostic.txt index 68e4353d5b..679bb2f7ff 100644 --- a/runtime/doc/diagnostic.txt +++ b/runtime/doc/diagnostic.txt @@ -187,6 +187,11 @@ can be customized using the following: > sign define DiagnosticSignInfo text=I texthl=DiagnosticSignInfo linehl= numhl= sign define DiagnosticSignHint text=H texthl=DiagnosticSignHint linehl= numhl= +When the "severity_sort" option is set (see |vim.diagnostic.config()|) the +priority of each sign depends on the severity of the associated diagnostic. +Otherwise, all signs have the same priority (the value of the "priority" +option in the "signs" table of |vim.diagnostic.config()| or 10 if unset). + ============================================================================== EVENTS *diagnostic-events* diff --git a/runtime/lua/vim/diagnostic.lua b/runtime/lua/vim/diagnostic.lua index 3f41ee5df8..00945a7fb3 100644 --- a/runtime/lua/vim/diagnostic.lua +++ b/runtime/lua/vim/diagnostic.lua @@ -806,16 +806,35 @@ function M._set_signs(namespace, bufnr, diagnostics, opts) } bufnr = get_bufnr(bufnr) - opts = get_resolved_options({ signs = opts }, namespace, bufnr).signs + opts = get_resolved_options({ signs = opts }, namespace, bufnr) - if opts and opts.severity then - diagnostics = filter_by_severity(opts.severity, diagnostics) + if opts.signs and opts.signs.severity then + diagnostics = filter_by_severity(opts.signs.severity, diagnostics) end local ns = get_namespace(namespace) define_default_signs() + -- 10 is the default sign priority when none is explicitly specified + local priority = opts.signs and opts.signs.priority or 10 + local get_priority + if opts.severity_sort then + if type(opts.severity_sort) == "table" and opts.severity_sort.reverse then + get_priority = function(severity) + return priority + (severity - vim.diagnostic.severity.ERROR) + end + else + get_priority = function(severity) + return priority + (vim.diagnostic.severity.HINT - severity) + end + end + else + get_priority = function() + return priority + end + end + for _, diagnostic in ipairs(diagnostics) do vim.fn.sign_place( 0, @@ -823,7 +842,7 @@ function M._set_signs(namespace, bufnr, diagnostics, opts) sign_highlight_map[diagnostic.severity], bufnr, { - priority = opts and opts.priority, + priority = get_priority(diagnostic.severity), lnum = diagnostic.lnum + 1 } ) |