# HG changeset patch # User Christian Brabandt # Date 1704133802 -3600 # Node ID e2e9bb5496a5c529fb7ec4f9ebc91544a17de0b5 # Parent f96f16107d61fd01a54ee9fe2991974e657e0a65 runtime(dist/ft): improve filetype detection for *.v (V/Verilog/Coq) Commit: https://github.com/vim/vim/commit/10b4f75d4c03c1cd4f579be5fdc812ba41b72fef Author: Christian Brabandt Date: Mon Jan 1 19:19:20 2024 +0100 runtime(dist/ft): improve filetype detection for *.v (V/Verilog/Coq) Patch provided by Dan Alt closes: #13793 Signed-off-by: Christian Brabandt diff --git a/runtime/autoload/dist/ft.vim b/runtime/autoload/dist/ft.vim --- a/runtime/autoload/dist/ft.vim +++ b/runtime/autoload/dist/ft.vim @@ -1186,28 +1186,48 @@ export def FTv() # ":setf" will do nothing, bail out early return endif + if exists("g:filetype_v") + exe "setf " .. g:filetype_v + return + endif - for line in getline(1, 200) - if line[0] =~ '^\s*/' + var in_comment = 0 + for lnum in range(1, min([line("$"), 200])) + var line = getline(lnum) + # Skip Verilog and V comments (lines and blocks). + if line =~ '^\s*/\*' + # start comment block + in_comment = 1 + endif + if in_comment == 1 + if line =~ '\*/' + # end comment block + in_comment = 0 + endif + # skip comment-block line + continue + endif + if line =~ '^\s*//' # skip comment line continue endif + # Coq: line ends with a '.' followed by an optional variable number of + # spaces or contains the start of a comment, but not inside a Verilog or V + # comment. + # Example: "Definition x := 10. (*". + if (line =~ '\.\s*$' && line !~ '/[/*]') || (line =~ '(\*' && line !~ '/[/*].*(\*') + setf coq + return + endif + # Verilog: line ends with ';' followed by an optional variable number of # spaces and an optional start of a comment. # Example: " b <= a + 1; // Add 1". - if line =~ ';\(\s*\)\?\(/.*\)\?$' + if line =~ ';\s*\(/[/*].*\)\?$' setf verilog return endif - - # Coq: line ends with a '.' followed by an optional variable number of - # spaces and an optional start of a comment. - # Example: "Definition x := 10. (*". - if line =~ '\.\(\s*\)\?\((\*.*\)\?$' - setf coq - return - endif endfor # No line matched, fall back to "v". diff --git a/runtime/doc/filetype.txt b/runtime/doc/filetype.txt --- a/runtime/doc/filetype.txt +++ b/runtime/doc/filetype.txt @@ -1,4 +1,4 @@ -*filetype.txt* For Vim version 9.0. Last change: 2023 Dec 23 +*filetype.txt* For Vim version 9.0. Last change: 2024 Jan 01 VIM REFERENCE MANUAL by Bram Moolenaar @@ -169,6 +169,7 @@ variables can be used to overrule the fi *.sh g:bash_is_sh |ft-sh-syntax| *.tex g:tex_flavor |ft-tex-plugin| *.typ g:filetype_typ + *.v g:filetype_v *.w g:filetype_w |ft-cweb-syntax| For a few filetypes the global variable is used only when the filetype could