mirror of
https://github.com/nvim-treesitter/nvim-treesitter.git
synced 2026-07-16 18:30:06 -04:00
Allow user configure parsers using metatables
This commit is contained in:
parent
a47c83d12d
commit
76486942e7
2 changed files with 40 additions and 12 deletions
13
README.md
13
README.md
|
|
@ -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`.
|
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`.
|
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
|
## Adding queries
|
||||||
|
|
||||||
Queries are what `nvim-treesitter` uses to extract informations from the syntax tree; they are
|
Queries are what `nvim-treesitter` uses to extract informations from the syntax tree; they are
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,33 @@
|
||||||
local api = vim.api
|
local api = vim.api
|
||||||
local ts = vim.treesitter
|
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 = {
|
list.javascript = {
|
||||||
install_info = {
|
install_info = {
|
||||||
|
|
@ -349,17 +375,6 @@ local M = {
|
||||||
list = list
|
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)
|
function M.ft_to_lang(ft)
|
||||||
return ft_to_parsername[ft] or ft
|
return ft_to_parsername[ft] or ft
|
||||||
end
|
end
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue