fix: do not use vim.iter (#6469)

This commit is contained in:
Lewis Russell 2024-04-19 18:12:54 +01:00 committed by Christian Clason
parent 421e2fb7b2
commit 0bb981c876
4 changed files with 71 additions and 35 deletions

View file

@ -106,12 +106,17 @@ function M.norm_languages(languages, skip)
end end
-- keep local to avoid leaking parsers module -- keep local to avoid leaking parsers module
--- @param list string[]
local function expand_tiers(list) local function expand_tiers(list)
for i, tier in ipairs(parsers.tiers) do for i, tier in ipairs(parsers.tiers) do
if vim.list_contains(list, tier) then if vim.list_contains(list, tier) then
list = vim.iter.filter(function(l) list = vim.tbl_filter(
return l ~= tier --- @param l string
end, list) --[[@as string[] ]] function(l)
return l ~= tier
end,
list
)
vim.list_extend(list, parsers.get_available(i)) vim.list_extend(list, parsers.get_available(i))
end end
end end
@ -123,29 +128,45 @@ function M.norm_languages(languages, skip)
if skip and skip.ignored then if skip and skip.ignored then
local ignored = expand_tiers(config.ignore_install) local ignored = expand_tiers(config.ignore_install)
languages = vim.iter.filter(function(v) languages = vim.tbl_filter(
return not vim.list_contains(ignored, v) --- @param v string
end, languages) --[[@as string[] ]] function(v)
return not vim.list_contains(ignored, v)
end,
languages
)
end end
if skip and skip.installed then if skip and skip.installed then
local installed = M.installed_parsers() local installed = M.installed_parsers()
languages = vim.iter.filter(function(v) languages = vim.tbl_filter(
return not vim.list_contains(installed, v) --- @param v string
end, languages) --[[@as string[] ]] function(v)
return not vim.list_contains(installed, v)
end,
languages
)
end end
if skip and skip.missing then if skip and skip.missing then
local installed = M.installed_parsers() local installed = M.installed_parsers()
languages = vim.iter.filter(function(v) languages = vim.tbl_filter(
return vim.list_contains(installed, v) --- @param v string
end, languages) --[[@as string[] ]] function(v)
return vim.list_contains(installed, v)
end,
languages
)
end end
languages = vim.iter.filter(function(v) languages = vim.tbl_filter(
-- TODO(lewis6991): warn of any unknown parsers? --- @param v string
return parsers.configs[v] ~= nil function(v)
end, languages) --[[@as string[] ]] -- TODO(lewis6991): warn of any unknown parsers?
return parsers.configs[v] ~= nil
end,
languages
)
if not (skip and skip.dependencies) then if not (skip and skip.dependencies) then
for _, lang in pairs(languages) do for _, lang in pairs(languages) do

View file

@ -152,7 +152,7 @@ end
local function cc_err() local function cc_err()
log.error( log.error(
'No C compiler found! "' 'No C compiler found! "'
.. table.concat(vim.iter.filter(istring, M.compilers), '", "') .. table.concat(vim.tbl_filter(istring, M.compilers), '", "')
.. '" are not executable.' .. '" are not executable.'
) )
end end
@ -230,7 +230,7 @@ local function do_download_tar(logger, repo, project_name, cache_dir, revision,
cwd = cache_dir, cwd = cache_dir,
}) })
if r.code > 0 then if r.code > 0 then
return logger:error('Error during download, please verify your internet connection: %s', r.stderr) return logger:error('Error during download: %s', r.stderr)
end end
logger:debug('Creating temporary directory: ' .. temp_dir) logger:debug('Creating temporary directory: ' .. temp_dir)
@ -328,7 +328,7 @@ end
---@param executables string[] ---@param executables string[]
---@return string? ---@return string?
function M.select_executable(executables) function M.select_executable(executables)
return vim.iter.filter(executable, executables)[1] return vim.tbl_filter(executable, executables)[1]
end end
-- Returns the compiler arguments based on the compiler and OS -- Returns the compiler arguments based on the compiler and OS
@ -520,8 +520,7 @@ local INSTALL_TIMEOUT = 60000
---@return InstallStatus status ---@return InstallStatus status
local function install_lang(lang, cache_dir, install_dir, force, generate_from_grammar) local function install_lang(lang, cache_dir, install_dir, force, generate_from_grammar)
if not force and vim.list_contains(config.installed_parsers(), lang) then if not force and vim.list_contains(config.installed_parsers(), lang) then
local yesno = local yesno = fn.input(lang .. ' parser already available: would you like to reinstall ? y/n: ')
fn.input(lang .. ' parser already available: would you like to reinstall ? y/n: ')
print('\n ') print('\n ')
if yesno:sub(1, 1) ~= 'y' then if yesno:sub(1, 1) ~= 'y' then
install_status[lang] = 'installed' install_status[lang] = 'installed'
@ -613,7 +612,7 @@ M.update = a.sync(function(languages, _options, _callback)
languages = 'all' languages = 'all'
end end
languages = config.norm_languages(languages, { ignored = true, missing = true }) languages = config.norm_languages(languages, { ignored = true, missing = true })
languages = vim.iter.filter(needs_update, languages) --- @type string[] languages = vim.tbl_filter(needs_update, languages) --- @type string[]
if #languages > 0 then if #languages > 0 then
install(languages, { force = true }) install(languages, { force = true })

View file

@ -3010,15 +3010,23 @@ function M.get_available(tier)
local parsers = vim.tbl_keys(M.configs) local parsers = vim.tbl_keys(M.configs)
table.sort(parsers) table.sort(parsers)
if tier then if tier then
parsers = vim.iter.filter(function(p) parsers = vim.tbl_filter(
return M.configs[p].tier == tier --- @param p string
end, parsers) --[[@as string[] ]] function(p)
return M.configs[p].tier == tier
end,
parsers
)
end end
if vim.fn.executable('tree-sitter') == 0 or vim.fn.executable('node') == 0 then if vim.fn.executable('tree-sitter') == 0 or vim.fn.executable('node') == 0 then
parsers = vim.iter.filter(function(p) parsers = vim.tbl_filter(
return M.configs[p].install_info --- @param p string
and not M.configs[p].install_info.requires_generate_from_grammar function(p)
end, parsers) --[[@as string[] ]] return M.configs[p].install_info ~= nil
and not M.configs[p].install_info.requires_generate_from_grammar
end,
parsers
)
end end
return parsers return parsers
end end

View file

@ -6,15 +6,23 @@ vim.g.loaded_nvim_treesitter = true
local api = vim.api local api = vim.api
local function complete_available_parsers(arglead) local function complete_available_parsers(arglead)
return vim.iter.filter(function(v) return vim.tbl_filter(
return v:find(arglead) --- @param v string
end, require('nvim-treesitter.parsers').get_available()) function(v)
return v:find(arglead) ~= nil
end,
require('nvim-treesitter.parsers').get_available()
)
end end
local function complete_installed_parsers(arglead) local function complete_installed_parsers(arglead)
return vim.iter.filter(function(v) return vim.tbl_filter(
return v:find(arglead) --- @param v string
end, require('nvim-treesitter.config').installed_parsers()) function(v)
return v:find(arglead) ~= nil
end,
require('nvim-treesitter.config').installed_parsers()
)
end end
-- create user commands -- create user commands