diff options
author | Christian Clason <c.clason@uni-graz.at> | 2022-06-29 18:43:56 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-06-29 18:43:56 +0200 |
commit | 1eb9624666a8478d66e693c7f00fc633a6b1b8ca (patch) | |
tree | d0ff784074aab6781b5d702ace1eabbcc5c74140 | |
parent | ba583f820655d3d7cf4c85854c0359c54d49ae5a (diff) | |
download | rneovim-1eb9624666a8478d66e693c7f00fc633a6b1b8ca.tar.gz rneovim-1eb9624666a8478d66e693c7f00fc633a6b1b8ca.tar.bz2 rneovim-1eb9624666a8478d66e693c7f00fc633a6b1b8ca.zip |
vim-patch:9.0.0006: not all Visual Basic files are recognized (#19153)
Problem: Not all Visual Basic files are recognized.
Solution: Change detection of *.cls files. (Doug Kearns)
https://github.com/vim/vim/commit/8b5901e2f9466eb6f38f5b251e871f609f65e252
-rw-r--r-- | runtime/autoload/dist/ft.vim | 49 | ||||
-rw-r--r-- | runtime/doc/filetype.txt | 1 | ||||
-rw-r--r-- | runtime/filetype.vim | 13 | ||||
-rw-r--r-- | runtime/lua/vim/filetype/detect.lua | 13 | ||||
-rw-r--r-- | src/nvim/testdir/test_filetype.vim | 42 |
5 files changed, 92 insertions, 26 deletions
diff --git a/runtime/autoload/dist/ft.vim b/runtime/autoload/dist/ft.vim index 14dd88b7a8..e7f71e0f78 100644 --- a/runtime/autoload/dist/ft.vim +++ b/runtime/autoload/dist/ft.vim @@ -78,22 +78,30 @@ func dist#ft#FTbas() " most frequent FreeBASIC-specific keywords in distro files let fb_keywords = '\c^\s*\%(extern\|var\|enum\|private\|scope\|union\|byref\|operator\|constructor\|delete\|namespace\|public\|property\|with\|destructor\|using\)\>\%(\s*[:=(]\)\@!' - let fb_preproc = '\c^\s*\%(#\a\+\|option\s\+\%(byval\|dynamic\|escape\|\%(no\)\=gosub\|nokeyword\|private\|static\)\>\)' + let fb_preproc = '\c^\s*\%(' .. + \ '#\s*\a\+\|' .. + \ 'option\s\+\%(byval\|dynamic\|escape\|\%(no\)\=gosub\|nokeyword\|private\|static\)\>\|' .. + \ '\%(''\|rem\)\s*\$lang\>\|' .. + \ 'def\%(byte\|longint\|short\|ubyte\|uint\|ulongint\|ushort\)\>' .. + \ '\)' let fb_comment = "^\\s*/'" " OPTION EXPLICIT, without the leading underscore, is common to many dialects let qb64_preproc = '\c^\s*\%($\a\+\|option\s\+\%(_explicit\|_\=explicitarray\)\>\)' - let lines = getline(1, min([line("$"), 100])) - - if match(lines, fb_preproc) > -1 || match(lines, fb_comment) > -1 || match(lines, fb_keywords) > -1 - setf freebasic - elseif match(lines, qb64_preproc) > -1 - setf qb64 - elseif match(lines, s:ft_visual_basic_content) > -1 - setf vb - else - setf basic - endif + for lnum in range(1, min([line("$"), 100])) + let line = getline(lnum) + if line =~ s:ft_visual_basic_content + setf vb + return + elseif line =~ fb_preproc || line =~ fb_comment || line =~ fb_keywords + setf freebasic + return + elseif line =~ qb64_preproc + setf qb64 + return + endif + endfor + setf basic endfunc func dist#ft#FTbtm() @@ -131,6 +139,23 @@ func dist#ft#FTcfg() endif endfunc +func dist#ft#FTcls() + if exists("g:filetype_cls") + exe "setf " .. g:filetype_cls + return + endif + + if getline(1) =~ '^%' + setf tex + elseif getline(1)[0] == '#' && getline(1) =~ 'rexx' + setf rexx + elseif getline(1) == 'VERSION 1.0 CLASS' + setf vb + else + setf st + endif +endfunc + func dist#ft#FTlpc() if exists("g:lpc_syntax_for_c") let lnum = 1 diff --git a/runtime/doc/filetype.txt b/runtime/doc/filetype.txt index 0e28ddc545..cc9c6d1c05 100644 --- a/runtime/doc/filetype.txt +++ b/runtime/doc/filetype.txt @@ -141,6 +141,7 @@ variables can be used to overrule the filetype used for certain extensions: *.asp g:filetype_asp |ft-aspvbs-syntax| |ft-aspperl-syntax| *.bas g:filetype_bas |ft-basic-syntax| *.cfg g:filetype_cfg + *.cls g:filetype_cls *.csh g:filetype_csh |ft-csh-syntax| *.dat g:filetype_dat *.frm g:filetype_frm |ft-form-syntax| diff --git a/runtime/filetype.vim b/runtime/filetype.vim index 5ec49deb71..a094e6f78a 100644 --- a/runtime/filetype.vim +++ b/runtime/filetype.vim @@ -1794,16 +1794,11 @@ au BufNewFile,BufRead *.il,*.ils,*.cdf setf skill au BufNewFile,BufRead .slrnrc setf slrnrc au BufNewFile,BufRead *.score setf slrnsc -" Smalltalk (and TeX) +" Smalltalk au BufNewFile,BufRead *.st setf st -au BufNewFile,BufRead *.cls - \ if getline(1) =~ '^%' | - \ setf tex | - \ elseif getline(1)[0] == '#' && getline(1) =~ 'rexx' | - \ setf rexx | - \ else | - \ setf st | - \ endif + +" Smalltalk (and Rexx, TeX, and Visual Basic) +au BufNewFile,BufRead *.cls call dist#ft#FTcls() " Smarty templates au BufNewFile,BufRead *.tpl setf smarty diff --git a/runtime/lua/vim/filetype/detect.lua b/runtime/lua/vim/filetype/detect.lua index ddef27a0f0..342f947524 100644 --- a/runtime/lua/vim/filetype/detect.lua +++ b/runtime/lua/vim/filetype/detect.lua @@ -83,19 +83,19 @@ function M.bas(bufnr) local fb_keywords = [[\c^\s*\%(extern\|var\|enum\|private\|scope\|union\|byref\|operator\|constructor\|delete\|namespace\|public\|property\|with\|destructor\|using\)\>\%(\s*[:=(]\)\@!]] local fb_preproc = - [[\c^\s*\%(#\a\+\|option\s\+\%(byval\|dynamic\|escape\|\%(no\)\=gosub\|nokeyword\|private\|static\)\>\)]] + [[\c^\s*\%(#\s*\a\+\|option\s\+\%(byval\|dynamic\|escape\|\%(no\)\=gosub\|nokeyword\|private\|static\)\>\|\%(''\|rem\)\s*\$lang\>\|def\%(byte\|longint\|short\|ubyte\|uint\|ulongint\|ushort\)\>\)]] local fb_comment = "^%s*/'" -- OPTION EXPLICIT, without the leading underscore, is common to many dialects local qb64_preproc = [[\c^\s*\%($\a\+\|option\s\+\%(_explicit\|_\=explicitarray\)\>\)]] for _, line in ipairs(getlines(bufnr, 1, 100)) do - if line:find(fb_comment) or matchregex(line, fb_preproc) or matchregex(line, fb_keywords) then + if findany(line:lower(), visual_basic_content) then + return 'vb' + elseif line:find(fb_comment) or matchregex(line, fb_preproc) or matchregex(line, fb_keywords) then return 'freebasic' elseif matchregex(line, qb64_preproc) then return 'qb64' - elseif findany(line:lower(), visual_basic_content) then - return 'vb' end end return 'basic' @@ -172,11 +172,16 @@ function M.class(bufnr) end function M.cls(bufnr) + if vim.g.filetype_cls then + return vim.g.filetype_cls + end local line = getlines(bufnr, 1) if line:find('^%%') then return 'tex' elseif line:find('^#') and line:lower():find('rexx') then return 'rexx' + elseif line == 'VERSION 1.0 CLASS' then + return 'vb' else return 'st' end diff --git a/src/nvim/testdir/test_filetype.vim b/src/nvim/testdir/test_filetype.vim index a1228a07b5..88c354a55b 100644 --- a/src/nvim/testdir/test_filetype.vim +++ b/src/nvim/testdir/test_filetype.vim @@ -812,7 +812,7 @@ func Test_bas_file() " Visual Basic - call writefile(['Attribute VB_NAME = "Testing"'], 'Xfile.bas') + call writefile(['Attribute VB_NAME = "Testing"', 'Enum Foo', 'End Enum'], 'Xfile.bas') split Xfile.bas call assert_equal('vb', &filetype) bwipe! @@ -1692,5 +1692,45 @@ func Test_xpm_file() filetype off endfunc +func Test_cls_file() + filetype on + + call writefile(['looks like Smalltalk'], 'Xfile.cls') + split Xfile.cls + call assert_equal('st', &filetype) + bwipe! + + " Test dist#ft#FTcls() + + let g:filetype_cls = 'vb' + split Xfile.cls + call assert_equal('vb', &filetype) + bwipe! + unlet g:filetype_cls + + " TeX + + call writefile(['%'], 'Xfile.cls') + split Xfile.cls + call assert_equal('tex', &filetype) + bwipe! + + " Rexx + + call writefile(['# rexx'], 'Xfile.cls') + split Xfile.cls + call assert_equal('rexx', &filetype) + bwipe! + + " Visual Basic + + call writefile(['VERSION 1.0 CLASS'], 'Xfile.cls') + split Xfile.cls + call assert_equal('vb', &filetype) + bwipe! + + call delete('Xfile.cls') + filetype off +endfunc " vim: shiftwidth=2 sts=2 expandtab |