aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Clason <c.clason@uni-graz.at>2023-04-23 14:15:52 +0200
committerGitHub <noreply@github.com>2023-04-23 14:15:52 +0200
commitf17bb4f41102ecec7989bc4c14c626dc595e2f0b (patch)
tree7e2508e07eff9ece0970048086b01e7148159e60
parentbf0ac4f241cd22f53e026767ed5df89bf63bcf37 (diff)
downloadrneovim-f17bb4f41102ecec7989bc4c14c626dc595e2f0b.tar.gz
rneovim-f17bb4f41102ecec7989bc4c14c626dc595e2f0b.tar.bz2
rneovim-f17bb4f41102ecec7989bc4c14c626dc595e2f0b.zip
vim-patch:9.0.1478: filetypes for *.v files not detected properly (#23282)
* vim-patch:9.0.1478: filetypes for *.v files not detected properly Problem: Filetypes for *.v files not detected properly. Solution: Use the file contents to detect the filetype. (Turiiya, closes vim/vim#12281) https://github.com/vim/vim/commit/80406c26188219f3773b2e9c49160caeeb386ee2 Co-authored-by: Turiiya <34311583+tobealive@users.noreply.github.com> Co-authored-by: Jonas Strittmatter <40792180+smjonas@users.noreply.github.com>
-rw-r--r--runtime/lua/vim/filetype.lua4
-rw-r--r--runtime/lua/vim/filetype/detect.lua18
-rw-r--r--test/old/testdir/test_filetype.vim22
3 files changed, 42 insertions, 2 deletions
diff --git a/runtime/lua/vim/filetype.lua b/runtime/lua/vim/filetype.lua
index cbd9aa640b..4fafc4e2e2 100644
--- a/runtime/lua/vim/filetype.lua
+++ b/runtime/lua/vim/filetype.lua
@@ -1091,7 +1091,9 @@ local extension = {
vr = 'vera',
vri = 'vera',
vrh = 'vera',
- v = 'verilog',
+ v = function(path, bufnr)
+ return require('vim.filetype.detect').v(bufnr)
+ end,
va = 'verilogams',
vams = 'verilogams',
vhdl = 'vhdl',
diff --git a/runtime/lua/vim/filetype/detect.lua b/runtime/lua/vim/filetype/detect.lua
index 94114ae7c3..74b01d569c 100644
--- a/runtime/lua/vim/filetype/detect.lua
+++ b/runtime/lua/vim/filetype/detect.lua
@@ -1322,6 +1322,24 @@ function M.txt(bufnr)
end
end
+-- Determine if a .v file is Verilog, V, or Coq
+function M.v(bufnr)
+ if vim.fn.did_filetype() ~= 0 then
+ -- Filetype was already detected
+ return
+ end
+ for _, line in ipairs(getlines(bufnr, 1, 200)) do
+ if not line:find('^%s*/') then
+ if findany(line, { ';%s*$', ';%s*/' }) then
+ return 'verilog'
+ elseif findany(line, { '%.%s*$', '%.%s*%(%*' }) then
+ return 'coq'
+ end
+ end
+ end
+ return 'v'
+end
+
-- WEB (*.web is also used for Winbatch: Guess, based on expecting "%" comment
-- lines in a WEB file).
function M.web(bufnr)
diff --git a/test/old/testdir/test_filetype.vim b/test/old/testdir/test_filetype.vim
index 42b80ba868..789430fc84 100644
--- a/test/old/testdir/test_filetype.vim
+++ b/test/old/testdir/test_filetype.vim
@@ -646,7 +646,6 @@ let s:filename_checks = {
\ 'vdmrt': ['file.vdmrt'],
\ 'vdmsl': ['file.vdm', 'file.vdmsl'],
\ 'vera': ['file.vr', 'file.vri', 'file.vrh'],
- \ 'verilog': ['file.v'],
\ 'verilogams': ['file.va', 'file.vams'],
\ 'vgrindefs': ['vgrindefs'],
\ 'vhdl': ['file.hdl', 'file.vhd', 'file.vhdl', 'file.vbe', 'file.vst', 'file.vhdl_123', 'file.vho', 'some.vhdl_1', 'some.vhdl_1-file'],
@@ -1771,6 +1770,27 @@ func Test_ttl_file()
filetype off
endfunc
+func Test_v_file()
+ filetype on
+
+ call writefile(['module tb; // Looks like a Verilog'], 'Xfile.v', 'D')
+ split Xfile.v
+ call assert_equal('verilog', &filetype)
+ bwipe!
+
+ call writefile(['module main'], 'Xfile.v')
+ split Xfile.v
+ call assert_equal('v', &filetype)
+ bwipe!
+
+ call writefile(['Definition x := 10. (*'], 'Xfile.v')
+ split Xfile.v
+ call assert_equal('coq', &filetype)
+ bwipe!
+
+ filetype off
+endfunc
+
func Test_xpm_file()
filetype on