summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWu, Zhenyu <wuzhenyu@ustc.edu>2024-05-09 20:35:13 +0200
committerChristian Brabandt <cb@256bit.org>2024-05-09 20:35:13 +0200
commit887a38cee78c472fe406da60751fbba4a6ec19dd (patch)
tree56d6b532a29e9147f4bdd1aea58364569cd049b4
parentce2ad9ffd79fe6b2307cd46b96af7d99c0dd646e (diff)
patch 9.1.0401: filetype: zsh module files are not recognizedv9.1.0401
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>
-rw-r--r--runtime/autoload/dist/ft.vim8
-rw-r--r--runtime/filetype.vim9
-rw-r--r--src/testdir/test_filetype.vim4
-rw-r--r--src/version.c2
4 files changed, 18 insertions, 5 deletions
diff --git a/runtime/autoload/dist/ft.vim b/runtime/autoload/dist/ft.vim
index 4e7d517931..dd4fd30636 100644
--- a/runtime/autoload/dist/ft.vim
+++ b/runtime/autoload/dist/ft.vim
@@ -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
diff --git a/runtime/filetype.vim b/runtime/filetype.vim
index f45866cb82..bc3a488ea6 100644
--- a/runtime/filetype.vim
+++ b/runtime/filetype.vim
@@ -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
diff --git a/src/testdir/test_filetype.vim b/src/testdir/test_filetype.vim
index c98bb56df2..b057253d3b 100644
--- a/src/testdir/test_filetype.vim
+++ b/src/testdir/test_filetype.vim
@@ -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'],
}
diff --git a/src/version.c b/src/version.c
index db95d7b568..d166268ccb 100644
--- a/src/version.c
+++ b/src/version.c
@@ -705,6 +705,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 401,
+/**/
400,
/**/
399,