Ruby 3.2 - Coverage

Ruby 3.2 アドベントカレンダーの7日目の記事です。

qiita.com

Ruby 3.2.0 RC1 がリリースされたので、ネタ元を Ruby 3.2 RC1 の NEWS.md に変更。

6日目までに書いた内容は特に変更なさそう。


Coverage

eval でもカバレッジデータを取得可能

Feature #19008: Introduce coverage support for eval. - Ruby master - Ruby Issue Tracking System

eval: true を指定すると eval したときでもカバレッジデータを取得できるようになった。

require 'coverage'
Coverage.start(lines: true, eval: true)
s = <<EOS
10.times do |i|  # ここは1回
  if i.odd?      # ここは10回
    1            # ここは5回
  else
    2            # ここは5回
  end
end
EOS
eval s, nil, 'hoge'
pp Coverage.result
#=> {"hoge"=>{:lines=>[1, 10, 5, nil, 5, nil, nil]}}

便利。

Coverage.supported? 追加

Bug #19026: Add Coverage.supported?(x) to detect support for eval coverage flag. - Ruby master - Ruby Issue Tracking System

Coverage がサポートしてる機能を検査できる。

require 'coverage'
pp Coverage.supported?(:eval)  #=> true
pp Coverage.supported?(:hoge)  #=> false