diff options
author | zeertzjq <zeertzjq@outlook.com> | 2024-07-19 12:57:56 +0800 |
---|---|---|
committer | zeertzjq <zeertzjq@outlook.com> | 2024-07-19 14:42:02 +0800 |
commit | f67a7365afacfad3f05e7aaca0bb2538a6e9f125 (patch) | |
tree | ace5221035955d16ee50afe799f841201d8065a9 | |
parent | 44f871a3cb7b0d40ebef0210d0e7cccf8ecdcda9 (diff) | |
download | rneovim-f67a7365afacfad3f05e7aaca0bb2538a6e9f125.tar.gz rneovim-f67a7365afacfad3f05e7aaca0bb2538a6e9f125.tar.bz2 rneovim-f67a7365afacfad3f05e7aaca0bb2538a6e9f125.zip |
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
https://github.com/vim/vim/commit/37853b7de31ef34153fe76aa2b740d517ed0e5d4
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
https://github.com/vim/vim/commit/7347642633eb2de23a78c51a4388c9080440eec4
Co-authored-by: igna_martinoli <ignamartinoli@protonmail.com>
Co-authored-by: clason <c.clason@uni-graz.at>
-rw-r--r-- | runtime/lua/vim/filetype/detect.lua | 14 | ||||
-rw-r--r-- | test/old/testdir/test_filetype.vim | 38 |
2 files changed, 42 insertions, 10 deletions
diff --git a/runtime/lua/vim/filetype/detect.lua b/runtime/lua/vim/filetype/detect.lua index 95e55ebb21..1fe7db0e1f 100644 --- a/runtime/lua/vim/filetype/detect.lua +++ b/runtime/lua/vim/filetype/detect.lua @@ -1116,6 +1116,8 @@ function M.perl(path, bufnr) end end +local prolog_patterns = { '^%s*:%-', '^%s*%%+%s', '^%s*%%+$', '^%s*/%*', '%.%s*$' } + --- @type vim.filetype.mapfn function M.pl(_, bufnr) 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; -- require a blank after the '%' because Perl uses "%list" and "%translate" local line = nextnonblank(bufnr, 1) - if - line and line:find(':%-') - or matchregex(line, [[\c\<prolog\>]]) - or findany(line, { '^%s*%%+%s', '^%s*%%+$', '^%s*/%*' }) - then + if line and matchregex(line, [[\c\<prolog\>]]) or findany(line, prolog_patterns) then return 'prolog' else return 'perl' @@ -1232,11 +1230,7 @@ function M.proto(_, bufnr) -- Recognize Prolog by specific text in the first non-empty line; -- require a blank after the '%' because Perl uses "%list" and "%translate" local line = nextnonblank(bufnr, 1) - if - line and line:find(':%-') - or matchregex(line, [[\c\<prolog\>]]) - or findany(line, { '^%s*%%+%s', '^%s*%%+$', '^%s*/%*' }) - then + if line and matchregex(line, [[\c\<prolog\>]]) or findany(line, prolog_patterns) then return 'prolog' end end diff --git a/test/old/testdir/test_filetype.vim b/test/old/testdir/test_filetype.vim index aa522c3098..ba7836cd4f 100644 --- a/test/old/testdir/test_filetype.vim +++ b/test/old/testdir/test_filetype.vim @@ -2600,6 +2600,44 @@ func Test_pro_file() call assert_equal('prolog', &filetype) 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 endfunc |