fix(filetype): handle invalid bufnr in _getlines(), _getline() #36272

**Problem:**
`vim.filetype.match({ filename = 'a.sh' })` returns `nil` because
an invalid buffer ID is passed to `vim.api.nvim_buf_get_lines()`.
For filetypes like `csh`, `txt`, or any other extensions that call
`_getlines()` or `_getline()` to detect their filetypes, the same
issue occurs.

When only the `filename` argument is passed, an error is raised
inside a `pcall()` that wraps the filetype detection function,
causing it to return no value without showing any error message.

**Solution:**
Validate the `bufnr` value in `_getlines()` and `_getline()`.
This commit is contained in:
xvzc
2025-10-24 09:34:12 +09:00
committed by GitHub
parent c05ff026bc
commit 095b9f98f3
2 changed files with 28 additions and 0 deletions

View File

@@ -55,6 +55,26 @@ describe('vim.filetype', function()
)
end)
it('works with filenames that call _getlines() internally #36272', function()
eq(
'sh',
exec_lua(function()
vim.g.ft_ignore_pat = '\\.\\(Z\\|gz\\|bz2\\|zip\\|tgz\\)$'
return vim.filetype.match({ filename = 'main.sh' })
end)
)
end)
it('works with filenames that call _getline() internally #36272', function()
eq(
'text',
exec_lua(function()
vim.g.ft_ignore_pat = '\\.\\(Z\\|gz\\|bz2\\|zip\\|tgz\\)$'
return vim.filetype.match({ filename = 'main.txt' })
end)
)
end)
it('works with filenames', function()
eq(
'nim',