浏览代码

refactor(gem): favor built-in zsh completion for `gem` (#12576)

Completion for `gem` was included in zsh 5.5 and newer. This change
only uses the Oh My Zsh one if running an older version.

Reference: https://github.com/zsh-users/zsh/commit/9881778d48caf842f794d986bc9befebf0fb01c2
Marc Cornellà 9 月之前
父节点
当前提交
a2bf5c7b99
共有 2 个文件被更改,包括 26 次插入1 次删除
  1. 0 0
      plugins/gem/completions/_gem
  2. 26 1
      plugins/gem/gem.plugin.zsh

plugins/gem/_gem → plugins/gem/completions/_gem


+ 26 - 1
plugins/gem/gem.plugin.zsh

@@ -4,4 +4,29 @@ alias gemp="gem push *.gem"
 # gemy GEM 0.0.0 = gem yank GEM -v 0.0.0
 function gemy {
 	gem yank $1 -v $2
-}
+}
+
+# If the completion file doesn't exist yet, we need to autoload it and
+# bind it to `gem`. Otherwise, compinit will have already done that.
+if [[ ! -f "$ZSH_CACHE_DIR/completions/_gem" ]]; then
+  typeset -g -A _comps
+  autoload -Uz _gem
+  _comps[docker]=_gem
+fi
+
+# zsh 5.5 already provides completion for `_gem`. With this we ensure that
+# our provided completion (which is not optimal but is enough in most cases)
+# is used for older versions
+autoload -Uz is-at-least
+if is-at-least 5.5; then
+  return 0
+fi
+
+{
+  # Standarized $0 handling
+  # https://zdharma-continuum.github.io/Zsh-100-Commits-Club/Zsh-Plugin-Standard.html
+  0="${${ZERO:-${0:#$ZSH_ARGZERO}}:-${(%):-%N}}"
+  0="${${(M)0:#/*}:-$PWD/$0}"
+
+  command cp -f "${0:h}/completions/_gem" "$ZSH_CACHE_DIR/completions/_gem"
+} &|