|  | @@ -20,7 +20,7 @@ function M.config()
 | 
	
		
			
				|  |  |      sync_install = false,
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      -- Automatically install missing parsers when entering buffer
 | 
	
		
			
				|  |  | -    auto_install = false,
 | 
	
		
			
				|  |  | +    auto_install = true,
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      matchup = {
 | 
	
		
			
				|  |  |        enable = false, -- mandatory, false will disable the whole extension
 | 
	
	
		
			
				|  | @@ -95,69 +95,6 @@ function M.config()
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  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()
 | 
	
		
			
				|  |  |    -- avoid running in headless mode since it's harder to detect failures
 | 
	
		
			
				|  |  |    if #vim.api.nvim_list_uis() == 0 then
 | 
	
	
		
			
				|  | @@ -175,14 +112,9 @@ function M.setup()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    treesitter_configs.setup(opts)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  ensure_updated_bundled()
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |    if lvim.builtin.treesitter.on_config_done then
 | 
	
		
			
				|  |  |      lvim.builtin.treesitter.on_config_done(treesitter_configs)
 | 
	
		
			
				|  |  |    end
 | 
	
		
			
				|  |  |  end
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -M.get_parsers = get_parsers
 | 
	
		
			
				|  |  | -M.is_installed = is_installed
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  return M
 |