about summary refs log tree commit diff
path: root/Util
diff options
context:
space:
mode:
authorDaniel Shahaf <danielsh@apache.org>2019-12-22 04:14:03 +0000
committerDaniel Shahaf <danielsh@apache.org>2019-12-22 04:14:58 +0000
commit5c5ac5efdb00a653c1ec0108ace68c89583fc0d0 (patch)
tree6cd672400546e6ffade04f68db5ce823e35e701d /Util
parentf7f2baac5eff3a6d49f2833a8d3aee1e08d28b81 (diff)
downloadzsh-5c5ac5efdb00a653c1ec0108ace68c89583fc0d0.tar.gz
zsh-5c5ac5efdb00a653c1ec0108ace68c89583fc0d0.tar.xz
zsh-5c5ac5efdb00a653c1ec0108ace68c89583fc0d0.zip
unposted: Fix broken build: 45109 (!) broke Test/Y01completion.ztst.
Diffstat (limited to 'Util')
-rw-r--r--Util/ztst.vim85
1 files changed, 85 insertions, 0 deletions
diff --git a/Util/ztst.vim b/Util/ztst.vim
new file mode 100644
index 000000000..8d8becfe7
--- /dev/null
+++ b/Util/ztst.vim
@@ -0,0 +1,85 @@
+"" A Vim syntax highlighting file for Test/*.ztst
+"
+" See ../Util/zyodl.vim for installation instructions.
+" Also, it's recommended to 'setlocal conceallevel=3 concealcursor=nc'.
+"
+" See B01cd.ztst for cases we cover
+
+" TODO: Some zsh syntax isn't highlighted, e.g., «{ cd $0 }» doesn't highlight either 'cd' or '$0'
+"   Apparently because the $VIMRUNTIME/syntax/zsh.vim zshBrackets group is defined as 'contains=TOP'?
+"   https://bugs.debian.org/947120
+" TODO: ZTST_unimplemented ZTST_skip aren't recognized everywhere
+"   I haven't found yet a legitimate use where they aren't highlighted, but
+"   they aren't highlighted in theoretical cases such as (( ++ZTST_skip )).
+"   (This example is theoretical because those variables are string-typed.)
+
+"" Boilerplate:
+if exists("b:current_syntax")
+  finish
+endif
+let s:cpo_save = &cpo
+set cpo&vim
+
+"" Syntax groups:
+syn clear
+
+syn include @zsh                   syntax/zsh.vim
+
+syn match  ztstPayload             /^\s\+\zs.*/ contains=@zsh
+
+syn match  ztstExitCode            /^\d\+\|^-/                nextgroup=ztstFlags
+syn match  ztstFlags               /[.dDq]*:/       contained nextgroup=ztstTestName contains=ztstColon
+syn match  ztstColon               /:/              contained
+syn region ztstTestName            start=// end=/$/ contained 
+
+syn match  ztstInputMarker         /^</                       nextgroup=ztstInput
+syn region ztstInput               start=// end=/$/ contained
+
+syn match  ztstOutputPattern       /^[*]>/                    nextgroup=ztstOutput   contains=ztstOutputPatternSigil,ztstOutputPatternMarker
+syn match  ztstOutputPatternSigil  /[*]/            contained
+syn match  ztstOutputPatternMarker /[>]/            contained conceal
+syn match  ztstOutputLiteral       /^>/                       nextgroup=ztstOutput
+syn region ztstOutput              start=// end=/$/ contained
+
+syn match  ztstErrputPattern       /^[*][?]/                  nextgroup=ztstErrput   contains=ztstErrputPatternSigil,ztstErrputPatternMarker
+syn match  ztstErrputPatternSigil  /[*]/            contained
+syn match  ztstErrputPatternMarker /[?]/            contained conceal
+syn match  ztstErrputLiteral       /^[?]/                     nextgroup=ztstErrput
+syn region ztstErrput              start=// end=/$/ contained
+
+syn match  ztstFrequentExplanationMarker /^F:/                nextgroup=ztstFrequentExplanation
+syn region ztstFrequentExplanation start=// end=/$/ contained
+
+syn match  ztstDirective           /^%.*/
+
+syn match  ztstComment             /^#.*/
+
+" Highlight those variables which are /de jure/ or /de facto/ APIs of the test
+" harness to the test files.
+syn keyword ztstSpecialVariable ZTST_unimplemented ZTST_skip ZTST_testdir ZTST_fd ZTST_srcdir containedin=@zsh 
+
+"" Highlight groups:
+hi def link ztstExitCode                  Number
+hi def link ztstFlags                     Normal
+hi def link ztstColon                     Ignore
+hi def link ztstTestName                  Title
+hi def link ztstInput                     Normal
+hi def link ztstInputMarker               Ignore
+hi def link ztstOutput                    String
+hi def link ztstOutputPatternSigil        Type
+hi def link ztstOutputPatternMarker       Ignore
+hi def link ztstOutputLiteral             Ignore
+hi def link ztstErrput                    Identifier
+hi def link ztstErrputPatternSigil        Type
+hi def link ztstErrputPatternMarker       Ignore
+hi def link ztstErrputLiteral             Ignore
+hi def link ztstDirective                 Statement
+hi def link ztstComment                   Comment
+hi def link ztstFrequentExplanation       PreProc
+hi def link ztstFrequentExplanationMarker Ignore
+hi def link ztstSpecialVariable           Underlined
+
+"" Boilerplate:
+let b:current_syntax = "ztst"
+let &cpo = s:cpo_save
+unlet s:cpo_save