Mercurial > vim
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