Browse Source

diagnostics: fix for reserved-word changes in zsh 5.1

Reference:
https://github.com/zsh-users/zsh/blob/zsh-5.1.1/NEWS#L20-L32
Andrew Janke 8 years ago
parent
commit
d15521d09d
1 changed files with 24 additions and 6 deletions
  1. 24 6
      lib/diagnostics.zsh

+ 24 - 6
lib/diagnostics.zsh

@@ -52,6 +52,9 @@
 # * Consider whether to move default output file location to TMPDIR. More robust
 #     but less user friendly.
 #
+
+autoload -Uz is-at-least
+
 function omz_diagnostic_dump() {
   emulate -L zsh
 
@@ -247,7 +250,7 @@ function _omz_diag_dump_one_big_text() {
 
 function _omz_diag_dump_check_core_commands() {
   builtin echo "Core command check:"
-  local redefined name builtins externals
+  local redefined name builtins externals reserved_words
   redefined=()
   # All the zsh non-module builtin commands
   # These are taken from the zsh reference manual for 5.0.2
@@ -255,17 +258,32 @@ function _omz_diag_dump_check_core_commands() {
   # (For back-compatibility, if any of these are newish, they should be removed,
   # or at least made conditional on the version of the current running zsh.)
   # "history" is also excluded because OMZ is known to redefine that
+  reserved_words=( do done esac then elif else fi for case if while function 
+    repeat time until select coproc nocorrect foreach end '!' '[[' '{' '}' 
+    )
   builtins=( alias autoload bg bindkey break builtin bye cd chdir command
     comparguments compcall compctl compdescribe compfiles compgroups compquote comptags
-    comptry compvalues continue declare dirs disable disown echo echotc echoti emulate
-    enable eval exec exit export false fc fg float functions getln getopts hash
-    integer jobs kill let limit local log logout noglob popd print printf
-    pushd pushln pwd r read readonly rehash return sched set setopt shift
-    source suspend test times trap true ttyctl type typeset ulimit umask unalias
+    comptry compvalues continue dirs disable disown echo echotc echoti emulate
+    enable eval exec exit false fc fg functions getln getopts hash
+    jobs kill let limit log logout noglob popd print printf
+    pushd pushln pwd r read rehash return sched set setopt shift
+    source suspend test times trap true ttyctl type ulimit umask unalias
     unfunction unhash unlimit unset unsetopt vared wait whence where which zcompile
     zle zmodload zparseopts zregexparse zstyle )
+  if is-at-least 5.1; then
+    reserved_word+=( declare export integer float local readonly typeset )
+  else
+    builtins+=( declare export integer float local readonly typeset )
+  fi
   builtins_fatal=( builtin command local )
   externals=( zsh )
+  for name in $reserved_words; do
+    if [[ $(builtin whence -w $name) != "$name: reserved" ]]; then
+      builtin echo "reserved word '$name' has been redefined"
+      builtin which $name
+      redefined+=$name
+    fi
+  done
   for name in $builtins; do
     if [[ $(builtin whence -w $name) != "$name: builtin" ]]; then
       builtin echo "builtin '$name' has been redefined"