mirror of
				https://github.com/neovim/neovim.git
				synced 2025-11-04 09:44:31 +00:00 
			
		
		
		
	fix(filetype): source ftdetect/* after creating scripts.vim autocmds (#29445)
This commit is contained in:
		@@ -39,15 +39,6 @@ vim.api.nvim_create_autocmd({ 'BufRead', 'BufNewFile', 'StdinReadPost' }, {
 | 
				
			|||||||
  end,
 | 
					  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
 | 
					-- Set up the autocmd for user scripts.vim
 | 
				
			||||||
vim.api.nvim_create_autocmd({ 'BufRead', 'BufNewFile' }, {
 | 
					vim.api.nvim_create_autocmd({ 'BufRead', 'BufNewFile' }, {
 | 
				
			||||||
  group = 'filetypedetect',
 | 
					  group = 'filetypedetect',
 | 
				
			||||||
@@ -62,3 +53,10 @@ vim.api.nvim_create_autocmd('StdinReadPost', {
 | 
				
			|||||||
if not vim.g.ft_ignore_pat then
 | 
					if not vim.g.ft_ignore_pat then
 | 
				
			||||||
  vim.g.ft_ignore_pat = '\\.\\(Z\\|gz\\|bz2\\|zip\\|tgz\\)$'
 | 
					  vim.g.ft_ignore_pat = '\\.\\(Z\\|gz\\|bz2\\|zip\\|tgz\\)$'
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- These *must* be sourced after the autocommands above are created
 | 
				
			||||||
 | 
					vim.cmd([[
 | 
				
			||||||
 | 
					  augroup filetypedetect
 | 
				
			||||||
 | 
					  runtime! ftdetect/*.{vim,lua}
 | 
				
			||||||
 | 
					  augroup END
 | 
				
			||||||
 | 
					]])
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1325,31 +1325,59 @@ describe('runtime:', function()
 | 
				
			|||||||
  end)
 | 
					  end)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  it("loads ftdetect/*.{vim,lua} respecting 'rtp' order", function()
 | 
					  it("loads ftdetect/*.{vim,lua} respecting 'rtp' order", function()
 | 
				
			||||||
    local ftdetect_folder = table.concat({ xconfig, 'nvim', 'ftdetect' }, pathsep)
 | 
					    local rtp_folder = table.concat({ xconfig, 'nvim' }, pathsep)
 | 
				
			||||||
    local after_ftdetect_folder = table.concat({ xconfig, 'nvim', 'after', 'ftdetect' }, 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(ftdetect_folder)
 | 
				
			||||||
    mkdir_p(after_ftdetect_folder)
 | 
					    mkdir_p(after_ftdetect_folder)
 | 
				
			||||||
    finally(function()
 | 
					    finally(function()
 | 
				
			||||||
      rmdir(ftdetect_folder)
 | 
					      rmdir(ftdetect_folder)
 | 
				
			||||||
      rmdir(after_ftdetect_folder)
 | 
					      rmdir(after_ftdetect_folder)
 | 
				
			||||||
    end)
 | 
					    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.
 | 
					    -- 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/.
 | 
					    -- 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(
 | 
					    write_file(
 | 
				
			||||||
      table.concat({ ftdetect_folder, 'new-ft.lua' }, pathsep),
 | 
					      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(
 | 
					    write_file(
 | 
				
			||||||
      table.concat({ after_ftdetect_folder, 'new-ft.vim' }, pathsep),
 | 
					      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(
 | 
					    write_file(
 | 
				
			||||||
      table.concat({ after_ftdetect_folder, 'new-ft.lua' }, pathsep),
 | 
					      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 }
 | 
					    clear { args_rm = { '-u' }, args = { '--cmd', 'let g:seq = ""' }, env = xenv }
 | 
				
			||||||
    eq('ABab', eval('g:seq'))
 | 
					    eq('ABab', eval('g:seq'))
 | 
				
			||||||
 | 
					    command('let g:aseq = ""')
 | 
				
			||||||
 | 
					    command('edit FTDETECT')
 | 
				
			||||||
 | 
					    eq('SsABab', eval('g:aseq'))
 | 
				
			||||||
  end)
 | 
					  end)
 | 
				
			||||||
end)
 | 
					end)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user