summaryrefslogtreecommitdiff
path: root/lua/nvim-treesitter/install.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lua/nvim-treesitter/install.lua')
-rw-r--r--lua/nvim-treesitter/install.lua35
1 files changed, 32 insertions, 3 deletions
diff --git a/lua/nvim-treesitter/install.lua b/lua/nvim-treesitter/install.lua
index 95a8a9f9..48810b1e 100644
--- a/lua/nvim-treesitter/install.lua
+++ b/lua/nvim-treesitter/install.lua
@@ -42,11 +42,14 @@ local function get_job_status()
.. "]"
end
+---@param lang string
+---@param validate boolean|nil
+---@return InstallInfo
local function get_parser_install_info(lang, validate)
local parser_config = parsers.get_parser_configs()[lang]
if not parser_config then
- return error('Parser not available for language "' .. lang .. '"')
+ error('Parser not available for language "' .. lang .. '"')
end
local install_info = parser_config.install_info
@@ -79,6 +82,8 @@ local function get_revision(lang)
return (lockfile[lang] and lockfile[lang].revision)
end
+---@param lang string
+---@return string|nil
local function get_installed_revision(lang)
local lang_file = utils.join_path(configs.get_parser_info_dir(), lang .. ".revision")
if vim.fn.filereadable(lang_file) == 1 then
@@ -86,23 +91,30 @@ local function get_installed_revision(lang)
end
end
+---@param lang string
+---@return boolean
local function is_installed(lang)
return #api.nvim_get_runtime_file("parser/" .. lang .. ".so", false) > 0
end
+---@param lang string
+---@return boolean
local function needs_update(lang)
local revision = get_revision(lang)
return not revision or revision ~= get_installed_revision(lang)
end
+---@return table
local function outdated_parsers()
return vim.tbl_filter(function(lang)
return needs_update(lang)
end, info.installed_parsers())
end
+---@param handle userdata
+---@param is_stderr boolean
local function onread(handle, is_stderr)
- return function(err, data)
+ return function(_, data)
if data then
if is_stderr then
complete_error_output[handle] = (complete_error_output[handle] or "") .. data
@@ -147,6 +159,7 @@ function M.iter_cmd(cmd_list, i, lang, success_message)
local stdout = luv.new_pipe(false)
local stderr = luv.new_pipe(false)
attr.opts.stdio = { nil, stdout, stderr }
+ ---@type userdata
handle = luv.spawn(
attr.cmd,
attr.opts,
@@ -225,6 +238,12 @@ local function iter_cmd_sync(cmd_list)
return true
end
+---@param cache_folder string
+---@param install_folder string
+---@param lang string
+---@param repo InstallInfo
+---@param with_sync boolean
+---@param generate_from_grammar boolean
local function run_install(cache_folder, install_folder, lang, repo, with_sync, generate_from_grammar)
parsers.reset_cache()
@@ -361,6 +380,12 @@ local function run_install(cache_folder, install_folder, lang, repo, with_sync,
end
end
+---@param lang string
+---@param ask_reinstall boolean
+---@param cache_folder string
+---@param install_folder string
+---@param with_sync boolean
+---@param generate_from_grammar boolean
local function install_lang(lang, ask_reinstall, cache_folder, install_folder, with_sync, generate_from_grammar)
if is_installed(lang) and ask_reinstall ~= "force" then
if not ask_reinstall then
@@ -389,6 +414,7 @@ local function install_lang(lang, ask_reinstall, cache_folder, install_folder, w
run_install(cache_folder, install_folder, lang, install_info, with_sync, generate_from_grammar)
end
+---@return function
local function install(options)
options = options or {}
local with_sync = options.with_sync
@@ -405,11 +431,14 @@ local function install(options)
if err then
return api.nvim_err_writeln(err)
end
+ assert(cache_folder)
- local install_folder, err = configs.get_parser_install_dir()
+ local install_folder
+ install_folder, err = configs.get_parser_install_dir()
if err then
return api.nvim_err_writeln(err)
end
+ assert(install_folder)
local languages
local ask