|
@@ -20,7 +20,7 @@ function M.config()
|
|
sync_install = false,
|
|
sync_install = false,
|
|
|
|
|
|
-- Automatically install missing parsers when entering buffer
|
|
-- Automatically install missing parsers when entering buffer
|
|
- auto_install = false,
|
|
|
|
|
|
+ auto_install = true,
|
|
|
|
|
|
matchup = {
|
|
matchup = {
|
|
enable = false, -- mandatory, false will disable the whole extension
|
|
enable = false, -- mandatory, false will disable the whole extension
|
|
@@ -95,69 +95,6 @@ function M.config()
|
|
}
|
|
}
|
|
end
|
|
end
|
|
|
|
|
|
----@class bundledParsersOpts
|
|
|
|
----@field name_only boolean
|
|
|
|
----@field filter function
|
|
|
|
-
|
|
|
|
----Retrives a list of bundled parsers paths (any parser not found in default `install_dir`)
|
|
|
|
----@param opts bundledParsersOpts
|
|
|
|
----@return string[]
|
|
|
|
-local function get_parsers(opts)
|
|
|
|
- opts = opts or {}
|
|
|
|
- opts.filter = opts.filter or function()
|
|
|
|
- return true
|
|
|
|
- end
|
|
|
|
-
|
|
|
|
- local bundled_parsers = vim.tbl_filter(opts.filter, vim.api.nvim_get_runtime_file("parser/*.so", true))
|
|
|
|
-
|
|
|
|
- if opts.name_only then
|
|
|
|
- bundled_parsers = vim.tbl_map(function(parser)
|
|
|
|
- return vim.fn.fnamemodify(parser, ":t:r")
|
|
|
|
- end, bundled_parsers)
|
|
|
|
- end
|
|
|
|
-
|
|
|
|
- return bundled_parsers
|
|
|
|
-end
|
|
|
|
-
|
|
|
|
----Checks if parser is installed with nvim-treesitter
|
|
|
|
----@param lang string
|
|
|
|
----@return boolean
|
|
|
|
-local function is_installed(lang)
|
|
|
|
- local configs = require "nvim-treesitter.configs"
|
|
|
|
- local result = get_parsers {
|
|
|
|
- filter = function(parser)
|
|
|
|
- local install_dir = configs.get_parser_install_dir()
|
|
|
|
- return vim.startswith(parser, install_dir) and (vim.fn.fnamemodify(parser, ":t:r") == lang)
|
|
|
|
- end,
|
|
|
|
- }
|
|
|
|
- local parser_file = result and result[1] or ""
|
|
|
|
- local stat = vim.loop.fs_stat(parser_file)
|
|
|
|
- return stat and stat.type == "file"
|
|
|
|
-end
|
|
|
|
-
|
|
|
|
-local function ensure_updated_bundled()
|
|
|
|
- local configs = require "nvim-treesitter.configs"
|
|
|
|
- local bundled_parsers = get_parsers {
|
|
|
|
- name_only = true,
|
|
|
|
- filter = function(parser)
|
|
|
|
- local install_dir = configs.get_parser_install_dir()
|
|
|
|
- return not vim.startswith(parser, install_dir)
|
|
|
|
- end,
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- vim.api.nvim_create_autocmd("VimEnter", {
|
|
|
|
- callback = function()
|
|
|
|
- local missing = vim.tbl_filter(function(parser)
|
|
|
|
- return not is_installed(parser)
|
|
|
|
- end, bundled_parsers)
|
|
|
|
-
|
|
|
|
- if #missing > 0 then
|
|
|
|
- vim.cmd { cmd = "TSInstall", args = missing, bang = true }
|
|
|
|
- end
|
|
|
|
- end,
|
|
|
|
- })
|
|
|
|
-end
|
|
|
|
-
|
|
|
|
function M.setup()
|
|
function M.setup()
|
|
-- avoid running in headless mode since it's harder to detect failures
|
|
-- avoid running in headless mode since it's harder to detect failures
|
|
if #vim.api.nvim_list_uis() == 0 then
|
|
if #vim.api.nvim_list_uis() == 0 then
|
|
@@ -175,14 +112,9 @@ function M.setup()
|
|
|
|
|
|
treesitter_configs.setup(opts)
|
|
treesitter_configs.setup(opts)
|
|
|
|
|
|
- ensure_updated_bundled()
|
|
|
|
-
|
|
|
|
if lvim.builtin.treesitter.on_config_done then
|
|
if lvim.builtin.treesitter.on_config_done then
|
|
lvim.builtin.treesitter.on_config_done(treesitter_configs)
|
|
lvim.builtin.treesitter.on_config_done(treesitter_configs)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
-M.get_parsers = get_parsers
|
|
|
|
-M.is_installed = is_installed
|
|
|
|
-
|
|
|
|
return M
|
|
return M
|