aboutsummaryrefslogtreecommitdiffstats
path: root/lua
diff options
context:
space:
mode:
Diffstat (limited to 'lua')
-rw-r--r--lua/nvim-treesitter/parsers.lua39
1 files changed, 27 insertions, 12 deletions
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