aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLewis Russell <lewis6991@gmail.com>2023-02-09 16:08:22 +0000
committerLewis Russell <lewis6991@gmail.com>2023-02-10 16:15:56 +0000
commit8a985d12dd6b4a5a4ba825939f36b7b1a324d849 (patch)
tree4de39129b7f59b0093552edeee82de8d686f17ac
parentf5bad01869df449cb1e4ae7f264bcd5c8150f606 (diff)
downloadrneovim-8a985d12dd6b4a5a4ba825939f36b7b1a324d849.tar.gz
rneovim-8a985d12dd6b4a5a4ba825939f36b7b1a324d849.tar.bz2
rneovim-8a985d12dd6b4a5a4ba825939f36b7b1a324d849.zip
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.
-rw-r--r--runtime/lua/vim/treesitter.lua10
-rw-r--r--test/functional/treesitter/language_spec.lua2
2 files changed, 7 insertions, 5 deletions
diff --git a/runtime/lua/vim/treesitter.lua b/runtime/lua/vim/treesitter.lua
index a15d3ec23c..4127198576 100644
--- a/runtime/lua/vim/treesitter.lua
+++ b/runtime/lua/vim/treesitter.lua
@@ -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
diff --git a/test/functional/treesitter/language_spec.lua b/test/functional/treesitter/language_spec.lua
index df45c9b384..51d8eb62f3 100644
--- a/test/functional/treesitter/language_spec.lua
+++ b/test/functional/treesitter/language_spec.lua
@@ -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 ()