gradle コマンドを補完しようとして brew にも補完があることを知る今さら感

 

👩‍💻 gradle/gradle-completion

本家から公開されてたんですね!

Gradle ./gradlew を補完しようとして brew の補完を知る今さら感

👉 gradle/gradle-completion: Gradle tab completion for bash and zsh hatena-bookmark

./gradlew でも利用できるようなのでインストールしてみました。


brew install gradle-completion

しかし、補完されないので調べる。


❯ brew info gradle-completion
...
==> Caveats
zsh completions have been installed to:
  /opt/homebrew/share/zsh/site-functions
...


❯ ls /opt/homebrew/share/zsh/site-functions
_brew@     _gradle@   _lsd@      _starship@

手動でロードしてみると弾いてるが。


❯ source /opt/homebrew/share/zsh/site-functions/_gradle

_arguments:comparguments:327: can only be called from completion function
_tags:comptags:36: can only be called from completion function
_tags:comptry:55: can only be called from completion function
_tags:comptags:60: can only be called from completion function
_tags:comptags:67: can only be called from completion function

どうなってるんや。

 

👩‍💻 Basic installation doesn't work on macOS with zsh #95

issues にこんな。


if [ $commands[brew] ]
then
  fpath=("$(brew --prefix)/share/zsh/site-functions" $fpath)
fi

gradle-completion/issues/95#issuecomment-1165679687

見てみると FPATH にない。


❯ echo $FPATH | tr ':' '\n'
/opt/homebrew/share/zsh-completions
/usr/local/share/zsh/site-functions
/usr/share/zsh/site-functions
/usr/share/zsh/5.9/functions

ここに、gradle-completion のインストール先である


/opt/homebrew/share/zsh/site-functions

を追加すると補完は効き始めた。

 

👩‍💻 Homebrew Shell-Completion

さっきの解決方法の issue コメントに書いてあったページをみてみる。

To make Homebrew’s completions available in zsh, you must insert the Homebrew-managed zsh/site-functions path into your FPATH before initialising zsh’s completion facility. Add the following to your ~/.zshrc:


if type brew &>/dev/null
then
  FPATH="$(brew --prefix)/share/zsh/site-functions:${FPATH}"

  autoload -Uz compinit
  compinit
fi

👉 brew Shell Completion — Homebrew Documentation hatena-bookmark

.zshrc に追加すると、brew コマンドでも TAB キーで補完が効き始める。


❯ brew i

info                  -- Display brief statistics for your Homebrew installa
install               -- Install a formula or cask
install-bundler-gems  -- Install Homebrew's Bundler gems
irb                   -- Enter the interactive Homebrew Ruby shell

知らんかった。

 

👩‍💻 まとめ

Homebrew のコマンド補完を以下で有効にしておくと、


# .zshrc
if type brew &>/dev/null
then
  FPATH="$(brew --prefix)/share/zsh/site-functions:${FPATH}"

  autoload -Uz compinit
  compinit
fi

Homebrew で以下にインストールされる補完スクリプトたちも、


❯ ls $(brew --prefix)/share/zsh/site-functions
_brew@     _gradle@   _lsd@      _starship@

インストール直後にそのまま使えるようになる。