diff options
author | Chinmay Dalal <dalal.chinmay.0101@gmail.com> | 2022-04-22 19:45:28 +0530 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-22 16:15:28 +0200 |
commit | 116a3f4683de501228b422f67cf1030bee78759c (patch) | |
tree | b17a4371a99d6dfc8c1f9473462a5207ee35cd7a | |
parent | f4f593b3331a29590355322884d5b89e8660e5e8 (diff) | |
download | rneovim-116a3f4683de501228b422f67cf1030bee78759c.tar.gz rneovim-116a3f4683de501228b422f67cf1030bee78759c.tar.bz2 rneovim-116a3f4683de501228b422f67cf1030bee78759c.zip |
fix(treesitter): create new parser if language is not the same as cached parser (#18149)
-rw-r--r-- | runtime/lua/vim/treesitter.lua | 2 | ||||
-rw-r--r-- | test/functional/treesitter/language_spec.lua | 11 |
2 files changed, 12 insertions, 1 deletions
diff --git a/runtime/lua/vim/treesitter.lua b/runtime/lua/vim/treesitter.lua index f9d539f028..55398d8180 100644 --- a/runtime/lua/vim/treesitter.lua +++ b/runtime/lua/vim/treesitter.lua @@ -90,7 +90,7 @@ function M.get_parser(bufnr, lang, opts) lang = a.nvim_buf_get_option(bufnr, "filetype") end - if parsers[bufnr] == nil then + if parsers[bufnr] == nil or parsers[bufnr]:lang() ~= lang then parsers[bufnr] = M._create_parser(bufnr, lang, opts) end diff --git a/test/functional/treesitter/language_spec.lua b/test/functional/treesitter/language_spec.lua index afb17dd2cf..84e4fa5c49 100644 --- a/test/functional/treesitter/language_spec.lua +++ b/test/functional/treesitter/language_spec.lua @@ -2,6 +2,7 @@ local helpers = require('test.functional.helpers')(after_each) local clear = helpers.clear local eq = helpers.eq +local command = helpers.command local exec_lua = helpers.exec_lua local pcall_err = helpers.pcall_err local matches = helpers.matches @@ -67,5 +68,15 @@ describe('treesitter API', function() end eq({true,true}, {has_named,has_anonymous}) end) + + it('checks if vim.treesitter.get_parser tries to create a new parser on filetype change', function () + command("set filetype=c") + -- Should not throw an error when filetype is c + eq('c', exec_lua("return vim.treesitter.get_parser(0):lang()")) + command("set filetype=borklang") + -- Should throw an error when filetype changes to borklang + eq("Error executing lua: .../language.lua:0: no parser for 'borklang' language, see :help treesitter-parsers", + pcall_err(exec_lua, "new_parser = vim.treesitter.get_parser(0)")) + end) end) |