From 76486942e79973095795e8699f95bb509e063d0d Mon Sep 17 00:00:00 2001 From: Luis Carlos Cruz Carballo Date: Mon, 30 Nov 2020 21:30:07 -0400 Subject: Allow user configure parsers using metatables --- lua/nvim-treesitter/parsers.lua | 39 +++++++++++++++++++++++++++------------ 1 file changed, 27 insertions(+), 12 deletions(-) (limited to 'lua') diff --git a/lua/nvim-treesitter/parsers.lua b/lua/nvim-treesitter/parsers.lua index e43d2ff04..7b10f1ca6 100644 --- a/lua/nvim-treesitter/parsers.lua +++ b/lua/nvim-treesitter/parsers.lua @@ -1,7 +1,33 @@ local api = vim.api local ts = vim.treesitter -local list = {} +local ft_to_parsername = {} + +local function update_ft_to_parsername(name, parser) + if type(parser.used_by) == 'table' then + for _, ft in pairs(parser.used_by) do + ft_to_parsername[ft] = name + end + end + ft_to_parsername[parser.filetype or name] = name +end + +local list = setmetatable({}, { + __newindex = function(table, parsername, parserconfig) + + rawset(table, parsername, setmetatable(parserconfig, { + __newindex = function(parserconfigtable, key, value) + if key == "used_by" then + ft_to_parsername[value] = parsername + else + rawset(parserconfigtable, key, value) + end + end + })) + + update_ft_to_parsername(parsername, parserconfig) + end +}) list.javascript = { install_info = { @@ -349,17 +375,6 @@ local M = { list = list } -local ft_to_parsername = {} - -for name, obj in pairs(M.list) do - if type(obj.used_by) == 'table' then - for _, ft in pairs(obj.used_by) do - ft_to_parsername[ft] = name - end - end - ft_to_parsername[obj.filetype or name] = name -end - function M.ft_to_lang(ft) return ft_to_parsername[ft] or ft end -- cgit v1.2.3-70-g09d2