]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.1.0401: filetype: zsh module files are not recognized v9.1.0401
authorWu, Zhenyu <wuzhenyu@ustc.edu>
Thu, 9 May 2024 18:35:13 +0000 (20:35 +0200)
committerChristian Brabandt <cb@256bit.org>
Thu, 9 May 2024 18:35:13 +0000 (20:35 +0200)
Problem:  filetype: zsh module files are not recognized
Solution: Detect '*.mdh' and '*.epro' as C filetype, '*.mdd' as zsh
          filetype, determine zsh-modules '*.pro' from from it's content
          (Wu, Zhenyu)

closes: #14737

Signed-off-by: Wu, Zhenyu <wuzhenyu@ustc.edu>
Signed-off-by: Christian Brabandt <cb@256bit.org>
runtime/autoload/dist/ft.vim
runtime/filetype.vim
src/testdir/test_filetype.vim
src/version.c

index 4e7d517931bf83e0dd6f6c983301a13ff5bce6c1..dd4fd30636fd76a9a9fbd6cde257d8e94929c985 100644 (file)
@@ -406,14 +406,18 @@ export def FTidl()
   setf idl
 enddef
 
-# Distinguish between "default", Prolog and Cproto prototype file.
+# Distinguish between "default", Prolog, zsh module's C and Cproto prototype file.
 export def ProtoCheck(default: string)
+  # zsh modules use '#include "*.pro"'
+  # https://github.com/zsh-users/zsh/blob/63f086d167960a27ecdbcb762179e2c2bf8a29f5/Src/Modules/example.c#L31
+  if getline(1) =~ '/* Generated automatically */'
+    setf c
   # Cproto files have a comment in the first line and a function prototype in
   # the second line, it always ends in ";".  Indent files may also have
   # comments, thus we can't match comments to see the difference.
   # IDL files can have a single ';' in the second line, require at least one
   # chacter before the ';'.
-  if getline(2) =~ '.;$'
+  elseif getline(2) =~ '.;$'
     setf cpp
   else
     # recognize Prolog by specific text in the first non-empty line
index f45866cb825373553a558510b1db3fb8e863f622..bc3a488ea65d325e99d1eaf80146fd7b88c784aa 100644 (file)
@@ -1072,7 +1072,7 @@ au BufNewFile,BufRead */.icewm/menu               setf icemenu
 au BufNewFile,BufRead .indent.pro              setf indent
 au BufNewFile,BufRead indent.pro               call dist#ft#ProtoCheck('indent')
 
-" IDL (Interactive Data Language)
+" IDL (Interactive Data Language), Prolog, Cproto or zsh module C
 au BufNewFile,BufRead *.pro                    call dist#ft#ProtoCheck('idlang')
 
 " Indent RC
@@ -3093,6 +3093,13 @@ au BufNewFile,BufRead */etc/yum.repos.d/*        call s:StarSetf('dosini')
 au BufNewFile,BufRead .zsh*,.zlog*,.zcompdump*  call s:StarSetf('zsh')
 au BufNewFile,BufRead zsh*,zlog*               call s:StarSetf('zsh')
 
+" Zsh module
+" *.mdd will generate *.mdh, *.pro and *.epro.
+" module's *.c will #include *.mdh containing module dependency information and
+" *.pro containing all static declarations of *.c
+" *.epro contains all external declarations of *.c
+au BufNewFile,BufRead *.mdh,*.epro             setf c
+au BufNewFile,BufRead *.mdd                    setf zsh
 
 " Help files match *.txt but should have a last line that is a modeline.
 au BufNewFile,BufRead *.txt
index c98bb56df263dd21538d5a0a37ff7d3e48981188..b057253d3b19b9e2df32315eb537708dbcdead9c 100644 (file)
@@ -131,7 +131,7 @@ def s:GetFilenameChecks(): dict<list<string>>
     bst: ['file.bst'],
     bzl: ['file.bazel', 'file.bzl', 'WORKSPACE', 'WORKSPACE.bzlmod'],
     bzr: ['bzr_log.any', 'bzr_log.file'],
-    c: ['enlightenment/file.cfg', 'file.qc', 'file.c', 'some-enlightenment/file.cfg'],
+    c: ['enlightenment/file.cfg', 'file.qc', 'file.c', 'some-enlightenment/file.cfg', 'file.mdh', 'file.epro'],
     cabal: ['file.cabal'],
     cabalconfig: ['cabal.config', expand("$HOME/.config/cabal/config")] + WhenConfigHome('$XDG_CONFIG_HOME/cabal/config'),
     cabalproject: ['cabal.project', 'cabal.project.local'],
@@ -855,7 +855,7 @@ def s:GetFilenameChecks(): dict<list<string>>
     zsh: ['.zprofile', '/etc/zprofile', '.zfbfmarks', 'file.zsh', 'file.zsh-theme', 'file.zunit',
           '.zcompdump', '.zlogin', '.zlogout', '.zshenv', '.zshrc', '.zsh_history',
           '.zcompdump-file', '.zlog', '.zlog-file', '.zsh', '.zsh-file',
-          'any/etc/zprofile', 'zlog', 'zlog-file', 'zsh', 'zsh-file'],
+          'any/etc/zprofile', 'zlog', 'zlog-file', 'zsh', 'zsh-file', 'file.mdd'],
 
     help: [$VIMRUNTIME .. '/doc/help.txt'],
     }
index db95d7b56881021869abe1669a602e167432a7e3..d166268ccbf5921bda37082ac08f5adf85918945 100644 (file)
@@ -704,6 +704,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    401,
 /**/
     400,
 /**/