Help us understand the problem. What is going on with this article?

Pryにdeleteコマンドを定義して要らないbinding.pryを消しながら快適デバッグしたい

More than 1 year has passed since last update.

binding.pryのあるある

prypry-byebugを使ってbinding.pryでデバッグするというのはめちゃくちゃ便利でRubyの開発には欠かせないものですが、
「もうここは止まらなくていいのに止まった。。。。要らないところ一つずつ消すの面倒くさい(泣)」
という経験があるのはぼくだけでは無いかと思います。

要らないところは消しながら進めれば良いのですが、残念ながらそういうコマンドは用意されていません。

そこで今回は独自にdeleteというコマンドを定義して削除する方法を考えました。

.pryrcに以下を追記します。
コードがかなり複雑なんですが

class Pry
  @delete_history = {}
  class << self
    attr_accessor :delete_history
  end
end

default_command_set = Pry::CommandSet.new do
  command "delete", "delete current binding.pry from file" do
    file_name, current_line =
    Pry::Command::Edit::FileAndLineLocator.from_binding(_pry_.current_binding)
    Pry.delete_history[file_name] ||= 0

    lines = IO.readlines(file_name).map.with_index(1) do |line, index|
      if line.match?(/binding.pry(\s)?/) && index <= (current_line - (1 + Pry.delete_history[file_name]))
        print("#{file_name}:#{index} deleted\n")
        Pry.delete_history[file_name] += 1
        line.gsub!(/binding.pry(\s)?/, "")
        line.match?(/\A[[:space:]]*\z/) ? nil : line
      else
        line
      end
    end

    File.open(file_name, 'w') do |file|
      file.puts lines.compact
    end
  end
end

Pry.config.commands.import default_command_set

これである程度は削除できます。

    44:   binding.pry
 => 45:   RECORD_KEYS = [
    46:     "user",
    47:     "user_name",
    48:     "text",
    49:     "ts",
    50:     "datetime"

[1] pry(TimeSheetWriter)> delete
"44:   binding.pry\n delete!!"

なぜある程度かというと一度削除するとそのファイルが全体として1行ずれてしまうためです。
で単純に上から削除していく場合はいいのですが、順番を前後して削除しているパターンなどは対応しきれていません。
惜しいところまで来ているので後もう一歩のところです。
もう少しいい感じにできたら更に更新したものをアップしようと思います。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away