fix(filetype): don't use fnamemodify() with :e for extension (#27976)

Use pattern matching instead, as fnamemodify() with :e produces an empty
string when the file name only has an extension, leading to differences
in behavior from Vim.

Related #16955 #27972
This commit is contained in:
zeertzjq 2024-03-26 13:31:37 +08:00 committed by GitHub
parent 00e71d3da3
commit d6f406db45
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -1472,7 +1472,6 @@ local filename = {
['bash.bashrc'] = detect.bash, ['bash.bashrc'] = detect.bash,
bashrc = detect.bash, bashrc = detect.bash,
['.bashrc'] = detect.bash, ['.bashrc'] = detect.bash,
['.env'] = detect.sh,
['.kshrc'] = detect.ksh, ['.kshrc'] = detect.ksh,
['.profile'] = detect.sh, ['.profile'] = detect.sh,
['/etc/profile'] = detect.sh, ['/etc/profile'] = detect.sh,
@ -2387,7 +2386,9 @@ function M.match(args)
end end
-- Next, check file extension -- Next, check file extension
local ext = fn.fnamemodify(name, ':e') -- Don't use fnamemodify() with :e modifier here,
-- as that's empty when there is only an extension.
local ext = name:match('%.([^.]-)$') or ''
ft, on_detect = dispatch(extension[ext], path, bufnr) ft, on_detect = dispatch(extension[ext], path, bufnr)
if ft then if ft then
return ft, on_detect return ft, on_detect