vim-patch:9.2.0489: filetype: some Objective-C files are not recognized

Problem:  filetype: some Objective-C files are not recognized
Solution: Add g:filetype_mm override variable, improve the objective c
          pattern detection (Keith Smiley).

closes: vim/vim#20221

bc7f736a39

Co-authored-by: Keith Smiley <keithbsmiley@gmail.com>
This commit is contained in:
zeertzjq
2026-05-16 16:23:22 +08:00
parent 1813e1c089
commit 925b14ce2b
3 changed files with 37 additions and 1 deletions

View File

@@ -158,6 +158,7 @@ variables can be used to overrule the filetype used for certain extensions:
`*.int` g:filetype_int
`*.lsl` g:filetype_lsl
`*.m` g:filetype_m |ft-mathematica-syntax|
`*.mm` g:filetype_mm
`*.mac` g:filetype_mac
`*[mM]makefile,*.mk,*.mak,[mM]akefile*`
g:make_flavor |ft-make-syntax|

View File

@@ -1258,8 +1258,12 @@ end
--- @type vim.filetype.mapfn
function M.mm(_, bufnr)
if vim.g.filetype_mm then
return vim.g.filetype_mm
end
for _, line in ipairs(getlines(bufnr, 1, 20)) do
if matchregex(line, [[\c^\s*\(#\s*\(include\|import\)\>\|@import\>\|/\*\)]]) then
if matchregex(line, [[\c^\s*\(//\|#\s*\(include\|import\)\>\|@import\>\|/\*\)]]) then
return 'objcpp'
end
end

View File

@@ -2054,6 +2054,37 @@ func Test_m4_file()
endtry
endfunc
func Test_mm_file()
filetype on
call writefile(['#import "test.h"'], 'Xfile.mm', 'D')
split Xfile.mm
call assert_equal('objcpp', &filetype)
bwipe!
call writefile(['// Objective-C++ line comment'], 'Xfile.mm', 'D')
split Xfile.mm
call assert_equal('objcpp', &filetype)
bwipe!
call writefile(['.TH VIM 1 "YYYY Mth DD"'], 'Xfile.mm', 'D')
split Xfile.mm
call assert_equal('nroff', &filetype)
bwipe!
try
let g:filetype_mm = 'objcpp'
call writefile(['.TH VIM 1 "YYYY Mth DD"'], 'Xfile_override.mm', 'D')
split Xfile_override.mm
call assert_equal('objcpp', &filetype)
bwipe!
finally
unlet! g:filetype_mm
endtry
filetype off
endfunc
func Test_mod_file()
filetype on