deep-cover-core 0.7.9 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/deep_cover_core.gemspec +2 -2
- data/lib/deep_cover/analyser/per_line.rb +1 -1
- data/lib/deep_cover/analyser/stats.rb +1 -1
- data/lib/deep_cover/backports.rb +1 -0
- data/lib/deep_cover/base.rb +15 -3
- data/lib/deep_cover/basics.rb +1 -0
- data/lib/deep_cover/config.rb +9 -4
- data/lib/deep_cover/coverage.rb +2 -2
- data/lib/deep_cover/coverage/analysis.rb +1 -1
- data/lib/deep_cover/node/mixin/execution_location.rb +1 -0
- data/lib/deep_cover/persistence.rb +7 -5
- data/lib/deep_cover/reporter/istanbul.rb +2 -2
- data/lib/deep_cover/tools/struct_with_options.rb +21 -0
- data/lib/deep_cover/tools/to_regexp.rb +16 -0
- data/lib/deep_cover/version.rb +1 -1
- metadata +10 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7e54c0b378f86ce59192fb96bf48ab337224c393b0fd8001aca282e0cd6089b4
|
4
|
+
data.tar.gz: 0b2e4d4be1a54115f0246faf36aa3de60c9f223f615bf6346e183f502308dd80
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ec49f79fe4432b3bf3f70567561226c9834b7f456afe03f820a4ee1c25b52f770c8303e5869be09f55db8ab3361a44c25aa1facb6881a67d1276992d695c83e2
|
7
|
+
data.tar.gz: ef087d944754939b47106482ef6a9813783f5fb8f55608a45e27533fc2263fa9a965555f01f85618e7e41d8981c676515339f81300733e911b3adbee57851066
|
data/deep_cover_core.gemspec
CHANGED
@@ -24,7 +24,7 @@ Gem::Specification.new do |spec|
|
|
24
24
|
spec.required_ruby_version = '>= 2.1.0'
|
25
25
|
|
26
26
|
# Main dependency
|
27
|
-
spec.add_runtime_dependency 'parser', '>= 2.5'
|
27
|
+
spec.add_runtime_dependency 'parser', '>= 2.5'
|
28
28
|
|
29
29
|
# Support
|
30
30
|
spec.add_runtime_dependency 'backports', '>= 3.11.0'
|
@@ -45,7 +45,7 @@ Gem::Specification.new do |spec|
|
|
45
45
|
# About every single release breaks something
|
46
46
|
# Ruby 2.1 is no longer supported
|
47
47
|
if RUBY_VERSION >= '2.3.0'
|
48
|
-
spec.add_development_dependency 'rubocop', '~> 0.
|
48
|
+
spec.add_development_dependency 'rubocop', '~> 0.81.0'
|
49
49
|
spec.add_development_dependency 'rubocop-performance'
|
50
50
|
end
|
51
51
|
end
|
@@ -35,7 +35,7 @@ module DeepCover
|
|
35
35
|
end
|
36
36
|
|
37
37
|
def missed_empty_branch?(node)
|
38
|
-
node.is_a?(Node::Branch) && node.branches.any? { |b| b.is_a?(Node::EmptyBody) &&
|
38
|
+
node.is_a?(Node::Branch) && node.branches.any? { |b| b.is_a?(Node::EmptyBody) && node_runs(b) == 0 }
|
39
39
|
end
|
40
40
|
end
|
41
41
|
end
|
@@ -48,7 +48,7 @@ module DeepCover
|
|
48
48
|
memoize :percent
|
49
49
|
|
50
50
|
def percent
|
51
|
-
Analyser::StatsBase.new(to_h.transform_values { |v| (100 * v).fdiv(total).round(DECIMALS) })
|
51
|
+
Analyser::StatsBase.new(**to_h.transform_values { |v| (100 * v).fdiv(total).round(DECIMALS) })
|
52
52
|
end
|
53
53
|
end
|
54
54
|
end
|
data/lib/deep_cover/backports.rb
CHANGED
@@ -17,6 +17,7 @@ require 'backports/2.4.0/false_class/dup'
|
|
17
17
|
require 'backports/2.4.0/true_class/dup'
|
18
18
|
require 'backports/2.4.0/hash/transform_values'
|
19
19
|
require 'backports/2.4.0/enumerable/sum'
|
20
|
+
require 'backports/2.4.0/regexp/match'
|
20
21
|
require 'backports/2.5.0/hash/slice'
|
21
22
|
require 'backports/2.5.0/hash/transform_keys'
|
22
23
|
require 'backports/2.5.0/kernel/yield_self'
|
data/lib/deep_cover/base.rb
CHANGED
@@ -38,7 +38,9 @@ module DeepCover
|
|
38
38
|
end
|
39
39
|
|
40
40
|
def line_coverage(filename)
|
41
|
-
|
41
|
+
filename = handle_relative_filename(filename)
|
42
|
+
return unless coverage.covered_code?(filename)
|
43
|
+
coverage.line_coverage(filename, **config.to_h)
|
42
44
|
end
|
43
45
|
|
44
46
|
def covered_code(filename)
|
@@ -62,6 +64,9 @@ module DeepCover
|
|
62
64
|
when :paths
|
63
65
|
warn "Changing DeepCover's paths after starting coverage is highly discouraged" if running?
|
64
66
|
@lookup_globs = @all_tracked_file_paths = nil
|
67
|
+
when :excluded_paths
|
68
|
+
warn "Changing DeepCover's excluded_paths after starting coverage is highly discouraged" if running?
|
69
|
+
@all_tracked_file_paths = nil
|
65
70
|
when :tracker_global
|
66
71
|
raise NotImplementedError, "Changing DeepCover's tracker global after starting coverage is not supported" if running?
|
67
72
|
@coverage = nil
|
@@ -79,8 +84,13 @@ module DeepCover
|
|
79
84
|
@coverage ||= Coverage.new
|
80
85
|
end
|
81
86
|
|
87
|
+
def lookup_exclusion
|
88
|
+
@lookup_exclusion ||= Regexp.union(*
|
89
|
+
config.exclude_paths.map { |x| Tools.to_regexp(x) })
|
90
|
+
end
|
91
|
+
|
82
92
|
def lookup_globs
|
83
|
-
return @lookup_globs if @lookup_globs
|
93
|
+
return @lookup_globs if defined?(@lookup_globs) && @lookup_globs
|
84
94
|
paths = Array(config.paths || :auto_detect).dup
|
85
95
|
paths.concat(auto_detected_paths) if paths.delete(:auto_detect)
|
86
96
|
|
@@ -143,6 +153,7 @@ module DeepCover
|
|
143
153
|
end
|
144
154
|
|
145
155
|
def tracked_file_path?(path)
|
156
|
+
return false if lookup_exclusion.match?(path)
|
146
157
|
# The flags are to make fnmatch match the same things as Dir.glob... This doesn't seem to be documented anywhere
|
147
158
|
# EXTGLOB: allow matching {lib,app} as either lib or app
|
148
159
|
# PATHNAME: Makes wildcard match not match /, and make /**/ (and pattern starting with **/) be any number of nested directory
|
@@ -155,6 +166,7 @@ module DeepCover
|
|
155
166
|
paths_found.select! { |path| path.end_with?('.rb') }
|
156
167
|
paths_found.select! { |path| File.file?(path) }
|
157
168
|
paths_found.uniq!
|
169
|
+
paths_found.reject! { |path| lookup_exclusion.match?(path) }
|
158
170
|
@all_tracked_file_paths = paths_found
|
159
171
|
@all_tracked_file_paths.dup
|
160
172
|
end
|
@@ -178,7 +190,7 @@ module DeepCover
|
|
178
190
|
relative_to = File.dirname(caller(2..2).first.partition(/\.rb:\d/).first)
|
179
191
|
filename = File.absolute_path(filename, relative_to)
|
180
192
|
end
|
181
|
-
filename += '.rb' unless filename
|
193
|
+
filename += '.rb' unless filename.end_with? 'rb'
|
182
194
|
filename
|
183
195
|
end
|
184
196
|
end
|
data/lib/deep_cover/basics.rb
CHANGED
data/lib/deep_cover/config.rb
CHANGED
@@ -20,7 +20,7 @@ module DeepCover
|
|
20
20
|
hash = to_hash
|
21
21
|
# TODO: (Max) I don't like mixup of configs being partly on DeepCover and Config like that...
|
22
22
|
hash[:paths] = DeepCover.lookup_globs
|
23
|
-
hash[:output]
|
23
|
+
hash[:output] &&= File.expand_path(hash[:output])
|
24
24
|
hash[:cache_directory] = File.expand_path(hash[:cache_directory])
|
25
25
|
hash
|
26
26
|
end
|
@@ -42,7 +42,7 @@ module DeepCover
|
|
42
42
|
end
|
43
43
|
unless keywords.empty?
|
44
44
|
keywords = check_uncovered(keywords)
|
45
|
-
set(keywords.to_h { |kind| [FILTER_NAME[kind], true] })
|
45
|
+
set(**keywords.to_h { |kind| [FILTER_NAME[kind], true] })
|
46
46
|
end
|
47
47
|
Config.options_to_ignored(**@options)
|
48
48
|
end
|
@@ -51,7 +51,7 @@ module DeepCover
|
|
51
51
|
raise ArgumentError, 'No block is accepted' if block_given?
|
52
52
|
unless keywords.empty?
|
53
53
|
keywords = check_uncovered(keywords)
|
54
|
-
set(keywords.to_h { |kind| [FILTER_NAME[kind], false] })
|
54
|
+
set(**keywords.to_h { |kind| [FILTER_NAME[kind], false] })
|
55
55
|
end
|
56
56
|
OPTIONALLY_COVERED - Config.options_to_ignored(**@options)
|
57
57
|
end
|
@@ -65,13 +65,18 @@ module DeepCover
|
|
65
65
|
end
|
66
66
|
end
|
67
67
|
|
68
|
-
%i[paths tracker_global reporter output cache_directory allow_partial]
|
68
|
+
%i[paths exclude_paths tracker_global reporter output cache_directory allow_partial]
|
69
69
|
.concat(OPTIONALLY_COVERED.map { |filter| FILTER_NAME[filter] })
|
70
70
|
.each { |attr| define_accessor(attr) }
|
71
71
|
end
|
72
72
|
|
73
73
|
include AttributeAccessors
|
74
74
|
|
75
|
+
def exclude_paths(paths = NOT_SPECIFIED)
|
76
|
+
paths = Array(paths).dup unless paths == NOT_SPECIFIED
|
77
|
+
super
|
78
|
+
end
|
79
|
+
|
75
80
|
def paths(paths = NOT_SPECIFIED)
|
76
81
|
paths = Array(paths).dup unless paths == NOT_SPECIFIED
|
77
82
|
super
|
data/lib/deep_cover/coverage.rb
CHANGED
@@ -31,10 +31,7 @@ module top_level_module::DeepCover # rubocop:disable Naming/ClassAndModuleCamelC
|
|
31
31
|
# returns a TrackerHitsPerPath
|
32
32
|
def load_trackers
|
33
33
|
tracker_hits_per_path_hashes = tracker_files.map do |full_path|
|
34
|
-
JSON.parse(full_path.binread).transform_keys(&:to_sym)
|
35
|
-
raise "dump version mismatch: #{version}, currently #{VERSION}" unless version == VERSION
|
36
|
-
tracker_hits_per_path
|
37
|
-
end
|
34
|
+
check_tracker_file(**JSON.parse(full_path.binread).transform_keys(&:to_sym))
|
38
35
|
end
|
39
36
|
|
40
37
|
self.class.merge_tracker_hits_per_paths(*tracker_hits_per_path_hashes)
|
@@ -56,7 +53,7 @@ module top_level_module::DeepCover # rubocop:disable Naming/ClassAndModuleCamelC
|
|
56
53
|
delete_trackers
|
57
54
|
begin
|
58
55
|
dir_path.rmdir
|
59
|
-
rescue SystemCallError # rubocop:disable Lint/
|
56
|
+
rescue SystemCallError # rubocop:disable Lint/SuppressedException
|
60
57
|
end
|
61
58
|
end
|
62
59
|
|
@@ -88,6 +85,11 @@ module top_level_module::DeepCover # rubocop:disable Naming/ClassAndModuleCamelC
|
|
88
85
|
|
89
86
|
private
|
90
87
|
|
88
|
+
def check_tracker_file(version:, tracker_hits_per_path:)
|
89
|
+
raise "dump version mismatch: #{version}, currently #{VERSION}" unless version == VERSION
|
90
|
+
tracker_hits_per_path
|
91
|
+
end
|
92
|
+
|
91
93
|
def create_directory_if_needed
|
92
94
|
dir_path.mkpath
|
93
95
|
end
|
@@ -68,7 +68,7 @@ module DeepCover
|
|
68
68
|
end
|
69
69
|
end
|
70
70
|
|
71
|
-
class CoveredCodeConverter <
|
71
|
+
class CoveredCodeConverter < StructWithOptions.new(:covered_code)
|
72
72
|
include Converters
|
73
73
|
|
74
74
|
def node_analyser
|
@@ -172,7 +172,7 @@ module DeepCover
|
|
172
172
|
|
173
173
|
class << self
|
174
174
|
def report(coverage, **options)
|
175
|
-
new(coverage, options).report
|
175
|
+
new(coverage, **options).report
|
176
176
|
end
|
177
177
|
|
178
178
|
def available?
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module DeepCover
|
4
|
+
module StructWithOptions
|
5
|
+
module Initializer
|
6
|
+
def initialize(*args, **options)
|
7
|
+
super(*args, options)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.new(*args)
|
12
|
+
Struct.new(*args, :options).tap do |klass|
|
13
|
+
klass.include Initializer
|
14
|
+
class << klass
|
15
|
+
undef_method :new
|
16
|
+
end
|
17
|
+
klass.define_singleton_method(:new, Class.method(:new))
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module DeepCover
|
4
|
+
module Tools::ToRegexp
|
5
|
+
def to_regexp(regexp_or_str)
|
6
|
+
case regexp_or_str
|
7
|
+
when Regexp
|
8
|
+
regexp_or_str
|
9
|
+
when String
|
10
|
+
Regexp.new(Regexp.quote(regexp_or_str))
|
11
|
+
else
|
12
|
+
raise TypeError
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/lib/deep_cover/version.rb
CHANGED
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: deep-cover-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marc-André Lafortune
|
8
8
|
- Maxime Lapointe
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2021-01-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: parser
|
@@ -18,9 +18,6 @@ dependencies:
|
|
18
18
|
- - ">="
|
19
19
|
- !ruby/object:Gem::Version
|
20
20
|
version: '2.5'
|
21
|
-
- - "<"
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: '2.7'
|
24
21
|
type: :runtime
|
25
22
|
prerelease: false
|
26
23
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -28,9 +25,6 @@ dependencies:
|
|
28
25
|
- - ">="
|
29
26
|
- !ruby/object:Gem::Version
|
30
27
|
version: '2.5'
|
31
|
-
- - "<"
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '2.7'
|
34
28
|
- !ruby/object:Gem::Dependency
|
35
29
|
name: backports
|
36
30
|
requirement: !ruby/object:Gem::Requirement
|
@@ -149,14 +143,14 @@ dependencies:
|
|
149
143
|
requirements:
|
150
144
|
- - "~>"
|
151
145
|
- !ruby/object:Gem::Version
|
152
|
-
version: 0.
|
146
|
+
version: 0.81.0
|
153
147
|
type: :development
|
154
148
|
prerelease: false
|
155
149
|
version_requirements: !ruby/object:Gem::Requirement
|
156
150
|
requirements:
|
157
151
|
- - "~>"
|
158
152
|
- !ruby/object:Gem::Version
|
159
|
-
version: 0.
|
153
|
+
version: 0.81.0
|
160
154
|
- !ruby/object:Gem::Dependency
|
161
155
|
name: rubocop-performance
|
162
156
|
requirement: !ruby/object:Gem::Requirement
|
@@ -309,6 +303,8 @@ files:
|
|
309
303
|
- lib/deep_cover/tools/silence_warnings.rb
|
310
304
|
- lib/deep_cover/tools/slice.rb
|
311
305
|
- lib/deep_cover/tools/strip_heredoc.rb
|
306
|
+
- lib/deep_cover/tools/struct_with_options.rb
|
307
|
+
- lib/deep_cover/tools/to_regexp.rb
|
312
308
|
- lib/deep_cover/tools/truncate_backtrace.rb
|
313
309
|
- lib/deep_cover/tools/with_unbundled_env.rb
|
314
310
|
- lib/deep_cover/version.rb
|
@@ -316,7 +312,7 @@ homepage: https://github.com/deep-cover/deep-cover
|
|
316
312
|
licenses:
|
317
313
|
- MIT
|
318
314
|
metadata: {}
|
319
|
-
post_install_message:
|
315
|
+
post_install_message:
|
320
316
|
rdoc_options: []
|
321
317
|
require_paths:
|
322
318
|
- lib
|
@@ -331,8 +327,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
331
327
|
- !ruby/object:Gem::Version
|
332
328
|
version: '0'
|
333
329
|
requirements: []
|
334
|
-
rubygems_version: 3.1.
|
335
|
-
signing_key:
|
330
|
+
rubygems_version: 3.1.4
|
331
|
+
signing_key:
|
336
332
|
specification_version: 4
|
337
333
|
summary: In depth coverage of your Ruby code.
|
338
334
|
test_files: []
|