diff options
author | Bram Moolenaar <Bram@vim.org> | 2022-06-30 16:25:21 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2022-06-30 16:25:21 +0100 |
commit | cdbfc6dbab1d63aa56af316d6b13e37939e7f7a8 (patch) | |
tree | af16e32444f170534f389fdefcac4f90409277f9 | |
parent | d25f003342aca9889067f2e839963dfeccf1fe05 (diff) | |
download | vim-git-9.0.0012.tar.gz |
patch 9.0.0012: signature files not detected properlyv9.0.0012
Problem: Signature files not detected properly.
Solution: Add a function to better detect signature files. (Doug Kearns)
-rw-r--r-- | runtime/autoload/dist/ft.vim | 23 | ||||
-rw-r--r-- | runtime/doc/filetype.txt | 1 | ||||
-rw-r--r-- | runtime/filetype.vim | 4 | ||||
-rw-r--r-- | src/testdir/test_filetype.vim | 56 | ||||
-rw-r--r-- | src/version.c | 2 |
5 files changed, 82 insertions, 4 deletions
diff --git a/runtime/autoload/dist/ft.vim b/runtime/autoload/dist/ft.vim index 5f48f4b10..a96bdf5e7 100644 --- a/runtime/autoload/dist/ft.vim +++ b/runtime/autoload/dist/ft.vim @@ -459,7 +459,7 @@ export def FTmm() setf nroff enddef -# Returns true if file content looks like LambdaProlog +# Returns true if file content looks like LambdaProlog module def IsLProlog(): bool # skip apparent comments and blank lines, what looks like # LambdaProlog comment may be RAPID header @@ -848,6 +848,27 @@ export def FTperl(): number return 0 enddef +# LambdaProlog and Standard ML signature files +export def FTsig() + if exists("g:filetype_sig") + exe "setf " .. g:filetype_sig + return + endif + + var lprolog_comment = '^\s*\%(/\*\|%\)' + var lprolog_keyword = '^\s*sig\s\+\a' + var sml_comment = '^\s*(\*' + var sml_keyword = '^\s*\%(signature\|structure\)\s\+\a' + + var line = getline(nextnonblank(1)) + + if line =~ lprolog_comment || line =~# lprolog_keyword + setf lprolog + elseif line =~ sml_comment || line =~# sml_keyword + setf sml + endif +enddef + export def FTsys() if exists("g:filetype_sys") exe "setf " .. g:filetype_sys diff --git a/runtime/doc/filetype.txt b/runtime/doc/filetype.txt index 282a7966c..90ae3e7ac 100644 --- a/runtime/doc/filetype.txt +++ b/runtime/doc/filetype.txt @@ -157,6 +157,7 @@ variables can be used to overrule the filetype used for certain extensions: *.pp g:filetype_pp |ft-pascal-syntax| *.prg g:filetype_prg *.r g:filetype_r + *.sig g:filetype_sig *.sql g:filetype_sql |ft-sql-syntax| *.src g:filetype_src *.sys g:filetype_sys diff --git a/runtime/filetype.vim b/runtime/filetype.vim index 1648e82ab..c7c6eab40 100644 --- a/runtime/filetype.vim +++ b/runtime/filetype.vim @@ -997,8 +997,8 @@ au BufNewFile,BufRead *.latte,*.lte setf latte " Limits au BufNewFile,BufRead */etc/limits,*/etc/*limits.conf,*/etc/*limits.d/*.conf setf limits -" LambdaProlog (see dist#ft#FTmod for *.mod) -au BufNewFile,BufRead *.sig setf lprolog +" LambdaProlog or SML (see dist#ft#FTmod for *.mod) +au BufNewFile,BufRead *.sig call dist#ft#FTsig() " LDAP LDIF au BufNewFile,BufRead *.ldif setf ldif diff --git a/src/testdir/test_filetype.vim b/src/testdir/test_filetype.vim index d8ddeff25..eba95cf12 100644 --- a/src/testdir/test_filetype.vim +++ b/src/testdir/test_filetype.vim @@ -313,7 +313,6 @@ let s:filename_checks = { \ 'lotos': ['file.lot', 'file.lotos'], \ 'lout': ['file.lou', 'file.lout'], \ 'lpc': ['file.lpc', 'file.ulpc'], - \ 'lprolog': ['file.sig'], \ 'lsl': ['file.lsl'], \ 'lss': ['file.lss'], \ 'lua': ['file.lua', 'file.rockspec', 'file.nse'], @@ -1760,4 +1759,59 @@ func Test_cls_file() filetype off endfunc +func Test_sig_file() + filetype on + + call writefile(['this is neither Lambda Prolog nor SML'], 'Xfile.sig') + split Xfile.sig + call assert_equal('', &filetype) + bwipe! + + " Test dist#ft#FTsig() + + let g:filetype_sig = 'sml' + split Xfile.sig + call assert_equal('sml', &filetype) + bwipe! + unlet g:filetype_sig + + " Lambda Prolog + + call writefile(['sig foo.'], 'Xfile.sig') + split Xfile.sig + call assert_equal('lprolog', &filetype) + bwipe! + + call writefile(['/* ... */'], 'Xfile.sig') + split Xfile.sig + call assert_equal('lprolog', &filetype) + bwipe! + + call writefile(['% ...'], 'Xfile.sig') + split Xfile.sig + call assert_equal('lprolog', &filetype) + bwipe! + + " SML signature file + + call writefile(['signature FOO ='], 'Xfile.sig') + split Xfile.sig + call assert_equal('sml', &filetype) + bwipe! + + call writefile(['structure FOO ='], 'Xfile.sig') + split Xfile.sig + call assert_equal('sml', &filetype) + bwipe! + + call writefile(['(* ... *)'], 'Xfile.sig') + split Xfile.sig + call assert_equal('sml', &filetype) + bwipe! + + call delete('Xfile.sig') + filetype off +endfunc + + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/version.c b/src/version.c index 11fd817ed..116113bbb 100644 --- a/src/version.c +++ b/src/version.c @@ -736,6 +736,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 12, +/**/ 11, /**/ 10, |