changeset 32415:8d7214baf422 v9.0.1539

patch 9.0.1539: typst filetype is not recognized Commit: https://github.com/vim/vim/commit/4ce1bda869e4ec0152d7dcbe1e491ceac5341d5e Author: Gaetan Lepage <gaetan@glepage.com> Date: Wed May 10 22:01:55 2023 +0100 patch 9.0.1539: typst filetype is not recognized Problem: Typst filetype is not recognized. Solution: Distinguish between sql and typst. (Gaetan Lepage, closes https://github.com/vim/vim/issues/12363)
author Bram Moolenaar <Bram@vim.org>
date Wed, 10 May 2023 23:15:04 +0200
parents af8ecf2c7dfc
children 06997bf5e6a8
files runtime/autoload/dist/ft.vim runtime/doc/filetype.txt runtime/filetype.vim src/testdir/test_filetype.vim src/version.c
diffstat 5 files changed, 65 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/runtime/autoload/dist/ft.vim
+++ b/runtime/autoload/dist/ft.vim
@@ -470,7 +470,7 @@ enddef
 
 # Returns true if file content looks like LambdaProlog module
 def IsLProlog(): bool
-  # skip apparent comments and blank lines, what looks like 
+  # skip apparent comments and blank lines, what looks like
   # LambdaProlog comment may be RAPID header
   var l: number = nextnonblank(1)
   while l > 0 && l < line('$') && getline(l) =~ '^\s*%' # LambdaProlog comment
@@ -1106,6 +1106,31 @@ export def FTlsl()
   endif
 enddef
 
+export def FTtyp()
+  if exists("g:filetype_typ")
+    exe "setf " .. g:filetype_typ
+    return
+  endif
+
+  # Look for SQL type definition syntax
+  for line in getline(1, 200)
+    # SQL type files may define the casing
+    if line =~ '^CASE\s\==\s\=\(SAME\|LOWER\|UPPER\|OPPOSITE\)$'
+      setf sql
+      return
+    endif
+
+    # SQL type files may define some types as follows
+    if line =~ '^TYPE\s.*$'
+      setf sql
+      return
+    endif
+  endfor
+
+  # Otherwise, affect the typst filetype
+  setf typst
+enddef
+
 # Set the filetype of a *.v file to Verilog, V or Cog based on the first 200
 # lines.
 export def FTv()
--- a/runtime/doc/filetype.txt
+++ b/runtime/doc/filetype.txt
@@ -164,6 +164,7 @@ variables can be used to overrule the fi
 	*.sys		g:filetype_sys
 	*.sh		g:bash_is_sh	|ft-sh-syntax|
 	*.tex		g:tex_flavor	|ft-tex-plugin|
+	*.typ		g:filetype_typ
 	*.w		g:filetype_w	|ft-cweb-syntax|
 
 For a few filetypes the global variable is used only when the filetype could
--- a/runtime/filetype.vim
+++ b/runtime/filetype.vim
@@ -2058,7 +2058,10 @@ au BufNewFile,BufRead *.spy,*.spi		setf 
 au BufNewFile,BufRead squid.conf		setf squid
 
 " SQL for Oracle Designer
-au BufNewFile,BufRead *.tyb,*.typ,*.tyc,*.pkb,*.pks	setf sql
+au BufNewFile,BufRead *.tyb,*.tyc,*.pkb,*.pks	setf sql
+
+" *.typ can be either SQL or Typst files
+au BufNewFile,BufRead *.typ			call dist#ft#FTtyp()
 
 " SQL
 au BufNewFile,BufRead *.sql			call dist#ft#SQL()
--- a/src/testdir/test_filetype.vim
+++ b/src/testdir/test_filetype.vim
@@ -564,7 +564,7 @@ let s:filename_checks = {
     \ 'spice': ['file.sp', 'file.spice'],
     \ 'spup': ['file.speedup', 'file.spdata', 'file.spd'],
     \ 'spyce': ['file.spy', 'file.spi'],
-    \ 'sql': ['file.tyb', 'file.typ', 'file.tyc', 'file.pkb', 'file.pks'],
+    \ 'sql': ['file.tyb', 'file.tyc', 'file.pkb', 'file.pks'],
     \ 'sqlj': ['file.sqlj'],
     \ 'prql': ['file.prql'],
     \ 'sqr': ['file.sqr', 'file.sqi'],
@@ -2047,4 +2047,35 @@ func Test_lsl_file()
   filetype off
 endfunc
 
+func Test_typ_file()
+  filetype on
+
+  " SQL type file
+
+  call writefile(['CASE = LOWER'], 'Xfile.typ', 'D')
+  split Xfile.typ
+  call assert_equal('sql', &filetype)
+  bwipe!
+
+  call writefile(['TYPE foo'], 'Xfile.typ')
+  split Xfile.typ
+  call assert_equal('sql', &filetype)
+  bwipe!
+
+  " typst document
+
+  call writefile(['this is a fallback'], 'Xfile.typ')
+  split Xfile.typ
+  call assert_equal('typst', &filetype)
+  bwipe!
+
+  let g:filetype_typ = 'typst'
+  split test.typ
+  call assert_equal('typst', &filetype)
+  bwipe!
+  unlet g:filetype_typ
+
+  filetype off
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
--- a/src/version.c
+++ b/src/version.c
@@ -696,6 +696,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1539,
+/**/
     1538,
 /**/
     1537,