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 /runtime/lua/vim/diagnostic.lua | |
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.
Diffstat (limited to 'runtime/lua/vim/diagnostic.lua')
-rw-r--r-- | runtime/lua/vim/diagnostic.lua | 27 |
1 files changed, 23 insertions, 4 deletions
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 } ) |