fix(filetype): source ftdetect/* after creating scripts.vim autocmds (#29445)

This commit is contained in:
zeertzjq 2024-06-22 21:17:36 +08:00 committed by GitHub
parent 6796f7cf61
commit 5a8a34dafa
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 41 additions and 15 deletions

View File

@ -39,15 +39,6 @@ vim.api.nvim_create_autocmd({ 'BufRead', 'BufNewFile', 'StdinReadPost' }, {
end,
})
-- These *must* be sourced after the autocommand above is created
if not vim.g.did_load_ftdetect then
vim.cmd([[
augroup filetypedetect
runtime! ftdetect/*.{vim,lua}
augroup END
]])
end
-- Set up the autocmd for user scripts.vim
vim.api.nvim_create_autocmd({ 'BufRead', 'BufNewFile' }, {
group = 'filetypedetect',
@ -62,3 +53,10 @@ vim.api.nvim_create_autocmd('StdinReadPost', {
if not vim.g.ft_ignore_pat then
vim.g.ft_ignore_pat = '\\.\\(Z\\|gz\\|bz2\\|zip\\|tgz\\)$'
end
-- These *must* be sourced after the autocommands above are created
vim.cmd([[
augroup filetypedetect
runtime! ftdetect/*.{vim,lua}
augroup END
]])

View File

@ -1325,31 +1325,59 @@ describe('runtime:', function()
end)
it("loads ftdetect/*.{vim,lua} respecting 'rtp' order", function()
local ftdetect_folder = table.concat({ xconfig, 'nvim', 'ftdetect' }, pathsep)
local after_ftdetect_folder = table.concat({ xconfig, 'nvim', 'after', 'ftdetect' }, pathsep)
local rtp_folder = table.concat({ xconfig, 'nvim' }, pathsep)
local after_rtp_folder = table.concat({ rtp_folder, 'after' }, pathsep)
local ftdetect_folder = table.concat({ rtp_folder, 'ftdetect' }, pathsep)
local after_ftdetect_folder = table.concat({ after_rtp_folder, 'ftdetect' }, pathsep)
mkdir_p(ftdetect_folder)
mkdir_p(after_ftdetect_folder)
finally(function()
rmdir(ftdetect_folder)
rmdir(after_ftdetect_folder)
end)
write_file(table.concat({ rtp_folder, 'scripts.vim' }, pathsep), [[let g:aseq ..= 'S']])
write_file(table.concat({ after_rtp_folder, 'scripts.vim' }, pathsep), [[let g:aseq ..= 's']])
-- A .lua file is loaded after a .vim file if they only differ in extension.
-- All files in after/ftdetect/ are loaded after all files in ftdetect/.
write_file(table.concat({ ftdetect_folder, 'new-ft.vim' }, pathsep), [[let g:seq ..= 'A']])
write_file(
table.concat({ ftdetect_folder, 'new-ft.vim' }, pathsep),
[[
let g:seq ..= 'A'
autocmd BufRead,BufNewFile FTDETECT let g:aseq ..= 'A'
]]
)
write_file(
table.concat({ ftdetect_folder, 'new-ft.lua' }, pathsep),
[[vim.g.seq = vim.g.seq .. 'B']]
[[
vim.g.seq = vim.g.seq .. 'B'
vim.api.nvim_create_autocmd({ 'BufRead', 'BufNewFile' }, {
pattern = 'FTDETECT',
command = "let g:aseq ..= 'B'",
})
]]
)
write_file(
table.concat({ after_ftdetect_folder, 'new-ft.vim' }, pathsep),
[[let g:seq ..= 'a']]
[[
let g:seq ..= 'a'
autocmd BufRead,BufNewFile FTDETECT let g:aseq ..= 'a'
]]
)
write_file(
table.concat({ after_ftdetect_folder, 'new-ft.lua' }, pathsep),
[[vim.g.seq = vim.g.seq .. 'b']]
[[
vim.g.seq = vim.g.seq .. 'b'
vim.api.nvim_create_autocmd({ 'BufRead', 'BufNewFile' }, {
pattern = 'FTDETECT',
command = "let g:aseq ..= 'b'",
})
]]
)
clear { args_rm = { '-u' }, args = { '--cmd', 'let g:seq = ""' }, env = xenv }
eq('ABab', eval('g:seq'))
command('let g:aseq = ""')
command('edit FTDETECT')
eq('SsABab', eval('g:aseq'))
end)
end)