diff options
Diffstat (limited to 'runtime')
-rw-r--r-- | runtime/doc/diagnostic.txt | 22 | ||||
-rw-r--r-- | runtime/filetype.vim | 5 | ||||
-rw-r--r-- | runtime/lua/vim/diagnostic.lua | 108 | ||||
-rw-r--r-- | runtime/lua/vim/lsp/sync.lua | 8 | ||||
-rw-r--r-- | runtime/scripts.vim | 8 |
5 files changed, 107 insertions, 44 deletions
diff --git a/runtime/doc/diagnostic.txt b/runtime/doc/diagnostic.txt index 6ada27edd0..1dd9c4f301 100644 --- a/runtime/doc/diagnostic.txt +++ b/runtime/doc/diagnostic.txt @@ -424,8 +424,9 @@ disable({bufnr}, {namespace}) *vim.diagnostic.disable()* Disable diagnostics in the given buffer. Parameters: ~ - {bufnr} number|nil Buffer number. Defaults to the - current buffer. + {bufnr} number|nil Buffer number, or 0 for current + buffer. When omitted, disable diagnostics in + all buffers. {namespace} number|nil Only disable diagnostics for the given namespace. @@ -433,8 +434,9 @@ enable({bufnr}, {namespace}) *vim.diagnostic.enable()* Enable diagnostics in the given buffer. Parameters: ~ - {bufnr} number|nil Buffer number. Defaults to the - current buffer. + {bufnr} number|nil Buffer number, or 0 for current + buffer. When omitted, enable diagnostics in + all buffers. {namespace} number|nil Only enable diagnostics for the given namespace. @@ -560,8 +562,9 @@ hide({namespace}, {bufnr}) *vim.diagnostic.hide()* {namespace} number|nil Diagnostic namespace. When omitted, hide diagnostics from all namespaces. - {bufnr} number|nil Buffer number. Defaults to the - current buffer. + {bufnr} number|nil Buffer number, or 0 for current + buffer. When omitted, hide diagnostics in all + buffers. *vim.diagnostic.match()* match({str}, {pat}, {groups}, {severity_map}, {defaults}) @@ -711,15 +714,16 @@ show({namespace}, {bufnr}, {diagnostics}, {opts}) {namespace} number|nil Diagnostic namespace. When omitted, show diagnostics from all namespaces. - {bufnr} number|nil Buffer number. Defaults to the - current buffer. + {bufnr} number|nil Buffer number, or 0 for current + buffer. When omitted, show diagnostics in + all buffers. {diagnostics} table|nil The diagnostics to display. When omitted, use the saved diagnostics for the given namespace and buffer. This can be used to display a list of diagnostics without saving them or to display only a subset of diagnostics. May not be used when - {namespace} is nil. + {namespace} or {bufnr} is nil. {opts} table|nil Display options. See |vim.diagnostic.config()|. diff --git a/runtime/filetype.vim b/runtime/filetype.vim index 75354968e9..02faafc85f 100644 --- a/runtime/filetype.vim +++ b/runtime/filetype.vim @@ -643,7 +643,7 @@ au BufNewFile,BufRead *.fsl setf framescript au BufNewFile,BufRead fstab,mtab setf fstab " GDB command files -au BufNewFile,BufRead .gdbinit setf gdb +au BufNewFile,BufRead .gdbinit,gdbinit setf gdb " GDMO au BufNewFile,BufRead *.mo,*.gdmo setf gdmo @@ -1486,6 +1486,9 @@ au BufNewFile,BufRead robots.txt setf robots " Rpcgen au BufNewFile,BufRead *.x setf rpcgen +" MikroTik RouterOS script +au BufRead,BufNewFile *.rsc setf routeros + " reStructuredText Documentation Format au BufNewFile,BufRead *.rst setf rst diff --git a/runtime/lua/vim/diagnostic.lua b/runtime/lua/vim/diagnostic.lua index 80efa20f27..191b9b9145 100644 --- a/runtime/lua/vim/diagnostic.lua +++ b/runtime/lua/vim/diagnostic.lua @@ -245,6 +245,11 @@ local bufs_waiting_to_update = setmetatable({}, bufnr_and_namespace_cacher_mt) ---@private local function is_disabled(namespace, bufnr) + local ns = M.get_namespace(namespace) + if ns.disabled then + return true + end + if type(diagnostic_disabled[bufnr]) == "table" then return diagnostic_disabled[bufnr][namespace] end @@ -1046,19 +1051,22 @@ end --- ---@param namespace number|nil Diagnostic namespace. When omitted, hide --- diagnostics from all namespaces. ----@param bufnr number|nil Buffer number. Defaults to the current buffer. +---@param bufnr number|nil Buffer number, or 0 for current buffer. When +--- omitted, hide diagnostics in all buffers. function M.hide(namespace, bufnr) vim.validate { namespace = { namespace, 'n', true }, bufnr = { bufnr, 'n', true }, } - bufnr = get_bufnr(bufnr) - local namespaces = namespace and {namespace} or vim.tbl_keys(diagnostic_cache[bufnr]) - for _, iter_namespace in ipairs(namespaces) do - for _, handler in pairs(M.handlers) do - if handler.hide then - handler.hide(iter_namespace, bufnr) + local buffers = bufnr and {get_bufnr(bufnr)} or vim.tbl_keys(diagnostic_cache) + for _, iter_bufnr in ipairs(buffers) do + local namespaces = namespace and {namespace} or vim.tbl_keys(diagnostic_cache[iter_bufnr]) + for _, iter_namespace in ipairs(namespaces) do + for _, handler in pairs(M.handlers) do + if handler.hide then + handler.hide(iter_namespace, iter_bufnr) + end end end end @@ -1068,12 +1076,14 @@ end --- ---@param namespace number|nil Diagnostic namespace. When omitted, show --- diagnostics from all namespaces. ----@param bufnr number|nil Buffer number. Defaults to the current buffer. +---@param bufnr number|nil Buffer number, or 0 for current buffer. When omitted, show +--- diagnostics in all buffers. ---@param diagnostics table|nil The diagnostics to display. When omitted, use the --- saved diagnostics for the given namespace and --- buffer. This can be used to display a list of diagnostics --- without saving them or to display only a subset of ---- diagnostics. May not be used when {namespace} is nil. +--- diagnostics. May not be used when {namespace} +--- or {bufnr} is nil. ---@param opts table|nil Display options. See |vim.diagnostic.config()|. function M.show(namespace, bufnr, diagnostics, opts) vim.validate { @@ -1083,11 +1093,18 @@ function M.show(namespace, bufnr, diagnostics, opts) opts = { opts, 't', true }, } - bufnr = get_bufnr(bufnr) - if not namespace then - assert(not diagnostics, "Cannot show diagnostics without a namespace") - for iter_namespace in pairs(diagnostic_cache[bufnr]) do - M.show(iter_namespace, bufnr, nil, opts) + if not bufnr or not namespace then + assert(not diagnostics, "Cannot show diagnostics without a buffer and namespace") + if not bufnr then + for iter_bufnr in pairs(diagnostic_cache) do + M.show(namespace, iter_bufnr, nil, opts) + end + else + -- namespace is nil + bufnr = get_bufnr(bufnr) + for iter_namespace in pairs(diagnostic_cache[bufnr]) do + M.show(iter_namespace, bufnr, nil, opts) + end end return end @@ -1354,44 +1371,67 @@ end --- Disable diagnostics in the given buffer. --- ----@param bufnr number|nil Buffer number. Defaults to the current buffer. +---@param bufnr number|nil Buffer number, or 0 for current buffer. When +--- omitted, disable diagnostics in all buffers. ---@param namespace number|nil Only disable diagnostics for the given namespace. function M.disable(bufnr, namespace) vim.validate { bufnr = {bufnr, 'n', true}, namespace = {namespace, 'n', true} } - bufnr = get_bufnr(bufnr) - if namespace == nil then - diagnostic_disabled[bufnr] = true - for ns in pairs(diagnostic_cache[bufnr]) do - M.hide(ns, bufnr) + 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 - if type(diagnostic_disabled[bufnr]) ~= "table" then - diagnostic_disabled[bufnr] = {} + 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 - diagnostic_disabled[bufnr][namespace] = true - M.hide(namespace, bufnr) end + + M.hide(namespace, bufnr) end --- Enable diagnostics in the given buffer. --- ----@param bufnr number|nil Buffer number. Defaults to the current buffer. +---@param bufnr number|nil Buffer number, or 0 for current buffer. When +--- omitted, enable diagnostics in all buffers. ---@param namespace number|nil Only enable diagnostics for the given namespace. function M.enable(bufnr, namespace) vim.validate { bufnr = {bufnr, 'n', true}, namespace = {namespace, 'n', true} } - bufnr = get_bufnr(bufnr) - if namespace == nil then - diagnostic_disabled[bufnr] = nil - for ns in pairs(diagnostic_cache[bufnr]) do - M.show(ns, bufnr) + if bufnr == nil then + if namespace == nil then + -- Enable everything by setting diagnostic_disabled to an empty table + diagnostic_disabled = {} + else + local ns = M.get_namespace(namespace) + ns.disabled = false end else - if type(diagnostic_disabled[bufnr]) ~= "table" then - return + bufnr = get_bufnr(bufnr) + if namespace == nil then + diagnostic_disabled[bufnr] = nil + else + if type(diagnostic_disabled[bufnr]) ~= "table" then + return + end + diagnostic_disabled[bufnr][namespace] = nil end - diagnostic_disabled[bufnr][namespace] = nil - M.show(namespace, bufnr) end + + M.show(namespace, bufnr) end --- Parse a diagnostic from a string. diff --git a/runtime/lua/vim/lsp/sync.lua b/runtime/lua/vim/lsp/sync.lua index 37247c61b9..585c14a00f 100644 --- a/runtime/lua/vim/lsp/sync.lua +++ b/runtime/lua/vim/lsp/sync.lua @@ -219,6 +219,10 @@ local function compute_end_range(prev_lines, curr_lines, start_range, firstline, -- Iterate from end to beginning of shortest line local prev_end_byte_idx = prev_line_length - byte_offset + 1 + -- Handle case where lines match + if prev_end_byte_idx == 0 then + prev_end_byte_idx = 1 + end local prev_byte_idx, prev_char_idx = align_position(prev_line, prev_end_byte_idx, 'start', offset_encoding) local prev_end_range = { line_idx = prev_line_idx, byte_idx = prev_byte_idx, char_idx = prev_char_idx } @@ -228,6 +232,10 @@ local function compute_end_range(prev_lines, curr_lines, start_range, firstline, curr_end_range = { line_idx = start_line_idx, byte_idx = 1, char_idx = 1 } else local curr_end_byte_idx = curr_line_length - byte_offset + 1 + -- Handle case where lines match + if curr_end_byte_idx == 0 then + curr_end_byte_idx = 1 + end local curr_byte_idx, curr_char_idx = align_position(curr_line, curr_end_byte_idx, 'start', offset_encoding) curr_end_range = { line_idx = curr_line_idx, byte_idx = curr_byte_idx, char_idx = curr_char_idx } end diff --git a/runtime/scripts.vim b/runtime/scripts.vim index 0b3fdc3514..79fd0a77e9 100644 --- a/runtime/scripts.vim +++ b/runtime/scripts.vim @@ -190,6 +190,10 @@ if s:line1 =~# "^#!" elseif s:name =~# 'fennel\>' set ft=fennel + " MikroTik RouterOS script + elseif s:name =~# 'rsc\>' + set ft=routeros + endif unlet s:name @@ -390,6 +394,10 @@ else elseif s:line1 =~# '^%YAML' set ft=yaml + " MikroTik RouterOS script + elseif s:line1 =~# '^#.*by RouterOS.*$' + set ft=routeros + " CVS diff else let s:lnum = 1 |