diff options
| author | kiyan42 <yazdani.kiyan@protonmail.com> | 2020-06-29 14:46:25 +0200 |
|---|---|---|
| committer | Thomas Vigouroux <39092278+vigoux@users.noreply.github.com> | 2020-06-29 17:18:22 +0200 |
| commit | 7f6f7596dac5a45ae914336dc986ebb30881b1a3 (patch) | |
| tree | 4570e65eca2f5ad56261fcff992f17336b2b5604 /lua | |
| parent | Extend documentation for TSError (diff) | |
| download | nvim-treesitter-7f6f7596dac5a45ae914336dc986ebb30881b1a3.tar nvim-treesitter-7f6f7596dac5a45ae914336dc986ebb30881b1a3.tar.gz nvim-treesitter-7f6f7596dac5a45ae914336dc986ebb30881b1a3.tar.bz2 nvim-treesitter-7f6f7596dac5a45ae914336dc986ebb30881b1a3.tar.lz nvim-treesitter-7f6f7596dac5a45ae914336dc986ebb30881b1a3.tar.xz nvim-treesitter-7f6f7596dac5a45ae914336dc986ebb30881b1a3.tar.zst nvim-treesitter-7f6f7596dac5a45ae914336dc986ebb30881b1a3.zip | |
add used_by key to parsers
Enables the use of multiple filetypes for one parser.
Diffstat (limited to 'lua')
| -rw-r--r-- | lua/nvim-treesitter.lua | 5 | ||||
| -rw-r--r-- | lua/nvim-treesitter/configs.lua | 16 | ||||
| -rw-r--r-- | lua/nvim-treesitter/parsers.lua | 31 |
3 files changed, 35 insertions, 17 deletions
diff --git a/lua/nvim-treesitter.lua b/lua/nvim-treesitter.lua index 9b3ddce89..553ec3f65 100644 --- a/lua/nvim-treesitter.lua +++ b/lua/nvim-treesitter.lua @@ -17,9 +17,10 @@ function M.setup() for _, lang in pairs(parsers.available_parsers()) do for _, mod in pairs(configs.available_modules()) do if configs.is_enabled(mod, lang) then - local ft = parsers.lang_to_ft(lang) local cmd = string.format("lua require'nvim-treesitter.%s'.attach()", mod) - api.nvim_command(string.format("autocmd NvimTreesitter FileType %s %s", ft, cmd)) + for _, ft in pairs(parsers.lang_to_ft(lang)) do + api.nvim_command(string.format("autocmd NvimTreesitter FileType %s %s", ft, cmd)) + end end end end diff --git a/lua/nvim-treesitter/configs.lua b/lua/nvim-treesitter/configs.lua index f542e2609..13eb93675 100644 --- a/lua/nvim-treesitter/configs.lua +++ b/lua/nvim-treesitter/configs.lua @@ -49,9 +49,10 @@ end local function enable_mod_conf_autocmd(mod, lang) if not config.modules[mod] or M.is_enabled(mod, lang) then return end - local ft = parsers.lang_to_ft(lang) local cmd = string.format("lua require'nvim-treesitter.%s'.attach()", mod) - api.nvim_command(string.format("autocmd FileType %s %s", ft, cmd)) + for _, ft in pairs(parsers.lang_to_ft(lang)) do + api.nvim_command(string.format("autocmd NvimTreesitter FileType %s %s", ft, cmd)) + end for i, parser in pairs(config.modules[mod].disable) do if parser == lang then table.remove(config.modules[mod].disable, i) @@ -65,7 +66,7 @@ local function enable_all(mod, lang) for _, bufnr in pairs(api.nvim_list_bufs()) do local ft = api.nvim_buf_get_option(bufnr, 'ft') - if not lang or ft == parsers.lang_to_ft(lang) then + if not lang or parsers.lang_match_ft(lang, ft) then enable_module(mod, bufnr, lang) end end @@ -101,15 +102,18 @@ end local function disable_mod_conf_autocmd(mod, lang) if not config.modules[mod] or not M.is_enabled(mod, lang) then return end - local ft = parsers.lang_to_ft(lang) - api.nvim_command(string.format("autocmd! FileType %s", ft)) + local cmd = string.format("lua require'nvim-treesitter.%s'.attach()", mod) + -- TODO(kyazdani): detach the correct autocmd... doesn't work when using %s, cmd + for _, ft in pairs(parsers.lang_to_ft(lang)) do + api.nvim_command(string.format("autocmd! NvimTreesitter FileType %s", ft)) + end table.insert(config.modules[mod].disable, lang) end local function disable_all(mod, lang) for _, bufnr in pairs(api.nvim_list_bufs()) do local ft = api.nvim_buf_get_option(bufnr, 'ft') - if not lang or ft == parsers.lang_to_ft(lang) then + if not lang or parsers.lang_match_ft(lang, ft) then disable_module(mod, bufnr, lang) end end diff --git a/lua/nvim-treesitter/parsers.lua b/lua/nvim-treesitter/parsers.lua index 9097d335d..7fa09df91 100644 --- a/lua/nvim-treesitter/parsers.lua +++ b/lua/nvim-treesitter/parsers.lua @@ -64,6 +64,7 @@ list.bash = { url = "https://github.com/tree-sitter/tree-sitter-bash", files = { "src/parser.c", "src/scanner.cc" }, }, + used_by = { "zsh" }, filetype = 'sh' } @@ -205,10 +206,10 @@ list.nix = { } list.regex = { - install_info = { - url = "https://github.com/tree-sitter/tree-sitter-regex", - files = { "src/parser.c" } - } + install_info = { + url = "https://github.com/tree-sitter/tree-sitter-regex", + files = { "src/parser.c" } + } } local M = { @@ -216,12 +217,14 @@ local M = { } local ft_to_parsername = {} + for name, obj in pairs(M.list) do - if obj.filetype then - ft_to_parsername[obj.filetype] = name - else - ft_to_parsername[name] = name + 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) @@ -229,7 +232,17 @@ function M.ft_to_lang(ft) end function M.lang_to_ft(lang) - return M.list[lang].filetype or lang + local obj = M.list[lang] + return vim.tbl_flatten({{obj.filetype or lang}, obj.used_by or {}}) +end + +function M.lang_match_ft(lang, ft) + for _, f in pairs(M.lang_to_ft(lang)) do + if ft == f then + return true + end + end + return false end function M.available_parsers() |
