aboutsummaryrefslogtreecommitdiff
path: root/runtime/lua/vim/treesitter.lua
diff options
context:
space:
mode:
authorLuuk van Baal <luukvbaal@gmail.com>2025-02-15 01:53:41 +0100
committerChristian Clason <ch.clason+github@icloud.com>2025-02-19 19:11:55 +0100
commita0b52e7cb3d211e30c21464c4a4f4acecd6418c9 (patch)
tree95b73831fde6183b55520d84a165ba36544216aa /runtime/lua/vim/treesitter.lua
parenta422f3393e93ae19d679520f43f38bd1c53ddf06 (diff)
downloadrneovim-a0b52e7cb3d211e30c21464c4a4f4acecd6418c9.tar.gz
rneovim-a0b52e7cb3d211e30c21464c4a4f4acecd6418c9.tar.bz2
rneovim-a0b52e7cb3d211e30c21464c4a4f4acecd6418c9.zip
fix(treesitter)!: enforce buffer is loaded when creating parser
Problem: `vim.treesitter._create_parser()` silently loads the buffer, bypassing the swapfile prompt. Solution: Error for an unloaded buffer, ensure buffer is loaded in `vim.treesitter.start()` instead.
Diffstat (limited to 'runtime/lua/vim/treesitter.lua')
-rw-r--r--runtime/lua/vim/treesitter.lua13
1 files changed, 11 insertions, 2 deletions
diff --git a/runtime/lua/vim/treesitter.lua b/runtime/lua/vim/treesitter.lua
index 10638e10d8..44372415fd 100644
--- a/runtime/lua/vim/treesitter.lua
+++ b/runtime/lua/vim/treesitter.lua
@@ -34,8 +34,6 @@ M.minimum_language_version = vim._ts_get_minimum_language_version()
function M._create_parser(bufnr, lang, opts)
bufnr = vim._resolve_bufnr(bufnr)
- vim.fn.bufload(bufnr)
-
local self = LanguageTree.new(bufnr, lang, opts)
local function bytes_cb(_, ...)
@@ -102,6 +100,9 @@ function M.get_parser(bufnr, lang, opts)
return nil, err_msg
end
elseif parsers[bufnr] == nil or parsers[bufnr]:lang() ~= lang then
+ if not api.nvim_buf_is_loaded(bufnr) then
+ error(('Buffer %s must be loaded to create parser'):format(bufnr))
+ end
local parser = vim.F.npcall(M._create_parser, bufnr, lang, opts)
if not parser then
local err_msg =
@@ -415,6 +416,14 @@ end
---@param lang string? Language of the parser (default: from buffer filetype)
function M.start(bufnr, lang)
bufnr = vim._resolve_bufnr(bufnr)
+ -- Ensure buffer is loaded. `:edit` over `bufload()` to show swapfile prompt.
+ if not api.nvim_buf_is_loaded(bufnr) then
+ if api.nvim_buf_get_name(bufnr) ~= '' then
+ pcall(api.nvim_buf_call, bufnr, vim.cmd.edit)
+ else
+ vim.fn.bufload(bufnr)
+ end
+ end
local parser = assert(M.get_parser(bufnr, lang, { error = false }))
M.highlighter.new(parser)
end