fix(treesitter): don't trample parsers when filetype!=lang

This allows vim.treesitter.show_tree() to work on buffers where the
filetype does not match the parser language name e.g, bash/sh.
This commit is contained in:
Lewis Russell 2023-02-09 16:08:22 +00:00
parent f5bad01869
commit 8a985d12dd
2 changed files with 7 additions and 5 deletions

View File

@ -96,11 +96,13 @@ function M.get_parser(bufnr, lang, opts)
if bufnr == nil or bufnr == 0 then
bufnr = a.nvim_get_current_buf()
end
if lang == nil then
lang = a.nvim_buf_get_option(bufnr, 'filetype')
end
if parsers[bufnr] == nil or parsers[bufnr]:lang() ~= lang then
if parsers[bufnr] == nil then
lang = lang or a.nvim_buf_get_option(bufnr, 'filetype')
parsers[bufnr] = M._create_parser(bufnr, lang, opts)
elseif lang and parsers[bufnr]:lang() ~= lang then
-- Only try to create a new parser if lang is provided
-- and it doesn't match the stored parser
parsers[bufnr] = M._create_parser(bufnr, lang, opts)
end

View File

@ -82,7 +82,7 @@ describe('treesitter language API', function()
command("set filetype=borklang")
-- Should throw an error when filetype changes to borklang
eq(".../language.lua:0: no parser for 'borklang' language, see :help treesitter-parsers",
pcall_err(exec_lua, "new_parser = vim.treesitter.get_parser(0)"))
pcall_err(exec_lua, "new_parser = vim.treesitter.get_parser(0, 'borklang')"))
end)
it('retrieve the tree given a range', function ()