diff --git a/lib/rcov/file_statistics.rb b/lib/rcov/file_statistics.rb index 6d3ce34..6239e01 100644 --- a/lib/rcov/file_statistics.rb +++ b/lib/rcov/file_statistics.rb @@ -126,8 +126,7 @@ def is_code?(lineno) end end end - @lines[lineno] && !@is_begin_comment[lineno] && - @lines[lineno] !~ /^\s*(#|$)/ + @lines[lineno] && !@is_begin_comment[lineno] && @lines[lineno] !~ /^\s*(#|$)/ end private @@ -163,6 +162,20 @@ def find_multiline_strings end end end + + def is_nocov?(line) + line =~ /#:nocov:/ + end + + def mark_nocov_regions(nocov_line_numbers, coverage) + while nocov_line_numbers.size > 0 + begin_line, end_line = nocov_line_numbers.shift, nocov_line_numbers.shift + next unless begin_line && end_line + (begin_line..end_line).each do |line_num| + coverage[line_num] ||= :inferred + end + end + end def precompute_coverage(comments_run_by_default = true) changed = false @@ -175,7 +188,11 @@ def precompute_coverage(comments_run_by_default = true) @coverage[i] ||= :inferred end end + nocov_line_numbers = [] + (0...lines.size).each do |i| + nocov_line_numbers << i if is_nocov?(@lines[i]) + next if @coverage[i] line = @lines[i] if /^\s*(begin|ensure|else|case)\s*(?:#.*)?$/ =~ line && next_expr_marked?(i) or @@ -190,7 +207,11 @@ def precompute_coverage(comments_run_by_default = true) @coverage[i] ||= :inferred changed = true end + end + + mark_nocov_regions(nocov_line_numbers, @coverage) + (@lines.size-1).downto(0) do |i| next if @coverage[i] if !is_code?(i) and @coverage[i+1] diff --git a/lib/rcov/version.rb b/lib/rcov/version.rb index 6cb26e8..5f8a514 100644 --- a/lib/rcov/version.rb +++ b/lib/rcov/version.rb @@ -3,7 +3,7 @@ # See LICENSE for licensing information. module Rcov - VERSION = "0.9.4" + VERSION = "0.9.5" RELEASE_DATE = "2009-10-16" RCOVRT_ABI = [2,0,0] UPSTREAM_URL = "http://github.com/relevance/rcov" diff --git a/rcov-java.gemspec b/rcov-java.gemspec index 1e529f3..1473888 100644 --- a/rcov-java.gemspec +++ b/rcov-java.gemspec @@ -24,7 +24,7 @@ PKG_FILES = ["bin/rcov", "lib/rcov.rb", "lib/rcov/lowlevel.rb", "lib/rcov/versio Gem::Specification.new do |s| s.name = %q{rcov} - s.version = "0.9.4" + s.version = "0.9.5" s.required_rubygems_version = nil if s.respond_to? :required_rubygems_version= s.authors = ["Relevance", "Chad Humphries (spicycode)", "Aaron Bedra (abedra)", "Jay McGaffigan", "Mauricio Fernandez"] diff --git a/rcov.gemspec b/rcov.gemspec index d80dcfc..2c5d2ae 100644 --- a/rcov.gemspec +++ b/rcov.gemspec @@ -25,7 +25,7 @@ PKG_FILES = ["bin/rcov", "lib/rcov.rb", "lib/rcov/lowlevel.rb", "lib/rcov/versio Gem::Specification.new do |s| s.name = %q{rcov} - s.version = "0.9.4" + s.version = "0.9.5" s.required_rubygems_version = nil if s.respond_to? :required_rubygems_version= s.authors = ["Relevance", "Chad Humphries (spicycode)", "Aaron Bedra (abedra)", "Jay McGaffigan", "Mauricio Fernandez"]