Allow user configure parsers using metatables

This commit is contained in:
Luis Carlos Cruz Carballo 2020-11-30 21:30:07 -04:00 committed by Kiyan
parent a47c83d12d
commit 76486942e7
2 changed files with 40 additions and 12 deletions

View file

@ -275,6 +275,19 @@ EOF
You can also skip step 2 and use `:TSInstallFromGrammar zimbu` to install directly from a `grammar.js` in the top-level directory specified by `url`.
Once the parser is installed, you can update it (from the latest revision of the `main` branch if `url` is a Github repository) with `:TSUpdate zimbu`.
## Update parsers used_by
Sometimes needs to use some parser for different filetype.
Add the following snippet to your `init.vim`:
```vim
lua <<EOF
local parser_config = require "nvim-treesitter.parsers".get_parser_configs()
parser_config.typescript.used_by = "javascriptflow"
EOF
```
## Adding queries
Queries are what `nvim-treesitter` uses to extract informations from the syntax tree; they are

View file

@ -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