diff options
| author | Thomas Vigouroux <tomvig38@gmail.com> | 2020-10-20 08:55:25 +0200 |
|---|---|---|
| committer | Thomas Vigouroux <tomvig38@gmail.com> | 2020-10-21 08:36:23 +0200 |
| commit | e9129eee494b57dde0ba9b4b7b11576c0feba888 (patch) | |
| tree | 8cfc6e668d8141c240e85bdff73e594f36b93995 /lua | |
| parent | Add lua params (#605) (diff) | |
| download | nvim-treesitter-e9129eee494b57dde0ba9b4b7b11576c0feba888.tar nvim-treesitter-e9129eee494b57dde0ba9b4b7b11576c0feba888.tar.gz nvim-treesitter-e9129eee494b57dde0ba9b4b7b11576c0feba888.tar.bz2 nvim-treesitter-e9129eee494b57dde0ba9b4b7b11576c0feba888.tar.lz nvim-treesitter-e9129eee494b57dde0ba9b4b7b11576c0feba888.tar.xz nvim-treesitter-e9129eee494b57dde0ba9b4b7b11576c0feba888.tar.zst nvim-treesitter-e9129eee494b57dde0ba9b4b7b11576c0feba888.zip | |
fix(languagetree): avoid language self-injection
This avoids some stack overflows when a language includes itself.
This is a temporary solution, and will be addressed later when actually
managing our own parsers.
Diffstat (limited to 'lua')
| -rw-r--r-- | lua/nvim-treesitter/languagetree.lua | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/lua/nvim-treesitter/languagetree.lua b/lua/nvim-treesitter/languagetree.lua index fe8828154..31de88f8b 100644 --- a/lua/nvim-treesitter/languagetree.lua +++ b/lua/nvim-treesitter/languagetree.lua @@ -116,15 +116,22 @@ function LanguageTree:update() local seen = {} -- Update each child accordingly + -- TODO(vigoux): for now avoid languages that include themselves, will + -- be fixed when managing our own parsers for lang, ranges in pairs(injections) do - if not self.children[lang] then - self.children[lang] = LanguageTree.new(self.parser.bufnr, lang, true) - end - if self.children[lang] then - self.children[lang].parser:set_included_ranges(ranges) - self.children[lang]:update() - seen[lang] = true + if lang ~= self.parser.lang then + + if not self.children[lang] then + vim.api.nvim_err_writeln("Creating node for language " .. lang) + self.children[lang] = LanguageTree.new(self.parser.bufnr, lang, true) + end + + if self.children[lang] then + self.children[lang].parser:set_included_ranges(ranges) + self.children[lang]:update() + seen[lang] = true + end end end |
