From: eregontp@... Date: 2016-03-31T16:50:03+00:00 Subject: [ruby-core:74746] [Ruby trunk Bug#12220] Why does Coverage keep previously-loaded files as empty arrays? Issue #12220 has been updated by Benoit Daloze. File 0001-ext-coverage-coverage.c-Fully-reset-coverage-to-not-.patch added Tsuyoshi Sawada wrote: > So, was it or was it not a bug that it returns empty arrays? I consider it a bug in that it seems to be unintentional and it is just a side-effect of the implementation to disable coverage when reset. I attach a patch that shows what I would like to change: Not returning empty arrays to the user. Update to the tests show this API feels more natural if Coverage#result resets the state. I do not see any useful purpose for these arrays for the user, so I think this change is fairly compatible and in fact makes the returned result less surprising. It also removes additional global state, which is always a win. Internally, empty arrays are kept as markers to not track coverage anymore, but they are never exposed to the user. @mame: Do you agree with this patch? ---------------------------------------- Bug #12220: Why does Coverage keep previously-loaded files as empty arrays? https://bugs.ruby-lang.org/issues/12220#change-57879 * Author: Benoit Daloze * Status: Open * Priority: Normal * Assignee: Yusuke Endoh * ruby -v: ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-linux] * Backport: 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN ---------------------------------------- For instance, ruby -e 'require "coverage"; Coverage.start; require "set"; Coverage.result; Coverage.start; require "tmpdir"; p Coverage.result' {".../lib/ruby/2.2.0/set.rb"=>[], ".../lib/ruby/2.2.0/tmpdir.rb"=>[nil, nil, nil, nil, nil, nil, 1, 1, ...]} So Coverage.result stops coverage but also does some cleaning up. I think the most intuitive would be that the coverage Hash would be reset to be empty, but instead it's filled with empty arrays. As an example, this makes it fairly awkward to test and it enforces irreversible global state (https://github.com/ruby/spec/pull/219). I also do not see how this would be useful for coverage libraries. Is there a reason for this behavior? If not, would it be OK to clear the Hash when calling #result? ---Files-------------------------------- 0001-ext-coverage-coverage.c-Fully-reset-coverage-to-not-.patch (5.14 KB) -- https://bugs.ruby-lang.org/ Unsubscribe: