mirror of
https://github.com/neovim/neovim.git
synced 2026-01-15 17:46:41 +10:00
[Backport release-0.7] fix(treesitter): create new parser if language is not the same as cached parser (#18220)
* fix(treesitter): create new parser if language is not the same as cached parser Fixes #18148 (cherry picked from commit8e35894fc2) * test: create new parser in vim.treesitter.get_parser() when filetype changes (cherry picked from commit30e7b3f0a2) Co-authored-by: Chinmay Dalal <dalal.chinmay.0101@gmail.com>
This commit is contained in:
committed by
GitHub
parent
7f8faac39e
commit
f7e2ad7915
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user