mirror of
https://github.com/nvim-treesitter/nvim-treesitter.git
synced 2026-07-14 01:10:02 -04:00
install: allow installing multiple parsers at once
This allow commands like so : :TSInstall c rust lua python
This commit is contained in:
parent
9c32111191
commit
0ab6bbec67
1 changed files with 22 additions and 24 deletions
|
|
@ -80,32 +80,11 @@ local function run_install(cache_folder, package_path, ft, repo)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- TODO(kyazdani): this should work on windows too
|
-- TODO(kyazdani): this should work on windows too
|
||||||
local function install(ft)
|
local function install(...)
|
||||||
if fn.has('win32') == 1 then
|
if fn.has('win32') == 1 then
|
||||||
return api.nvim_err_writeln('This command is not available on windows at the moment.')
|
return api.nvim_err_writeln('This command is not available on windows at the moment.')
|
||||||
end
|
end
|
||||||
|
|
||||||
if not ft then
|
|
||||||
return api.nvim_err_writeln("Usage: install_parser('language')")
|
|
||||||
end
|
|
||||||
|
|
||||||
if #api.nvim_get_runtime_file('parser/'..ft..'.so', false) > 0 then
|
|
||||||
local yesno = fn.input('Parser already available: would you like to reinstall ? y/n: ')
|
|
||||||
print('\n ') -- mandatory to avoid messing up command line
|
|
||||||
if not string.match(yesno, '^y.*') then return end
|
|
||||||
end
|
|
||||||
|
|
||||||
local parser_config = configs.get_parser_configs()[ft]
|
|
||||||
if not parser_config then
|
|
||||||
return api.nvim_err_writeln('Parser not available for language '..ft)
|
|
||||||
end
|
|
||||||
|
|
||||||
local install_info = parser_config.install_info
|
|
||||||
vim.validate {
|
|
||||||
url={ install_info.url, 'string' },
|
|
||||||
files={ install_info.files, 'table' }
|
|
||||||
}
|
|
||||||
|
|
||||||
if fn.executable('git') == 0 then
|
if fn.executable('git') == 0 then
|
||||||
return api.nvim_err_writeln('Git is required on your system to run this command')
|
return api.nvim_err_writeln('Git is required on your system to run this command')
|
||||||
end
|
end
|
||||||
|
|
@ -116,7 +95,26 @@ local function install(ft)
|
||||||
local cache_folder, err = utils.get_cache_dir()
|
local cache_folder, err = utils.get_cache_dir()
|
||||||
if err then return api.nvim_err_writeln(err) end
|
if err then return api.nvim_err_writeln(err) end
|
||||||
|
|
||||||
run_install(cache_folder, package_path, ft, install_info)
|
for _, ft in ipairs({ ... }) do
|
||||||
|
if #api.nvim_get_runtime_file('parser/'..ft..'.so', false) > 0 then
|
||||||
|
local yesno = fn.input(ft .. ' parser already available: would you like to reinstall ? y/n: ')
|
||||||
|
print('\n ') -- mandatory to avoid messing up command line
|
||||||
|
if not string.match(yesno, '^y.*') then return end
|
||||||
|
end
|
||||||
|
|
||||||
|
local parser_config = configs.get_parser_configs()[ft]
|
||||||
|
if not parser_config then
|
||||||
|
return api.nvim_err_writeln('Parser not available for language '..ft)
|
||||||
|
end
|
||||||
|
|
||||||
|
local install_info = parser_config.install_info
|
||||||
|
vim.validate {
|
||||||
|
url={ install_info.url, 'string' },
|
||||||
|
files={ install_info.files, 'table' }
|
||||||
|
}
|
||||||
|
|
||||||
|
run_install(cache_folder, package_path, ft, install_info)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -141,7 +139,7 @@ M.commands = {
|
||||||
TSInstall = {
|
TSInstall = {
|
||||||
run = install,
|
run = install,
|
||||||
args = {
|
args = {
|
||||||
"-nargs=1",
|
"-nargs=+",
|
||||||
"-complete=custom,v:lua.ts_installable_parsers"
|
"-complete=custom,v:lua.ts_installable_parsers"
|
||||||
},
|
},
|
||||||
description = '`:TSInstall {ft}` installs a parser under nvim-treesitter/parser/{name}.so'
|
description = '`:TSInstall {ft}` installs a parser under nvim-treesitter/parser/{name}.so'
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue