feat(lua): vim.tbl_contains supports general tables and predicates (#23040)

* feat(lua): vim.tbl_contains supports general tables and predicates

Problem: `vim.tbl_contains` only works for list-like tables (integer
keys without gaps) and primitive values (in particular, not for nested
tables).

Solution: Rename `vim.tbl_contains` to `vim.list_contains` and add new
`vim.tbl_contains` that works for general tables and optionally allows
`value` to be a predicate function that is checked for every key.
This commit is contained in:
Christian Clason
2023-04-14 10:39:57 +02:00
committed by GitHub
parent 72a327cad2
commit 4d04feb662
14 changed files with 110 additions and 23 deletions

View File

@@ -17,14 +17,14 @@ P.take_until = function(targets, specials)
table.insert(raw, '\\')
new_pos = new_pos + 1
c = string.sub(input, new_pos, new_pos)
if not vim.tbl_contains(targets, c) and not vim.tbl_contains(specials, c) then
if not vim.list_contains(targets, c) and not vim.list_contains(specials, c) then
table.insert(esc, '\\')
end
table.insert(raw, c)
table.insert(esc, c)
new_pos = new_pos + 1
else
if vim.tbl_contains(targets, c) then
if vim.list_contains(targets, c) then
break
end
table.insert(raw, c)

View File

@@ -42,7 +42,7 @@ local function execute_lens(lens, bufnr, client_id)
-- Need to use the client that returned the lens → must not use buf_request
local command_provider = client.server_capabilities.executeCommandProvider
local commands = type(command_provider) == 'table' and command_provider.commands or {}
if not vim.tbl_contains(commands, command.command) then
if not vim.list_contains(commands, command.command) then
vim.notify(
string.format(
'Language server does not support command `%s`. This command may require a client extension.',

View File

@@ -1476,7 +1476,7 @@ end
local function close_preview_window(winnr, bufnrs)
vim.schedule(function()
-- exit if we are in one of ignored buffers
if bufnrs and vim.tbl_contains(bufnrs, api.nvim_get_current_buf()) then
if bufnrs and vim.list_contains(bufnrs, api.nvim_get_current_buf()) then
return
end