mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
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#1525337853b7de3
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#152067347642633
Co-authored-by: igna_martinoli <ignamartinoli@protonmail.com> Co-authored-by: clason <c.clason@uni-graz.at>
This commit is contained in:
parent
44f871a3cb
commit
f67a7365af
@ -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
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user