diff options
-rw-r--r-- | runtime/doc/filetype.txt | 1 | ||||
-rw-r--r-- | runtime/lua/vim/filetype.lua | 4 | ||||
-rw-r--r-- | runtime/lua/vim/filetype/detect.lua | 22 | ||||
-rw-r--r-- | test/old/testdir/test_filetype.vim | 33 |
4 files changed, 58 insertions, 2 deletions
diff --git a/runtime/doc/filetype.txt b/runtime/doc/filetype.txt index 175c531950..48d6aed0f2 100644 --- a/runtime/doc/filetype.txt +++ b/runtime/doc/filetype.txt @@ -162,6 +162,7 @@ variables can be used to overrule the filetype used for certain extensions: *.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 diff --git a/runtime/lua/vim/filetype.lua b/runtime/lua/vim/filetype.lua index 5c799b23f2..c746eef1bb 100644 --- a/runtime/lua/vim/filetype.lua +++ b/runtime/lua/vim/filetype.lua @@ -997,7 +997,9 @@ local extension = { spi = 'spyce', spy = 'spyce', tyc = 'sql', - typ = 'sql', + typ = function(path, bufnr) + return require('vim.filetype.detect').typ(bufnr) + end, pkb = 'sql', tyb = 'sql', pks = 'sql', diff --git a/runtime/lua/vim/filetype/detect.lua b/runtime/lua/vim/filetype/detect.lua index 74b01d569c..94106a3547 100644 --- a/runtime/lua/vim/filetype/detect.lua +++ b/runtime/lua/vim/filetype/detect.lua @@ -1322,6 +1322,28 @@ function M.txt(bufnr) end end +function M.typ(bufnr) + if vim.g.filetype_typ then + return vim.g.filetype_typ + end + + for _, line in ipairs(getlines(bufnr, 1, 200)) do + if + findany(line, { + '^CASE[%s]?=[%s]?SAME$', + '^CASE[%s]?=[%s]?LOWER$', + '^CASE[%s]?=[%s]?UPPER$', + '^CASE[%s]?=[%s]?OPPOSITE$', + '^TYPE%s', + }) + then + return 'sql' + end + end + + return 'typst' +end + -- Determine if a .v file is Verilog, V, or Coq function M.v(bufnr) if vim.fn.did_filetype() ~= 0 then diff --git a/test/old/testdir/test_filetype.vim b/test/old/testdir/test_filetype.vim index 2d7a24090f..177a8247ac 100644 --- a/test/old/testdir/test_filetype.vim +++ b/test/old/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 |