vim-patch:9.1.0602: filetype: Prolog detection can be improved

Problem:  filetype: Prolog detection can be improved
Solution: update the prolog detection regex
          (igna_martinoli)

related: vim/vim#10835
related: vim/vim#15206
closes: vim/vim#15253

37853b7de3

N/A patch:

vim-patch:7347642: runtime(filetype): Fix Prolog file detection regex

Problem: filetype: .pro file detection for Prolog is broken
Solution: fixed the regex to only match on the tested
          cases (igna_martinoli)

fixes: vim/vim#10835
closes: vim/vim#15206

7347642633

Co-authored-by: igna_martinoli <ignamartinoli@protonmail.com>
Co-authored-by: clason <c.clason@uni-graz.at>
This commit is contained in:
zeertzjq 2024-07-19 12:57:56 +08:00
parent 44f871a3cb
commit f67a7365af
2 changed files with 42 additions and 10 deletions

View File

@ -1116,6 +1116,8 @@ function M.perl(path, bufnr)
end end
end end
local prolog_patterns = { '^%s*:%-', '^%s*%%+%s', '^%s*%%+$', '^%s*/%*', '%.%s*$' }
--- @type vim.filetype.mapfn --- @type vim.filetype.mapfn
function M.pl(_, bufnr) function M.pl(_, bufnr)
if vim.g.filetype_pl then if vim.g.filetype_pl then
@ -1124,11 +1126,7 @@ function M.pl(_, bufnr)
-- Recognize Prolog by specific text in the first non-empty line; -- Recognize Prolog by specific text in the first non-empty line;
-- require a blank after the '%' because Perl uses "%list" and "%translate" -- require a blank after the '%' because Perl uses "%list" and "%translate"
local line = nextnonblank(bufnr, 1) local line = nextnonblank(bufnr, 1)
if if line and matchregex(line, [[\c\<prolog\>]]) or findany(line, prolog_patterns) then
line and line:find(':%-')
or matchregex(line, [[\c\<prolog\>]])
or findany(line, { '^%s*%%+%s', '^%s*%%+$', '^%s*/%*' })
then
return 'prolog' return 'prolog'
else else
return 'perl' return 'perl'
@ -1232,11 +1230,7 @@ function M.proto(_, bufnr)
-- Recognize Prolog by specific text in the first non-empty line; -- Recognize Prolog by specific text in the first non-empty line;
-- require a blank after the '%' because Perl uses "%list" and "%translate" -- require a blank after the '%' because Perl uses "%list" and "%translate"
local line = nextnonblank(bufnr, 1) local line = nextnonblank(bufnr, 1)
if if line and matchregex(line, [[\c\<prolog\>]]) or findany(line, prolog_patterns) then
line and line:find(':%-')
or matchregex(line, [[\c\<prolog\>]])
or findany(line, { '^%s*%%+%s', '^%s*%%+$', '^%s*/%*' })
then
return 'prolog' return 'prolog'
end end
end end

View File

@ -2600,6 +2600,44 @@ func Test_pro_file()
call assert_equal('prolog', &filetype) call assert_equal('prolog', &filetype)
bwipe! bwipe!
" IDL
call writefile(['x = findgen(100)/10'], 'Xfile.pro', 'D')
split Xfile.pro
call assert_equal('idlang', &filetype)
filetype off
endfunc
func Test_pl_file()
filetype on
"Prolog
call writefile([':-module(test/1,'], 'Xfile.pl', 'D')
split Xfile.pl
call assert_equal('prolog', &filetype)
bwipe!
call writefile(['% comment'], 'Xfile.pl', 'D')
split Xfile.pl
call assert_equal('prolog', &filetype)
bwipe!
call writefile(['/* multiline comment'], 'Xfile.pl', 'D')
split Xfile.pl
call assert_equal('prolog', &filetype)
bwipe!
call writefile(['rule(test, 1.7).'], 'Xfile.pl', 'D')
split Xfile.pl
call assert_equal('prolog', &filetype)
bwipe!
" Perl
call writefile(['%data = (1, 2, 3);'], 'Xfile.pl', 'D')
split Xfile.pl
call assert_equal('perl', &filetype)
filetype off filetype off
endfunc endfunc