summary refs log tree commit diff
path: root/Util/ztst-syntax.vim
diff options
context:
space:
mode:
authorDaniel Shahaf <danielsh@apache.org>2020-01-15 22:49:09 +0000
committerDaniel Shahaf <danielsh@apache.org>2020-01-15 22:49:09 +0000
commite899c21863a69226b4e650940c327a3b460023c0 (patch)
tree58e626a6f5c3c38e88c729d756ad563c10a80787 /Util/ztst-syntax.vim
parent22c0fe02a53bedb03f6aef5d0e476bbadc655995 (diff)
parentc7bc62aa0674d3677ce019333f4b8cd95aa8d189 (diff)
downloadzsh-e899c21863a69226b4e650940c327a3b460023c0.tar.gz
zsh-e899c21863a69226b4e650940c327a3b460023c0.tar.xz
zsh-e899c21863a69226b4e650940c327a3b460023c0.zip
Merge remote-tracking branch 'origin/master' into 5.9
Right now, as we're preparing to tag the 5.8 release, the 5.9 branch is
maintained as a topic branch off master.

* origin/master:
  45287: zshexpn: Describe parameter elision and add some introductory prose
  45302: bin_umask(): Queue signals around umask().
  users/24656: docs: Add an example of setting and querying zstyles
  users/24659: Cross-ref doc for matchers.
  45296: D02glob: Clean up after test from users/24633
  45290: New helper script for listing XFail tests.
  users/24633: Add an xfail test for users/24619.
  unposted: additional typo fix
  45280: _git: add -local variants
  users/24628 (fixed): More doc for selectw-word-style widgets.
  45266: Fix losetup completion, broken in da085b7a20729401c725f91ae930200d0deda64f (41720).
  unposted: Fix punctuation.
  use /dev/fd on Cygwin for process substitution
  unposted: Two additional typo fixes.
  Fix typos reported by codespell in shell code
  Fix typos reported by codespell in Src/
  45269: Fix misspellings in completions and elsewhere.
  45261: _gcc: Detect clang-as-gcc
  unposted: internal: Remove Vim modeline that interferes with ztst.vim.
  unposted: internal: ztst.vim: Use :syn-sync to work around (#x) and "`\\\\\\\\`" confusing the highlighting.
  unposted: internal: zyodl.vim: Support glob qualifiers in example()'s
  unposted: internal: zyodl.vim: Support yodl comments.
  github #44: Allow completion for picocom to list symlinks to character devices
  45245: _gcc: add some clang specific warnings
  45231: _rsync: When completing remote modules, ignore more of the motd.
  unposted: _tac: Eliminate superfluous variable
  45226: _man: Improve completion of file paths
  45184: Clarify documentation of %-sequences understood by compadd -[Xx]
  45239: Remove 'appendhistory' from zsh-newuser-install
  45218: add more options to swaks completion
  45196: fix completion after make -C, allowing for -C being used multiple times
  unposted (after 45183): Fix yodl error: "contrib.yo:4457: No macro: back(...)".
  45181: Fix workers/45164: ${(S)%%} will now consider the empty string as a potential match.
  45183: Improve documentation examples
  unposted: Add some tests for ${(S)}, including a regression test for workers/45164.
  45169/0002 (tweaked for trailing newlines): Add an expected-to-fail test for workers/44007.
  45169/0001: In the test suite, allow test cases to be marked as expected to fail.
  users/24582 + users/24583: Add regression tests for the previous commit.
  24581: Fix array assignments in shell word splitting and completion.
  45160: zshexpn: Expand documentation of (S)
  45150 + 45152: zshexpn: Use a more minimal example in the documentation of (#b).
  unposted: internal: Vim ztst support: Add an ftplugin in addition to the syntax highlighter.
  45130: _multi_parts: Always pass -f to compadd if given by caller
  unposted: zerrmsg(): Fix macro guard missed in previous commit
  unposted: ChangeLog for last commit
  internal: Allow %L in zerrmsg() in non-debug builds, too.
Diffstat (limited to 'Util/ztst-syntax.vim')
-rw-r--r--Util/ztst-syntax.vim95
1 files changed, 95 insertions, 0 deletions
diff --git a/Util/ztst-syntax.vim b/Util/ztst-syntax.vim
new file mode 100644
index 000000000..01e4dae31
--- /dev/null
+++ b/Util/ztst-syntax.vim
@@ -0,0 +1,95 @@
+"" 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               /[.dDqf]*:/      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 
+
+"" Sync
+" The following is sufficient for our modest line-based format, and helps
+" sidestep problems resulting from test cases that use syntax constructs
+" that confuse us and/or syntax/zsh.vim.  If we outgrow it, we should sync
+" on empty lines instead.
+"
+" If you run into syntax highlighting issues, just scroll the line that throws
+" the syntax highlighting off off the top of the screen.
+syn sync maxlines=1
+
+"" 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