fix(api): vim.filetype.get_option() (#22753)

- Fix a bug in the cache
- Set some buffer options on the dummy buffer
This commit is contained in:
Lewis Russell 2023-03-22 16:49:04 +00:00 committed by GitHub
parent 3285cd6ecc
commit 28cfcf5126
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 19 additions and 9 deletions

View File

@ -3,7 +3,7 @@ local api = vim.api
local M = {}
local function get_ftplugin_runtime(filetype)
return api.nvim__get_runtime({
local files = api.nvim__get_runtime({
string.format('ftplugin/%s.vim', filetype),
string.format('ftplugin/%s_*.vim', filetype),
string.format('ftplugin/%s/*.vim', filetype),
@ -11,6 +11,15 @@ local function get_ftplugin_runtime(filetype)
string.format('ftplugin/%s_*.lua', filetype),
string.format('ftplugin/%s/*.lua', filetype),
}, true, {}) --[[@as string[] ]]
local r = {} ---@type string[]
for _, f in ipairs(files) do
-- VIMRUNTIME should be static so shouldn't need to worry about it changing
if not vim.startswith(f, vim.env.VIMRUNTIME) then
r[#r + 1] = f
end
end
return r
end
-- Keep track of ftplugin files
@ -52,14 +61,11 @@ local function update_ft_option_cache(filetype)
end
for _, f in ipairs(files) do
-- VIMRUNTIME should be static so shouldn't need to worry about it changing
if not vim.startswith(f, vim.env.VIMRUNTIME) then
local mtime = hash(f)
if ftplugin_cache[filetype][f] ~= mtime then
-- invalidate
ft_option_cache[filetype] = nil
ftplugin_cache[filetype][f] = mtime
end
local mtime = hash(f)
if ftplugin_cache[filetype][f] ~= mtime then
-- invalidate
ft_option_cache[filetype] = nil
ftplugin_cache[filetype][f] = mtime
end
end
end

View File

@ -111,6 +111,10 @@ static buf_T *do_ft_buf(char *filetype, aco_save_T *aco, Error *err)
// Set curwin/curbuf to buf and save a few things.
aucmd_prepbuf(aco, ftbuf);
set_option_value("bufhidden", 0L, "hide", OPT_LOCAL);
set_option_value("buftype", 0L, "nofile", OPT_LOCAL);
set_option_value("swapfile", 0L, NULL, OPT_LOCAL);
set_option_value("modeline", 0L, NULL, OPT_LOCAL); // 'nomodeline'
ftbuf->b_p_ft = xstrdup(filetype);