aboutsummaryrefslogtreecommitdiff
path: root/runtime
diff options
context:
space:
mode:
Diffstat (limited to 'runtime')
-rw-r--r--runtime/doc/diagnostic.txt22
-rw-r--r--runtime/filetype.vim5
-rw-r--r--runtime/lua/vim/diagnostic.lua108
-rw-r--r--runtime/lua/vim/lsp/sync.lua8
-rw-r--r--runtime/scripts.vim8
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