mirror of
https://github.com/neovim/neovim.git
synced 2024-12-19 18:55:14 -07:00
fix(treesitter): create new parser if language is not the same as cached parser (#18149)
This commit is contained in:
parent
f4f593b333
commit
116a3f4683
@ -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)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user