pry-byebugがインストールされてるか自動判別して常に`c`などの一文字aliasを使わない方法

投稿者: Anonymous

pry-byebugが有効な状態でcなどを使うと以下の様なエラーになる問題があります。

c = 3
Error: Cannot find local context. Did you use `binding.pry`?

この対処に

Pry::Commands.delete 'c'
Pry::Commands.delete 'n'
Pry::Commands.delete 's'

~/.pryrcに書いた場合、Gemfileの設定などでpry-byebugが入ってないと今度は起動時に以下の様なエラーが出てしまいます。

Error loading /Users/ironsand/Dropbox/rc/.pryrc: Cannot find a command: 'c'!
/Users/ironsand/.rbenv/versions/2.1.3/lib/ruby/gems/2.1.0/gems/pry-0.10.1/lib/pry/command_set.rb:191:in `find_command_by_match_or_listing'

どちらの環境でもエラーを出さずにc,n,sのaliasのコマンドを無効化するにはどうすればよいでしょうか?

解決

pry-byebugが入っていないためにCannot find a command: 'c'!が出ると勘違いしてしまっていたのですが @todashuta さんの回答により defined?(PryByebug)"constant"を返し存在することから、pry-byebugが入っていないのではなく alias が行われていないだけだということがわかりました。

具体的には 3.0 より前のpry-byebugでは標準で実装されていた一文字 alias が削除されていたためこのエラーがでていたようです。

http://www.rubydoc.info/gems/pry-byebug/3.1.0

pry-byebugがインストールされていない
3.0より前のバージョンがインストールされている
3.0移行のバージョンが入ってる

全ての状態に対応するために以下の設定を~/.pryrcに行いました。
Pry::Commands.delete 'c'がエラーを出さないためにあえて一度 alias を定義させています。

if defined?(PryByebug)
  Pry.commands.alias_command 'c', 'continue'
  Pry.commands.alias_command 's', 'step'
  Pry.commands.alias_command 'n', 'next'
  Pry.commands.alias_command 'f', 'finish'
  Pry::Commands.delete 'c'
  Pry::Commands.delete 's'
  Pry::Commands.delete 'n'
  Pry::Commands.delete 'f'
end
回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *