covered 0.18.5 → 0.19.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3c053a5a25549ed70d6b370eac4eaac7d88ea03063c6fc644fb74bf52df261bf
4
- data.tar.gz: 79147df15ce0e4e0cbef2dc43d9439e8cfd426baf3f673c102b477ee55fd00ef
3
+ metadata.gz: d7f641ef55ad67441aee4c21d0f7221b955f17340baf9e51d7c133c58c5343ae
4
+ data.tar.gz: 43ccf1cf59d39fef08a271a2a3b97c4756b9e08916a4fb31efcd5903d8ff14cc
5
5
  SHA512:
6
- metadata.gz: 3651915f1b93ad34fb707002e22e85218c5859d0a8ef888c2c8f7c463e8371d9c81bf46c922d3a7e8c65873d540c66bf3bc5ffdbf2c661da7ecf0c13fcf3c13a
7
- data.tar.gz: 7237d068d82b93da44eba1f84c681b5632baee5fa81bad25f61af10917397e4deb2bb836ef6f41e79bb7a536a1f667951323c399682cbbd3d35a96a421b4d1fa
6
+ metadata.gz: cf1576281c6fb28953788771f793c88ed0cb96b26795d78fbbd15a60f216140c69f24b3a5621279e5bde25fb00e77bb3a8c398f2512c465d7fa62f85ff35a792
7
+ data.tar.gz: bfe434cc0c0d3162e87192b714d3459341178649907e187ec9d3aa93e2567f9eea98b9e0cc8831379a647913b9d1862d51e3dc852c42a7ffb37277f04640ff5b
checksums.yaml.gz.sig CHANGED
Binary file
@@ -8,85 +8,33 @@ require_relative 'wrapper'
8
8
  require 'coverage'
9
9
 
10
10
  module Covered
11
- def self.coverage_with_eval?
12
- if ::Coverage.respond_to?(:supported?)
13
- ::Coverage.supported?(:eval)
14
- end
15
- end
16
-
17
- unless self.coverage_with_eval?
18
- class Capture < Wrapper
19
- def initialize(output)
20
- super(output)
21
-
22
- begin
23
- @trace = TracePoint.new(:line, :call, :c_call) do |trace|
24
- if trace.event == :call
25
- # Ruby doesn't always mark call-sites in sub-expressions, so we use this approach to compute a call site and mark it:
26
- if location = caller_locations(2, 1).first and path = location.path
27
- @output.mark(path, location.lineno, 1)
28
- end
29
- end
30
-
31
- if path = trace.path
32
- @output.mark(path, trace.lineno, 1)
33
- end
34
- end
35
- rescue
36
- warn "Line coverage disabled: #{$!}"
37
- @trace = nil
38
- end
39
- end
40
-
41
- def enable
42
- super
43
-
44
- @trace&.enable
45
- end
46
-
47
- def disable
48
- @trace&.disable
49
-
50
- super
51
- end
11
+ class Capture < Wrapper
12
+ def enable
13
+ super
52
14
 
53
- def execute(source, binding: TOPLEVEL_BINDING)
54
- enable
55
-
56
- eval(source.code!, binding, source.path)
57
- ensure
58
- disable
59
- end
15
+ ::Coverage.start(lines: true, eval: true)
60
16
  end
61
- else
62
- class Capture < Wrapper
63
- def enable
64
- super
65
-
66
- ::Coverage.start(lines: true, eval: true)
67
- end
68
-
69
- def disable
70
- results = ::Coverage.result
17
+
18
+ def disable
19
+ results = ::Coverage.result
71
20
 
72
- results.each do |path, result|
73
- lines = result[:lines]
21
+ results.each do |path, result|
22
+ lines = result[:lines]
74
23
 
75
- lines.each_with_index do |count, lineno|
76
- @output.mark(path, lineno+1, count) if count
77
- end
24
+ lines.each_with_index do |count, lineno|
25
+ @output.mark(path, lineno+1, count) if count
78
26
  end
79
-
80
- super
81
27
  end
28
+
29
+ super
30
+ end
82
31
 
83
- def execute(source, binding: TOPLEVEL_BINDING)
84
- enable
85
-
86
- eval(source.code!, binding, source.path)
87
- ensure
88
- disable
89
- end
32
+ def execute(source, binding: TOPLEVEL_BINDING)
33
+ enable
34
+
35
+ eval(source.code!, binding, source.path, source.line_offset)
36
+ ensure
37
+ disable
90
38
  end
91
39
  end
92
40
  end
@@ -88,8 +88,6 @@ module Covered
88
88
 
89
89
  policy.persist!
90
90
 
91
- policy.source
92
-
93
91
  policy.reports!(@coverage)
94
92
  end
95
93
  end
data/lib/covered/files.rb CHANGED
@@ -18,6 +18,10 @@ module Covered
18
18
 
19
19
  attr_accessor :paths
20
20
 
21
+ def [](path)
22
+ @paths[path]
23
+ end
24
+
21
25
  def empty?
22
26
  @paths.empty?
23
27
  end
@@ -5,7 +5,6 @@
5
5
 
6
6
  require_relative "summary"
7
7
  require_relative "files"
8
- require_relative "source"
9
8
  require_relative "capture"
10
9
  require_relative "cache"
11
10
  require_relative "persist"
@@ -29,10 +28,6 @@ module Covered
29
28
  super
30
29
  end
31
30
 
32
- def source(*args)
33
- @output = Source.new(@output, *args)
34
- end
35
-
36
31
  def include(*args)
37
32
  @output = Include.new(@output, *args)
38
33
  end
@@ -4,5 +4,5 @@
4
4
  # Copyright, 2018-2022, by Samuel Williams.
5
5
 
6
6
  module Covered
7
- VERSION = "0.18.5"
7
+ VERSION = "0.19.0"
8
8
  end
data.tar.gz.sig CHANGED
@@ -1,4 +1,4 @@
1
- m��T(5ߺM��XQ%����^M3!,���MSڡ��|찆(�� ۢ N���N��-ΩGudV���Dx��b��?�mOG�$�ϒ��JI�yN�Y���a�&)�ZU,�-Vg�z�6g:����y�ʸ�!�?����E>�~��5[sb0:Ao��:7Y��C���h�'���"��Kn��;-���uQ����#!�c$[LZP�����=q]vA���H�=�_2�c��x{?'T!ܸq�-/�@΁��7:ǿzѥK����\ZU2��T1�?����<���w�}��
2
- 5fB��_�����2��[Rs��,�
3
- �D
4
- ����m�nS��fCO�k��j�����J-���&����-i\H���^P�*5
1
+ M��8vd����I� |�8��?9�(Z�'�eG�uz�2�y0�֮b�-�
2
+ �Dm1r
3
+ ���OP )~bپ���R����$�ʓ
4
+ ]C�t_�q��$�Ԟ� \:�:J���AL�ᣑ�@���){a3OK͖Y"�@0;݄��=�z"͐f]Ň2���C
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: covered
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.18.5
4
+ version: 0.19.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Williams
@@ -41,7 +41,7 @@ cert_chain:
41
41
  Q2K9NVun/S785AP05vKkXZEFYxqG6EW012U4oLcFl5MySFajYXRYbuUpH6AY+HP8
42
42
  voD0MPg1DssDLKwXyt1eKD/+Fq0bFWhwVM/1XiAXL7lyYUyOq24KHgQ2Csg=
43
43
  -----END CERTIFICATE-----
44
- date: 2022-12-28 00:00:00.000000000 Z
44
+ date: 2022-12-29 00:00:00.000000000 Z
45
45
  dependencies:
46
46
  - !ruby/object:Gem::Dependency
47
47
  name: console
@@ -71,20 +71,6 @@ dependencies:
71
71
  - - "~>"
72
72
  - !ruby/object:Gem::Version
73
73
  version: '1.0'
74
- - !ruby/object:Gem::Dependency
75
- name: parser
76
- requirement: !ruby/object:Gem::Requirement
77
- requirements:
78
- - - ">="
79
- - !ruby/object:Gem::Version
80
- version: '0'
81
- type: :runtime
82
- prerelease: false
83
- version_requirements: !ruby/object:Gem::Requirement
84
- requirements:
85
- - - ">="
86
- - !ruby/object:Gem::Version
87
- version: '0'
88
74
  - !ruby/object:Gem::Dependency
89
75
  name: bundler
90
76
  requirement: !ruby/object:Gem::Requirement
@@ -160,7 +146,6 @@ files:
160
146
  - lib/covered/persist.rb
161
147
  - lib/covered/policy.rb
162
148
  - lib/covered/rspec.rb
163
- - lib/covered/source.rb
164
149
  - lib/covered/statistics.rb
165
150
  - lib/covered/summary.rb
166
151
  - lib/covered/sus.rb
@@ -181,7 +166,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
181
166
  requirements:
182
167
  - - ">="
183
168
  - !ruby/object:Gem::Version
184
- version: '0'
169
+ version: '3.2'
185
170
  required_rubygems_version: !ruby/object:Gem::Requirement
186
171
  requirements:
187
172
  - - ">="
metadata.gz.sig CHANGED
Binary file
@@ -1,163 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Released under the MIT License.
4
- # Copyright, 2018-2022, by Samuel Williams.
5
-
6
- require_relative 'wrapper'
7
-
8
- require 'thread'
9
- require 'parser/current'
10
-
11
- module Covered
12
- # The source map, loads the source file, parses the AST to generate which lines contain executable code.
13
- class Source < Wrapper
14
- def initialize(output)
15
- super(output)
16
-
17
- begin
18
- @trace = TracePoint.new(:script_compiled) do |trace|
19
- instruction_sequence = trace.instruction_sequence
20
-
21
- # We only track source files which begin at line 1, as these represent whole files instead of monkey patches.
22
- if instruction_sequence.first_lineno <= 1
23
- # Extract the source path and source itself and save it for later:
24
- if path = instruction_sequence.path and script = trace.eval_script
25
- self.add(Coverage::Source.new(path, script, instruction_sequence.first_lineno))
26
- end
27
- end
28
- end
29
- rescue
30
- warn "Script coverage disabled: #{$!}"
31
- @trace = nil
32
- end
33
- end
34
-
35
- def enable
36
- super
37
-
38
- @trace&.enable
39
- end
40
-
41
- def disable
42
- @trace&.disable
43
-
44
- super
45
- end
46
-
47
- attr :paths
48
-
49
- EXECUTABLE = {
50
- send: true,
51
- yield: true,
52
- # Line trace point is not triggered for return statements.
53
- # return: true,
54
- def: true,
55
- if: true,
56
- lvasgn: true,
57
- ivasgn: true,
58
- cvasgn: true,
59
- gvasgn: true,
60
- match_pattern: true,
61
- }
62
-
63
- def executable?(node)
64
- EXECUTABLE[node.type]
65
- end
66
-
67
- IGNORE = {
68
- arg: true,
69
- }
70
-
71
- def ignore?(node)
72
- node.nil? || IGNORE[node.type]
73
- end
74
-
75
- IGNORE_CHILDREN = {
76
- hash: true,
77
- array: true,
78
- }
79
-
80
- def ignore_children?(node)
81
- IGNORE_CHILDREN[node.type]
82
- end
83
-
84
- IGNORE_METHOD = {
85
- freeze: true
86
- }
87
-
88
- def ignore_method?(name)
89
- IGNORE_METHOD[name]
90
- end
91
-
92
- def expand(node, coverage, level = 0)
93
- if node.is_a? Parser::AST::Node
94
- if ignore?(node)
95
- # coverage.annotate(node.location.line, "ignoring #{node.type}")
96
- elsif node.type == :begin
97
- # if last_child = node.children&.last
98
- # coverage.counts[last_child.location.line] ||= 0
99
- # end
100
-
101
- return expand(node.children, coverage, level + 1)
102
- elsif node.type == :send
103
- if ignore_method?(node.children[1])
104
- # coverage.annotate(node.location.line, "ignoring #{node.type}")
105
- return
106
- else
107
- # coverage.annotate(node.location.line, "accepting selector #{node.type}")
108
- coverage.counts[node.location.selector.line] ||= 0
109
- end
110
- elsif node.type == :resbody
111
- return expand(node.children[2], coverage, level + 1)
112
- elsif executable?(node)
113
- # coverage.annotate(node.location.line, "executable #{node.type}")
114
- coverage.counts[node.location.line] ||= 0
115
- end
116
-
117
- if ignore_children?(node)
118
- # coverage.annotate(node.location.line, "ignoring #{node.type} children")
119
- else
120
- expand(node.children, coverage, level + 1)
121
- end
122
- elsif node.is_a? Array
123
- node.each do |child|
124
- expand(child, coverage, level)
125
- end
126
- else
127
- return false
128
- end
129
- end
130
-
131
- def add(source)
132
- if coverage = super
133
- if top = self.parse(source)
134
- self.expand(top, coverage)
135
- end
136
- end
137
-
138
- return coverage
139
- end
140
-
141
- def parse(source)
142
- if source.code?
143
- Parser::CurrentRuby.parse(source.code, source.path, source.line_offset)
144
- elsif path = source.path and File.exist?(path)
145
- Parser::CurrentRuby.parse_file(path)
146
- else
147
- # warn "Couldn't parse #{path}, file doesn't exist?"
148
- end
149
- rescue
150
- warn "Couldn't parse #{source}: #{$!}"
151
- end
152
-
153
- def each(&block)
154
- @output.each do |coverage|
155
- if top = parse(coverage.source)
156
- self.expand(top, coverage)
157
- end
158
-
159
- yield coverage.freeze
160
- end
161
- end
162
- end
163
- end