aboutsummaryrefslogtreecommitdiff
path: root/runtime/lua/vim/diagnostic.lua
diff options
context:
space:
mode:
authorJustin M. Keyes <justinkz@gmail.com>2024-04-16 04:37:54 -0700
committerGitHub <noreply@github.com>2024-04-16 04:37:54 -0700
commit3065e2fa5da05de5b0d5bb3f3f3c64a053d20dc7 (patch)
treebada31f7f0c4bbf8a19b7b1acddc020b1befc5ea /runtime/lua/vim/diagnostic.lua
parent7fa24948a936a95519f0c8c496402488b6508c14 (diff)
parent5ed9916a28b9a09d2e5629f3e4e5b0e81403ded7 (diff)
downloadrneovim-3065e2fa5da05de5b0d5bb3f3f3c64a053d20dc7.tar.gz
rneovim-3065e2fa5da05de5b0d5bb3f3f3c64a053d20dc7.tar.bz2
rneovim-3065e2fa5da05de5b0d5bb3f3f3c64a053d20dc7.zip
Merge #28227 feat(diagnostic): is_enabled, enable(…, enable:boolean)
Diffstat (limited to 'runtime/lua/vim/diagnostic.lua')
-rw-r--r--runtime/lua/vim/diagnostic.lua169
1 files changed, 106 insertions, 63 deletions
diff --git a/runtime/lua/vim/diagnostic.lua b/runtime/lua/vim/diagnostic.lua
index 57491d155d..4fcbfa7507 100644
--- a/runtime/lua/vim/diagnostic.lua
+++ b/runtime/lua/vim/diagnostic.lua
@@ -239,6 +239,9 @@ local M = {}
--- whole line the sign is placed in.
--- @field linehl? table<vim.diagnostic.Severity,string>
+--- @class vim.diagnostic.Filter : vim.diagnostic.Opts
+--- @field ns_id? integer Namespace
+
--- @nodoc
--- @enum vim.diagnostic.Severity
M.severity = {
@@ -1492,7 +1495,7 @@ end
--- diagnostics, use |vim.diagnostic.reset()|.
---
--- To hide diagnostics and prevent them from re-displaying, use
---- |vim.diagnostic.disable()|.
+--- |vim.diagnostic.enable()|.
---
---@param namespace integer? Diagnostic namespace. When omitted, hide
--- diagnostics from all namespaces.
@@ -1517,25 +1520,29 @@ function M.hide(namespace, bufnr)
end
end
---- Check whether diagnostics are disabled in a given buffer.
+--- Check whether diagnostics are enabled.
---
----@param bufnr integer? Buffer number, or 0 for current buffer.
----@param namespace integer? Diagnostic namespace. When omitted, checks if
---- all diagnostics are disabled in {bufnr}.
---- Otherwise, only checks if diagnostics from
---- {namespace} are disabled.
----@return boolean
-function M.is_disabled(bufnr, namespace)
+--- @param bufnr integer? Buffer number, or 0 for current buffer.
+--- @param namespace integer? Diagnostic namespace, or `nil` for all diagnostics in {bufnr}.
+--- @return boolean
+--- @since 12
+function M.is_enabled(bufnr, namespace)
bufnr = get_bufnr(bufnr)
if namespace and M.get_namespace(namespace).disabled then
- return true
+ return false
end
if type(diagnostic_disabled[bufnr]) == 'table' then
- return diagnostic_disabled[bufnr][namespace]
+ return not diagnostic_disabled[bufnr][namespace]
end
- return diagnostic_disabled[bufnr] ~= nil
+ return diagnostic_disabled[bufnr] == nil
+end
+
+--- @deprecated use `vim.diagnostic.is_enabled()`
+function M.is_disabled(bufnr, namespace)
+ vim.deprecate('vim.diagnostic.is_disabled()', 'vim.diagnostic.is_enabled()', '0.12', nil, false)
+ return not M.is_enabled(bufnr, namespace)
end
--- Display diagnostics for the given namespace and buffer.
@@ -1581,7 +1588,7 @@ function M.show(namespace, bufnr, diagnostics, opts)
return
end
- if M.is_disabled(bufnr, namespace) then
+ if not M.is_enabled(bufnr, namespace) then
return
end
@@ -1923,71 +1930,107 @@ function M.setloclist(opts)
set_list(true, opts)
end
---- Disable diagnostics in the given buffer.
----
----@param bufnr integer? Buffer number, or 0 for current buffer. When
---- omitted, disable diagnostics in all buffers.
----@param namespace integer? Only disable diagnostics for the given namespace.
+--- @deprecated use `vim.diagnostic.enabled(…, false)`
function M.disable(bufnr, namespace)
- vim.validate({ bufnr = { bufnr, 'n', true }, namespace = { namespace, 'n', true } })
- if bufnr == nil then
- if namespace == nil then
- -- Disable everything (including as yet non-existing buffers and
- -- namespaces) by setting diagnostic_disabled to an empty table and set
- -- its metatable to always return true. This metatable is removed
- -- in enable()
- diagnostic_disabled = setmetatable({}, {
- __index = function()
- return true
- end,
- })
- else
- local ns = M.get_namespace(namespace)
- ns.disabled = true
- end
- else
- bufnr = get_bufnr(bufnr)
- if namespace == nil then
- diagnostic_disabled[bufnr] = true
- else
- if type(diagnostic_disabled[bufnr]) ~= 'table' then
- diagnostic_disabled[bufnr] = {}
- end
- diagnostic_disabled[bufnr][namespace] = true
- end
- end
-
- M.hide(namespace, bufnr)
+ vim.deprecate(
+ 'vim.diagnostic.disable()',
+ 'vim.diagnostic.enabled(…, false)',
+ '0.12',
+ nil,
+ false
+ )
+ M.enable(bufnr, false, { ns_id = namespace })
end
---- Enable diagnostics in the given buffer.
+--- Enables or disables diagnostics.
---
----@param bufnr integer? Buffer number, or 0 for current buffer. When
---- omitted, enable diagnostics in all buffers.
----@param namespace integer? Only enable diagnostics for the given namespace.
-function M.enable(bufnr, namespace)
- vim.validate({ bufnr = { bufnr, 'n', true }, namespace = { namespace, 'n', true } })
+--- To "toggle", pass the inverse of `is_enabled()`:
+---
+--- ```lua
+--- vim.diagnostic.enable(0, not vim.diagnostic.is_enabled())
+--- ```
+---
+--- @param bufnr integer? Buffer number, or 0 for current buffer, or `nil` for all buffers.
+--- @param enable (boolean|nil) true/nil to enable, false to disable
+--- @param opts vim.diagnostic.Filter? Filter by these opts, or `nil` for all. Only `ns_id` is
+--- supported, currently.
+function M.enable(bufnr, enable, opts)
+ opts = opts or {}
+ if type(enable) == 'number' then
+ -- Legacy signature.
+ vim.deprecate(
+ 'vim.diagnostic.enable(buf:number, namespace)',
+ 'vim.diagnostic.enable(buf:number, enable:boolean, opts)',
+ '0.12',
+ nil,
+ false
+ )
+ opts.ns_id = enable
+ enable = true
+ end
+ vim.validate({
+ bufnr = { bufnr, 'n', true },
+ enable = {
+ enable,
+ function(o)
+ return o == nil or type(o) == 'boolean' or type(o) == 'number'
+ end,
+ 'boolean or number (deprecated)',
+ },
+ opts = {
+ opts,
+ function(o)
+ return o == nil
+ or (
+ type(o) == 'table'
+ -- TODO(justinmk): support other `vim.diagnostic.Filter` fields.
+ and (vim.tbl_isempty(o) or vim.deep_equal(vim.tbl_keys(o), { 'ns_id' }))
+ )
+ end,
+ 'vim.diagnostic.Filter table (only ns_id is supported currently)',
+ },
+ })
+ enable = enable == nil and true or enable
+
if bufnr == nil then
- if namespace == nil then
- -- Enable everything by setting diagnostic_disabled to an empty table
- diagnostic_disabled = {}
+ if opts.ns_id == nil then
+ diagnostic_disabled = (
+ enable
+ -- Enable everything by setting diagnostic_disabled to an empty table.
+ and {}
+ -- Disable everything (including as yet non-existing buffers and namespaces) by setting
+ -- diagnostic_disabled to an empty table and set its metatable to always return true.
+ or setmetatable({}, {
+ __index = function()
+ return true
+ end,
+ })
+ )
else
- local ns = M.get_namespace(namespace)
- ns.disabled = false
+ local ns = M.get_namespace(opts.ns_id)
+ ns.disabled = not enable
end
else
bufnr = get_bufnr(bufnr)
- if namespace == nil then
- diagnostic_disabled[bufnr] = nil
+ if opts.ns_id == nil then
+ diagnostic_disabled[bufnr] = (not enable) and true or nil
else
if type(diagnostic_disabled[bufnr]) ~= 'table' then
- return
+ if enable then
+ return
+ else
+ diagnostic_disabled[bufnr] = {}
+ end
end
- diagnostic_disabled[bufnr][namespace] = nil
+ diagnostic_disabled[bufnr][opts.ns_id] = (not enable) and true or nil
end
end
- M.show(namespace, bufnr)
+ if enable then
+ M.show(opts.ns_id, bufnr)
+ else
+ M.hide(opts.ns_id, bufnr)
+ end
end
--- Parse a diagnostic from a string.