aboutsummaryrefslogtreecommitdiff
path: root/runtime/lua
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/lua')
-rw-r--r--runtime/lua/vim/_editor.lua2
-rw-r--r--runtime/lua/vim/diagnostic.lua2
-rw-r--r--runtime/lua/vim/filetype.lua9
-rw-r--r--runtime/lua/vim/iter.lua2
-rw-r--r--runtime/lua/vim/lsp.lua9
-rw-r--r--runtime/lua/vim/lsp/buf.lua21
-rw-r--r--runtime/lua/vim/lsp/handlers.lua20
-rw-r--r--runtime/lua/vim/lsp/inlay_hint.lua (renamed from runtime/lua/vim/lsp/_inlay_hint.lua)47
-rw-r--r--runtime/lua/vim/lsp/util.lua8
-rw-r--r--runtime/lua/vim/treesitter/_fold.lua14
-rw-r--r--runtime/lua/vim/treesitter/languagetree.lua3
11 files changed, 78 insertions, 59 deletions
diff --git a/runtime/lua/vim/_editor.lua b/runtime/lua/vim/_editor.lua
index e2ed0d980e..ab20c36b17 100644
--- a/runtime/lua/vim/_editor.lua
+++ b/runtime/lua/vim/_editor.lua
@@ -184,6 +184,7 @@ end
--- Gets a human-readable representation of the given object.
---
+---@see |vim.print()|
---@see https://github.com/kikito/inspect.lua
---@see https://github.com/mpeterv/vinspect
local function inspect(object, options) -- luacheck: no unused
@@ -870,6 +871,7 @@ end
--- </pre>
---
--- @see |vim.inspect()|
+--- @see |:=|
--- @return any # given arguments.
function vim.print(...)
if vim.in_fast_event() then
diff --git a/runtime/lua/vim/diagnostic.lua b/runtime/lua/vim/diagnostic.lua
index 0d1d01b391..093bfb631e 100644
--- a/runtime/lua/vim/diagnostic.lua
+++ b/runtime/lua/vim/diagnostic.lua
@@ -767,7 +767,7 @@ end
--- - namespace: (number) Limit diagnostics to the given namespace.
--- - lnum: (number) Limit diagnostics to the given line number.
--- - severity: See |diagnostic-severity|.
----@return Diagnostic[] table A list of diagnostic items |diagnostic-structure|.
+---@return Diagnostic[] table A list of diagnostic items |diagnostic-structure|. Keys `bufnr`, `end_lnum`, `end_col`, and `severity` are guaranteed to be present.
function M.get(bufnr, opts)
vim.validate({
bufnr = { bufnr, 'n', true },
diff --git a/runtime/lua/vim/filetype.lua b/runtime/lua/vim/filetype.lua
index 33e80690ff..bc880ed130 100644
--- a/runtime/lua/vim/filetype.lua
+++ b/runtime/lua/vim/filetype.lua
@@ -783,6 +783,10 @@ local extension = {
g = 'pccts',
pcmk = 'pcmk',
pdf = 'pdf',
+ pem = 'pem',
+ cer = 'pem',
+ crt = 'pem',
+ csr = 'pem',
plx = 'perl',
prisma = 'prisma',
psgi = 'perl',
@@ -1372,6 +1376,7 @@ local filename = {
['named.root'] = 'bindzone',
WORKSPACE = 'bzl',
['WORKSPACE.bzlmod'] = 'bzl',
+ BUCK = 'bzl',
BUILD = 'bzl',
['cabal.project'] = 'cabalproject',
['cabal.config'] = 'cabalconfig',
@@ -1808,6 +1813,8 @@ local pattern = {
['bzr_log%..*'] = 'bzr',
['.*enlightenment/.*%.cfg'] = 'c',
['${HOME}/cabal%.config'] = 'cabalconfig',
+ ['${HOME}/%.config/cabal/config'] = 'cabalconfig',
+ ['${XDG_CONFIG_HOME}/cabal/config'] = 'cabalconfig',
['cabal%.project%..*'] = starsetf('cabalproject'),
['.*/%.calendar/.*'] = starsetf('calendar'),
['.*/share/calendar/.*/calendar%..*'] = starsetf('calendar'),
@@ -2489,7 +2496,7 @@ local function match_pattern(name, path, tail, pat)
return_early = true
return nil
end
- return vim.env[env]
+ return vim.pesc(vim.env[env])
end)
if return_early then
return false
diff --git a/runtime/lua/vim/iter.lua b/runtime/lua/vim/iter.lua
index 9c7bd13164..245a33625e 100644
--- a/runtime/lua/vim/iter.lua
+++ b/runtime/lua/vim/iter.lua
@@ -359,7 +359,7 @@ function ListIter.totable(self)
return self._table
end
---- Fold an iterator or table into a single value.
+--- Fold ("reduce") an iterator or table into a single value.
---
--- Examples:
--- <pre>lua
diff --git a/runtime/lua/vim/lsp.lua b/runtime/lua/vim/lsp.lua
index 2c115007de..ca4851f8d7 100644
--- a/runtime/lua/vim/lsp.lua
+++ b/runtime/lua/vim/lsp.lua
@@ -2457,7 +2457,7 @@ end
--- buffer number as arguments. Example:
--- <pre>lua
--- vim.lsp.for_each_buffer_client(0, function(client, client_id, bufnr)
---- print(vim.inspect(client))
+--- vim.print(client)
--- end)
--- </pre>
---@deprecated use lsp.get_active_clients({ bufnr = bufnr }) with regular loop
@@ -2474,6 +2474,13 @@ function lsp.with(handler, override_config)
end
end
+--- Enable/disable/toggle inlay hints for a buffer
+---@param bufnr (integer) Buffer handle, or 0 for current
+---@param enable (boolean|nil) true/false to enable/disable, nil to toggle
+function lsp.inlay_hint(bufnr, enable)
+ return require('vim.lsp.inlay_hint')(bufnr, enable)
+end
+
--- Helper function to use when implementing a handler.
--- This will check that all of the keys in the user configuration
--- are valid keys and make sense to include for this handler.
diff --git a/runtime/lua/vim/lsp/buf.lua b/runtime/lua/vim/lsp/buf.lua
index 17b444a6e8..0369725216 100644
--- a/runtime/lua/vim/lsp/buf.lua
+++ b/runtime/lua/vim/lsp/buf.lua
@@ -122,7 +122,7 @@ end
---@private
---@param bufnr integer
---@param mode "v"|"V"
----@return table {start={row, col}, end={row, col}} using (1, 0) indexing
+---@return table {start={row,col}, end={row,col}} using (1, 0) indexing
local function range_from_selection(bufnr, mode)
-- TODO: Use `vim.region()` instead https://github.com/neovim/neovim/pull/13896
@@ -189,7 +189,7 @@ end
--- Restrict formatting to the client with name (client.name) matching this field.
---
--- - range (table|nil) Range to format.
---- Table must contain `start` and `end` keys with {row, col} tuples using
+--- Table must contain `start` and `end` keys with {row,col} tuples using
--- (1,0) indexing.
--- Defaults to current selection in visual mode
--- Defaults to `nil` in other modes, formatting the full buffer
@@ -741,7 +741,7 @@ end
--- - range: (table|nil)
--- Range for which code actions should be requested.
--- If in visual mode this defaults to the active selection.
---- Table must contain `start` and `end` keys with {row, col} tuples
+--- Table must contain `start` and `end` keys with {row,col} tuples
--- using mark-like indexing. See |api-indexing|
---
---@see https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_codeAction
@@ -796,19 +796,4 @@ function M.execute_command(command_params)
request('workspace/executeCommand', command_params)
end
---- Enable/disable/toggle inlay hints for a buffer
----@param bufnr (integer) Buffer handle, or 0 for current
----@param enable (boolean|nil) true/false to enable/disable, nil to toggle
-function M.inlay_hint(bufnr, enable)
- vim.validate({ enable = { enable, { 'boolean', 'nil' } }, bufnr = { bufnr, 'number' } })
- local inlay_hint = require('vim.lsp._inlay_hint')
- if enable then
- inlay_hint.enable(bufnr)
- elseif enable == false then
- inlay_hint.disable(bufnr)
- else
- inlay_hint.toggle(bufnr)
- end
-end
-
return M
diff --git a/runtime/lua/vim/lsp/handlers.lua b/runtime/lua/vim/lsp/handlers.lua
index 284e3ef2d0..625a2ed282 100644
--- a/runtime/lua/vim/lsp/handlers.lua
+++ b/runtime/lua/vim/lsp/handlers.lua
@@ -220,7 +220,7 @@ M['textDocument/codeLens'] = function(...)
end
M['textDocument/inlayHint'] = function(...)
- return require('vim.lsp._inlay_hint').on_inlayhint(...)
+ return require('vim.lsp.inlay_hint').on_inlayhint(...)
end
--see: https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_references
@@ -617,22 +617,8 @@ M['window/showDocument'] = function(_, result, ctx, _)
end
---@see https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#workspace_inlayHint_refresh
-M['workspace/inlayHint/refresh'] = function(err, _, ctx)
- local inlay_hint = require('vim.lsp._inlay_hint')
- if err then
- return vim.NIL
- end
-
- for _, bufnr in ipairs(vim.lsp.get_buffers_by_client_id(ctx.client_id)) do
- for _, winid in ipairs(api.nvim_list_wins()) do
- if api.nvim_win_get_buf(winid) == bufnr then
- inlay_hint.refresh({ bufnr = bufnr })
- break
- end
- end
- end
-
- return vim.NIL
+M['workspace/inlayHint/refresh'] = function(err, result, ctx, config)
+ return require('vim.lsp.inlay_hint').on_refresh(err, result, ctx, config)
end
-- Add boilerplate error validation and logging for all of these.
diff --git a/runtime/lua/vim/lsp/_inlay_hint.lua b/runtime/lua/vim/lsp/inlay_hint.lua
index 84794841ae..1af18bbc61 100644
--- a/runtime/lua/vim/lsp/_inlay_hint.lua
+++ b/runtime/lua/vim/lsp/inlay_hint.lua
@@ -101,7 +101,7 @@ end
--- - only_visible (boolean, default: false): Whether to only refresh hints for the visible regions of the buffer
---
---@private
-function M.refresh(opts)
+local function refresh(opts)
opts = opts or {}
local bufnr = resolve_bufnr(opts.bufnr or 0)
local bufstate = bufstates[bufnr]
@@ -139,6 +139,24 @@ function M.refresh(opts)
end
end
+--- |lsp-handler| for the method `textDocument/inlayHint/refresh`
+---@private
+function M.on_refresh(err, _, ctx, _)
+ if err then
+ return vim.NIL
+ end
+ for _, bufnr in ipairs(vim.lsp.get_buffers_by_client_id(ctx.client_id)) do
+ for _, winid in ipairs(api.nvim_list_wins()) do
+ if api.nvim_win_get_buf(winid) == bufnr then
+ refresh({ bufnr = bufnr })
+ break
+ end
+ end
+ end
+
+ return vim.NIL
+end
+
--- Clear inlay hints
---@param bufnr (integer) Buffer handle, or 0 for current
---@private
@@ -163,18 +181,18 @@ end
---@private
local function make_request(request_bufnr)
reset_timer(request_bufnr)
- M.refresh({ bufnr = request_bufnr })
+ refresh({ bufnr = request_bufnr })
end
--- Enable inlay hints for a buffer
---@param bufnr (integer) Buffer handle, or 0 for current
---@private
-function M.enable(bufnr)
+local function enable(bufnr)
bufnr = resolve_bufnr(bufnr)
local bufstate = bufstates[bufnr]
if not (bufstate and bufstate.enabled) then
bufstates[bufnr] = { enabled = true, timer = nil, applied = {} }
- M.refresh({ bufnr = bufnr })
+ refresh({ bufnr = bufnr })
api.nvim_buf_attach(bufnr, true, {
on_lines = function(_, cb_bufnr)
if not bufstates[cb_bufnr].enabled then
@@ -188,9 +206,9 @@ function M.enable(bufnr)
on_reload = function(_, cb_bufnr)
clear(cb_bufnr)
if bufstates[cb_bufnr] and bufstates[cb_bufnr].enabled then
- bufstates[cb_bufnr] = { enabled = true }
+ bufstates[cb_bufnr] = { enabled = true, applied = {} }
end
- M.refresh({ bufnr = cb_bufnr })
+ refresh({ bufnr = cb_bufnr })
end,
on_detach = function(_, cb_bufnr)
clear(cb_bufnr)
@@ -211,7 +229,7 @@ end
--- Disable inlay hints for a buffer
---@param bufnr (integer) Buffer handle, or 0 for current
---@private
-function M.disable(bufnr)
+local function disable(bufnr)
bufnr = resolve_bufnr(bufnr)
if bufstates[bufnr] and bufstates[bufnr].enabled then
clear(bufnr)
@@ -223,7 +241,7 @@ end
--- Toggle inlay hints for a buffer
---@param bufnr (integer) Buffer handle, or 0 for current
---@private
-function M.toggle(bufnr)
+local function toggle(bufnr)
bufnr = resolve_bufnr(bufnr)
local bufstate = bufstates[bufnr]
if bufstate and bufstate.enabled then
@@ -281,4 +299,15 @@ api.nvim_set_decoration_provider(namespace, {
end,
})
-return M
+return setmetatable(M, {
+ __call = function(_, bufnr, enable_)
+ vim.validate({ enable = { enable_, { 'boolean', 'nil' } }, bufnr = { bufnr, 'number' } })
+ if enable_ then
+ enable(bufnr)
+ elseif enable_ == false then
+ disable(bufnr)
+ else
+ toggle(bufnr)
+ end
+ end,
+})
diff --git a/runtime/lua/vim/lsp/util.lua b/runtime/lua/vim/lsp/util.lua
index 538e48c805..4c319e7c41 100644
--- a/runtime/lua/vim/lsp/util.lua
+++ b/runtime/lua/vim/lsp/util.lua
@@ -178,8 +178,8 @@ local _str_byteindex_enc = M._str_byteindex_enc
--- CAUTION: Changes in-place!
---
---@param lines (table) Original list of strings
----@param A (table) Start position; a 2-tuple of {line, col} numbers
----@param B (table) End position; a 2-tuple of {line, col} numbers
+---@param A (table) Start position; a 2-tuple of {line,col} numbers
+---@param B (table) End position; a 2-tuple of {line,col} numbers
---@param new_lines A list of strings to replace the original
---@returns (table) The modified {lines} object
function M.set_lines(lines, A, B, new_lines)
@@ -2075,9 +2075,9 @@ end
--- Using the given range in the current buffer, creates an object that
--- is similar to |vim.lsp.util.make_range_params()|.
---
----@param start_pos integer[]|nil {row, col} mark-indexed position.
+---@param start_pos integer[]|nil {row,col} mark-indexed position.
--- Defaults to the start of the last visual selection.
----@param end_pos integer[]|nil {row, col} mark-indexed position.
+---@param end_pos integer[]|nil {row,col} mark-indexed position.
--- Defaults to the end of the last visual selection.
---@param bufnr integer|nil buffer handle or 0 for current, defaults to current
---@param offset_encoding "utf-8"|"utf-16"|"utf-32"|nil defaults to `offset_encoding` of first client of `bufnr`
diff --git a/runtime/lua/vim/treesitter/_fold.lua b/runtime/lua/vim/treesitter/_fold.lua
index a8f8c7967e..d308657237 100644
--- a/runtime/lua/vim/treesitter/_fold.lua
+++ b/runtime/lua/vim/treesitter/_fold.lua
@@ -162,9 +162,7 @@ local function get_folds_levels(bufnr, info, srow, erow)
local parser = ts.get_parser(bufnr)
- if not parser:is_valid() then
- return
- end
+ parser:parse()
parser:for_each_tree(function(tree, ltree)
local query = ts.query.get(ltree:lang(), 'folds')
@@ -283,10 +281,12 @@ local function on_bytes(bufnr, foldinfo, start_row, old_row, new_row)
local end_row_old = start_row + old_row
local end_row_new = start_row + new_row
- if new_row < old_row then
- foldinfo:remove_range(end_row_new, end_row_old)
- elseif new_row > old_row then
- foldinfo:add_range(start_row, end_row_new)
+ if new_row ~= old_row then
+ if new_row < old_row then
+ foldinfo:remove_range(end_row_new, end_row_old)
+ else
+ foldinfo:add_range(start_row, end_row_new)
+ end
schedule_if_loaded(bufnr, function()
get_folds_levels(bufnr, foldinfo, start_row, end_row_new)
recompute_folds()
diff --git a/runtime/lua/vim/treesitter/languagetree.lua b/runtime/lua/vim/treesitter/languagetree.lua
index cabfa8ccc0..bf6333aaa4 100644
--- a/runtime/lua/vim/treesitter/languagetree.lua
+++ b/runtime/lua/vim/treesitter/languagetree.lua
@@ -447,6 +447,9 @@ end
---@private
---@param region Range6[]
local function region_tostr(region)
+ if #region == 0 then
+ return '[]'
+ end
local srow, scol = region[1][1], region[1][2]
local erow, ecol = region[#region][4], region[#region][5]
return string.format('[%d:%d-%d:%d]', srow, scol, erow, ecol)