From e9129eee494b57dde0ba9b4b7b11576c0feba888 Mon Sep 17 00:00:00 2001 From: Thomas Vigouroux Date: Tue, 20 Oct 2020 08:55:25 +0200 Subject: 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. --- lua/nvim-treesitter/languagetree.lua | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) (limited to 'lua') 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 -- cgit v1.2.3-70-g09d2