aboutsummaryrefslogtreecommitdiffstats
path: root/lua
diff options
context:
space:
mode:
authorLuis Carlos Cruz Carballo <lcruzc@linkux-it.com>2020-11-30 21:30:07 -0400
committerKiyan <yazdani.kiyan@protonmail.com>2020-12-09 19:11:41 +0100
commit76486942e79973095795e8699f95bb509e063d0d (patch)
tree28cf4ff15c1c67e7f125be5a211b46674e3bba2b /lua
parentUpdate Elm parser (diff)
downloadnvim-treesitter-76486942e79973095795e8699f95bb509e063d0d.tar
nvim-treesitter-76486942e79973095795e8699f95bb509e063d0d.tar.gz
nvim-treesitter-76486942e79973095795e8699f95bb509e063d0d.tar.bz2
nvim-treesitter-76486942e79973095795e8699f95bb509e063d0d.tar.lz
nvim-treesitter-76486942e79973095795e8699f95bb509e063d0d.tar.xz
nvim-treesitter-76486942e79973095795e8699f95bb509e063d0d.tar.zst
nvim-treesitter-76486942e79973095795e8699f95bb509e063d0d.zip
Allow user configure parsers using metatables
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