summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDoug Kearns <dougkearns@gmail.com>2022-01-31 17:09:14 +0000
committerBram Moolenaar <Bram@vim.org>2022-01-31 17:09:14 +0000
commitc570e9cf68c0fe30366e82c96be460047dd659b9 (patch)
tree4b724d150784fe1f440e57c808ca5f305f590806
parentc4573eb12dba6a062af28ee0b8938d1521934ce4 (diff)
downloadvim-git-8.2.4274.tar.gz
patch 8.2.4274: Basic and form filetype detection is incompletev8.2.4274
Problem: Basic and form filetype detection is incomplete. Solution: Add a separate function for .frm files. (Doug Kearns, closes #9675)
-rw-r--r--runtime/autoload/dist/ft.vim24
-rw-r--r--runtime/filetype.vim2
-rw-r--r--src/testdir/test_filetype.vim28
-rw-r--r--src/version.c2
4 files changed, 51 insertions, 5 deletions
diff --git a/runtime/autoload/dist/ft.vim b/runtime/autoload/dist/ft.vim
index f513a2ac8..5d8734a62 100644
--- a/runtime/autoload/dist/ft.vim
+++ b/runtime/autoload/dist/ft.vim
@@ -67,7 +67,10 @@ func dist#ft#FTasmsyntax()
endif
endfunc
-func dist#ft#FTbas(alt = '')
+let s:ft_visual_basic_content = '\cVB_Name\|Begin VB\.\(Form\|MDIForm\|UserControl\)'
+
+" See FTfrm() for Visual Basic form file detection
+func dist#ft#FTbas()
if exists("g:filetype_bas")
exe "setf " . g:filetype_bas
return
@@ -86,10 +89,8 @@ func dist#ft#FTbas(alt = '')
setf freebasic
elseif match(lines, qb64_preproc) > -1
setf qb64
- elseif match(lines, '\cVB_Name\|Begin VB\.\(Form\|MDIForm\|UserControl\)') > -1
+ elseif match(lines, s:ft_visual_basic_content) > -1
setf vb
- elseif a:alt != ''
- exe 'setf ' .. a:alt
else
setf basic
endif
@@ -237,6 +238,21 @@ func dist#ft#FTe()
endif
endfunc
+func dist#ft#FTfrm()
+ if exists("g:filetype_frm")
+ exe "setf " . g:filetype_frm
+ return
+ endif
+
+ let lines = getline(1, min([line("$"), 5]))
+
+ if match(lines, s:ft_visual_basic_content) > -1
+ setf vb
+ else
+ setf form
+ endif
+endfunc
+
" Distinguish between Forth and F#.
" Provided by Doug Kearns.
func dist#ft#FTfs()
diff --git a/runtime/filetype.vim b/runtime/filetype.vim
index 5d04f21c0..37126ad95 100644
--- a/runtime/filetype.vim
+++ b/runtime/filetype.vim
@@ -2051,7 +2051,7 @@ au BufRead,BufNewFile *.hw,*.module,*.pkg
\ endif
" Visual Basic (also uses *.bas) or FORM
-au BufNewFile,BufRead *.frm call dist#ft#FTbas('form')
+au BufNewFile,BufRead *.frm call dist#ft#FTfrm()
" SaxBasic is close to Visual Basic
au BufNewFile,BufRead *.sba setf vb
diff --git a/src/testdir/test_filetype.vim b/src/testdir/test_filetype.vim
index 714d6f59c..6f4a42581 100644
--- a/src/testdir/test_filetype.vim
+++ b/src/testdir/test_filetype.vim
@@ -183,6 +183,7 @@ let s:filename_checks = {
\ 'fgl': ['file.4gl', 'file.4gh', 'file.m4gl'],
\ 'fish': ['file.fish'],
\ 'focexec': ['file.fex', 'file.focexec'],
+ \ 'form': ['file.frm'],
\ 'forth': ['file.ft', 'file.fth'],
\ 'fortran': ['file.f', 'file.for', 'file.fortran', 'file.fpp', 'file.ftn', 'file.f77', 'file.f90', 'file.f95', 'file.f03', 'file.f08'],
\ 'fpcmake': ['file.fpc'],
@@ -1278,4 +1279,31 @@ func Test_bas_file()
filetype off
endfunc
+func Test_frm_file()
+ filetype on
+
+ call writefile(['looks like FORM'], 'Xfile.frm')
+ split Xfile.frm
+ call assert_equal('form', &filetype)
+ bwipe!
+
+ " Test dist#ft#FTfrm()
+
+ let g:filetype_frm = 'form'
+ split Xfile.frm
+ call assert_equal('form', &filetype)
+ bwipe!
+ unlet g:filetype_frm
+
+ " Visual Basic
+
+ call writefile(['Begin VB.Form Form1'], 'Xfile.frm')
+ split Xfile.frm
+ call assert_equal('vb', &filetype)
+ bwipe!
+
+ call delete('Xfile.frm')
+ filetype off
+endfunc
+
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/version.c b/src/version.c
index 4c9c59442..921f07672 100644
--- a/src/version.c
+++ b/src/version.c
@@ -747,6 +747,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 4274,
+/**/
4273,
/**/
4272,