deep-cover 0.1.1

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.
Files changed (99) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +13 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +10 -0
  5. data/CODE_OF_CONDUCT.md +74 -0
  6. data/Gemfile +8 -0
  7. data/LICENSE.txt +21 -0
  8. data/README.md +127 -0
  9. data/Rakefile +6 -0
  10. data/bin/console +14 -0
  11. data/bin/cov +43 -0
  12. data/bin/gemcov +8 -0
  13. data/bin/selfcov +21 -0
  14. data/bin/setup +8 -0
  15. data/bin/testall +88 -0
  16. data/deep_cover.gemspec +44 -0
  17. data/exe/deep-cover +6 -0
  18. data/future_read_me.md +108 -0
  19. data/lib/deep-cover.rb +1 -0
  20. data/lib/deep_cover.rb +11 -0
  21. data/lib/deep_cover/analyser.rb +24 -0
  22. data/lib/deep_cover/analyser/base.rb +51 -0
  23. data/lib/deep_cover/analyser/branch.rb +20 -0
  24. data/lib/deep_cover/analyser/covered_code_source.rb +31 -0
  25. data/lib/deep_cover/analyser/function.rb +12 -0
  26. data/lib/deep_cover/analyser/ignore_uncovered.rb +19 -0
  27. data/lib/deep_cover/analyser/node.rb +11 -0
  28. data/lib/deep_cover/analyser/per_char.rb +20 -0
  29. data/lib/deep_cover/analyser/per_line.rb +23 -0
  30. data/lib/deep_cover/analyser/statement.rb +31 -0
  31. data/lib/deep_cover/analyser/subset.rb +24 -0
  32. data/lib/deep_cover/auto_run.rb +49 -0
  33. data/lib/deep_cover/autoload_tracker.rb +75 -0
  34. data/lib/deep_cover/backports.rb +9 -0
  35. data/lib/deep_cover/base.rb +55 -0
  36. data/lib/deep_cover/builtin_takeover.rb +2 -0
  37. data/lib/deep_cover/cli/debugger.rb +93 -0
  38. data/lib/deep_cover/cli/deep_cover.rb +49 -0
  39. data/lib/deep_cover/cli/instrumented_clone_reporter.rb +105 -0
  40. data/lib/deep_cover/config.rb +52 -0
  41. data/lib/deep_cover/core_ext/autoload_overrides.rb +40 -0
  42. data/lib/deep_cover/core_ext/coverage_replacement.rb +26 -0
  43. data/lib/deep_cover/core_ext/load_overrides.rb +24 -0
  44. data/lib/deep_cover/core_ext/require_overrides.rb +36 -0
  45. data/lib/deep_cover/coverage.rb +198 -0
  46. data/lib/deep_cover/covered_code.rb +138 -0
  47. data/lib/deep_cover/custom_requirer.rb +93 -0
  48. data/lib/deep_cover/node.rb +8 -0
  49. data/lib/deep_cover/node/arguments.rb +50 -0
  50. data/lib/deep_cover/node/assignments.rb +250 -0
  51. data/lib/deep_cover/node/base.rb +99 -0
  52. data/lib/deep_cover/node/begin.rb +25 -0
  53. data/lib/deep_cover/node/block.rb +53 -0
  54. data/lib/deep_cover/node/boolean.rb +22 -0
  55. data/lib/deep_cover/node/branch.rb +28 -0
  56. data/lib/deep_cover/node/case.rb +94 -0
  57. data/lib/deep_cover/node/collections.rb +21 -0
  58. data/lib/deep_cover/node/const.rb +10 -0
  59. data/lib/deep_cover/node/def.rb +38 -0
  60. data/lib/deep_cover/node/empty_body.rb +21 -0
  61. data/lib/deep_cover/node/exceptions.rb +74 -0
  62. data/lib/deep_cover/node/if.rb +36 -0
  63. data/lib/deep_cover/node/keywords.rb +84 -0
  64. data/lib/deep_cover/node/literals.rb +77 -0
  65. data/lib/deep_cover/node/loops.rb +72 -0
  66. data/lib/deep_cover/node/mixin/can_augment_children.rb +65 -0
  67. data/lib/deep_cover/node/mixin/check_completion.rb +16 -0
  68. data/lib/deep_cover/node/mixin/child_can_be_empty.rb +25 -0
  69. data/lib/deep_cover/node/mixin/executed_after_children.rb +13 -0
  70. data/lib/deep_cover/node/mixin/execution_location.rb +56 -0
  71. data/lib/deep_cover/node/mixin/flow_accounting.rb +63 -0
  72. data/lib/deep_cover/node/mixin/has_child.rb +138 -0
  73. data/lib/deep_cover/node/mixin/has_child_handler.rb +73 -0
  74. data/lib/deep_cover/node/mixin/has_tracker.rb +44 -0
  75. data/lib/deep_cover/node/mixin/is_statement.rb +18 -0
  76. data/lib/deep_cover/node/mixin/rewriting.rb +32 -0
  77. data/lib/deep_cover/node/mixin/wrapper.rb +13 -0
  78. data/lib/deep_cover/node/module.rb +64 -0
  79. data/lib/deep_cover/node/root.rb +18 -0
  80. data/lib/deep_cover/node/send.rb +83 -0
  81. data/lib/deep_cover/node/splat.rb +13 -0
  82. data/lib/deep_cover/node/variables.rb +14 -0
  83. data/lib/deep_cover/parser_ext/range.rb +40 -0
  84. data/lib/deep_cover/reporter.rb +6 -0
  85. data/lib/deep_cover/reporter/istanbul.rb +151 -0
  86. data/lib/deep_cover/tools.rb +18 -0
  87. data/lib/deep_cover/tools/builtin_coverage.rb +50 -0
  88. data/lib/deep_cover/tools/camelize.rb +8 -0
  89. data/lib/deep_cover/tools/dump_covered_code.rb +32 -0
  90. data/lib/deep_cover/tools/execute_sample.rb +23 -0
  91. data/lib/deep_cover/tools/format.rb +16 -0
  92. data/lib/deep_cover/tools/format_char_cover.rb +18 -0
  93. data/lib/deep_cover/tools/format_generated_code.rb +25 -0
  94. data/lib/deep_cover/tools/number_lines.rb +18 -0
  95. data/lib/deep_cover/tools/our_coverage.rb +9 -0
  96. data/lib/deep_cover/tools/require_relative_dir.rb +10 -0
  97. data/lib/deep_cover/tools/silence_warnings.rb +15 -0
  98. data/lib/deep_cover/version.rb +3 -0
  99. metadata +326 -0
@@ -0,0 +1,18 @@
1
+ module DeepCover
2
+ Tools = Module.new
3
+
4
+ require_relative 'tools/require_relative_dir'
5
+ extend Tools::RequireRelativeDir
6
+ require_relative_dir 'tools'
7
+ extend Tools::SilenceWarnings
8
+
9
+ # The functions defined in the submodules of Tools can be accessed
10
+ # either by extending the desired module, or all of them by extending
11
+ # Tools, or by calling them directly Tool.my_function.
12
+ module Tools
13
+ constants.each do |module_name|
14
+ include const_get(module_name)
15
+ end
16
+ extend self
17
+ end
18
+ end
@@ -0,0 +1,50 @@
1
+ module DeepCover
2
+ module Tools::BuiltinCoverage
3
+ require 'coverage'
4
+
5
+ def builtin_coverage(source, fn, lineno)
6
+ fn = File.absolute_path(File.expand_path(fn))
7
+ ::Coverage.start
8
+ Tools.silence_warnings do
9
+ execute_sample ->{ run_with_line_coverage(source, fn, lineno)}
10
+ end
11
+ unshift_coverage(::Coverage.result.fetch(fn), lineno)
12
+ end
13
+
14
+ if defined?(RUBY_ENGINE) && RUBY_ENGINE == 'jruby'
15
+ # Executes the source as if it was in the specified file while
16
+ # builtin coverage information is still captured
17
+ def run_with_line_coverage(source, fn=nil, lineno=1)
18
+ source = shift_source(source, lineno)
19
+ Object.to_java.getRuntime.executeScript(source, fn)
20
+ end
21
+ else
22
+ # In ruby 2.0 and 2.1, using 2, 3 or 4 as lineno with RubyVM::InstructionSequence.compile
23
+ # will cause the coverage result to be truncated.
24
+ # 1: [1,2,nil,1]
25
+ # 2: [nil,1,2,nil]
26
+ # 3: [nil,nil,1,2]
27
+ # 4: [nil,nil,nil,1]
28
+ # 5: [nil,nil,nil,nil,1,2,nil,1]
29
+ # Using 1 and 5 or more do not seem to show this issue.
30
+ # The workaround is to create the fake lines manually and always use the default lineno
31
+
32
+ # Executes the source as if it was in the specified file while
33
+ # builtin coverage information is still captured
34
+ def run_with_line_coverage(source, fn=nil, lineno=1)
35
+ source = shift_source(source, lineno)
36
+ RubyVM::InstructionSequence.compile(source, fn).eval
37
+ end
38
+ end
39
+
40
+ private
41
+
42
+ def shift_source(source, lineno)
43
+ "\n" * (lineno - 1) + source
44
+ end
45
+
46
+ def unshift_coverage(coverage, lineno)
47
+ coverage[(lineno-1)..-1]
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,8 @@
1
+ module DeepCover
2
+ module Tools::Camelize
3
+ # Poor man's camelize. 'an_example' => 'AnExample'
4
+ def camelize(string)
5
+ string.to_s.gsub(/([a-z\d]*)[_?!]?/){ $1.capitalize }
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,32 @@
1
+ require 'with_progress'
2
+
3
+ module DeepCover
4
+ module Tools::DumpCoveredCode
5
+ def dump_covered_code(source_path, dest_path = Dir.mktmpdir)
6
+ coverage = Coverage.new(tracker_global: '$_sc')
7
+ source_path = File.join(File.expand_path(source_path), '')
8
+ dest_path = File.join(File.expand_path(dest_path), '')
9
+ skipped = []
10
+ Dir.glob("#{source_path}**/*.rb").each.with_progress(title: 'Rewriting') do |path|
11
+ begin
12
+ covered_code = coverage.covered_code(path)
13
+ rescue Parser::SyntaxError
14
+ skipped << path
15
+ next
16
+ end
17
+ new_path = Pathname(path.gsub(source_path, dest_path))
18
+ new_path.dirname.mkpath
19
+ new_path.write(covered_code.covered_source)
20
+ end
21
+ unless skipped.empty?
22
+ warn [
23
+ "#{skipped.size} files could not be instrumented because of syntax errors:",
24
+ *skipped.first(3),
25
+ ('...' if skipped.size > 3),
26
+ ].compact.join("\n")
27
+ end
28
+ coverage.save(dest_path)
29
+ dest_path
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,23 @@
1
+ module DeepCover
2
+ module Tools::ExecuteSample
3
+ # Returns true if the code would have continued, false if the rescue was triggered.
4
+ def execute_sample(to_execute)
5
+ # Disable some annoying warning by ruby. We are testing edge cases, so warnings are to be expected.
6
+ begin
7
+ Tools.silence_warnings do
8
+ if to_execute.is_a?(CoveredCode)
9
+ to_execute.execute_code
10
+ else
11
+ to_execute.call
12
+ end
13
+ end
14
+ true
15
+ rescue RuntimeError => e
16
+ # In our samples, a simple `raise` doesn't need to be rescued
17
+ # Other exceptions are not rescued
18
+ raise unless e.message.empty?
19
+ false
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,16 @@
1
+ module DeepCover
2
+ module Tools::Format
3
+ CONVERT = Hash.new(' ')
4
+ CONVERT[0] = 'x '
5
+ CONVERT[nil] = '- '
6
+
7
+ def format(*results, filename: nil, source: nil)
8
+ source ||= File.read(filename)
9
+ results.map!{|counts| counts.map{|c| CONVERT[c]}}
10
+ [*results, source.lines].transpose.map do |parts|
11
+ *line_results, line = parts
12
+ Term::ANSIColor.white(line_results.join) + line.to_s
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,18 @@
1
+ module DeepCover
2
+ module Tools::FormatCharCover
3
+ COLOR = {'x' => :red, ' ' => :green, '-' => :faint}
4
+ WHITESPACE_MAP = Hash.new{|_, v| v}.merge!(' ' => '·', "\t" => '→ ')
5
+ def format_char_cover(covered_code, show_whitespace: false)
6
+ bc = covered_code.char_cover
7
+
8
+ covered_code.buffer.source_lines.map.with_index do |line, line_index|
9
+ next line if line.strip =~ /^#[ >]/
10
+ line.chars.map.with_index do |c, c_index|
11
+ color = COLOR[bc[line_index][c_index]]
12
+ c = WHITESPACE_MAP[c] if show_whitespace
13
+ Term::ANSIColor.send(color, c)
14
+ end.join
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,25 @@
1
+ module DeepCover
2
+ module Tools::FormatGeneratedCode
3
+ def format_generated_code(covered_code)
4
+ inserts = []
5
+ generated_code = covered_code.instrument_source do |inserted, _node, expr_limit|
6
+ inserts << [expr_limit, inserted.size]
7
+ Term::ANSIColor.yellow(inserted)
8
+ end
9
+
10
+ inserts = inserts.sort_by{|exp, _| [exp.line, exp.column]}.reverse
11
+ generated_lines = generated_code.split("\n")
12
+
13
+ inserts.each do |exp_limit, size|
14
+ # Line index starts at 1, so array index returns the next line
15
+ comment_line = generated_lines[exp_limit.line]
16
+ next unless comment_line.present?
17
+ next unless comment_line.start_with?('#>')
18
+ next if comment_line.start_with?('#>X')
19
+ next unless comment_line.size >= exp_limit.column
20
+ comment_line.insert(exp_limit.column, ' ' * size)
21
+ end
22
+ generated_lines.join("\n")
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,18 @@
1
+ module DeepCover
2
+ module Tools::NumberLines
3
+ def number_lines(lines, lineno: 1, bad_linenos: [])
4
+ max_lineno = lineno + lines.size - 1
5
+ nb_lineno_digits = max_lineno.to_s.size
6
+ lines.map.with_index do |line, i|
7
+ cur_lineno = lineno + i
8
+ cur_lineno_s = cur_lineno.to_s.rjust(nb_lineno_digits)
9
+ if bad_linenos.include?(cur_lineno)
10
+ prefix = Term::ANSIColor.red("#{cur_lineno_s} | ")
11
+ else
12
+ prefix = Term::ANSIColor.white("#{cur_lineno_s} | ")
13
+ end
14
+ "#{prefix}#{line}"
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,9 @@
1
+ module DeepCover
2
+ module Tools::OutCoverage
3
+ def our_coverage(source, fn, lineno, **options)
4
+ covered_code = CoveredCode.new(source:source, path: fn, lineno: lineno)
5
+ Tools.execute_sample(covered_code)
6
+ covered_code.line_coverage(options)
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,10 @@
1
+ module DeepCover
2
+ module Tools::RequireRelativeDir
3
+ def require_relative_dir(dir_name, except: [])
4
+ dir = File.dirname(caller.first.partition(/\.rb:\d/).first)
5
+ Dir["#{dir}/#{dir_name}/*.rb"].sort.each do |file|
6
+ require file unless except.include? File.basename(file, '.rb')
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,15 @@
1
+ module DeepCover
2
+ module Tools::SilenceWarnings
3
+ # copied from: activesupport/lib/active_support/core_ext/kernel/reporting.rb
4
+ def silence_warnings
5
+ with_warnings(nil) { yield }
6
+ end
7
+
8
+ def with_warnings(flag)
9
+ old_verbose, $VERBOSE = $VERBOSE, flag
10
+ yield
11
+ ensure
12
+ $VERBOSE = old_verbose
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,3 @@
1
+ module DeepCover
2
+ VERSION = "0.1.1"
3
+ end
metadata ADDED
@@ -0,0 +1,326 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: deep-cover
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Marc-André Lafortune
8
+ - Maxime Lapointe
9
+ autorequire:
10
+ bindir: exe
11
+ cert_chain: []
12
+ date: 2017-10-27 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: parser
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ">="
19
+ - !ruby/object:Gem::Version
20
+ version: '0'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ version: '0'
28
+ - !ruby/object:Gem::Dependency
29
+ name: backports
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: 3.10.1
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: 3.10.1
42
+ - !ruby/object:Gem::Dependency
43
+ name: binding_of_caller
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ type: :runtime
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ - !ruby/object:Gem::Dependency
57
+ name: term-ansicolor
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: highline
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ - !ruby/object:Gem::Dependency
85
+ name: ruby-progressbar
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - "<"
89
+ - !ruby/object:Gem::Version
90
+ version: 1.9.0
91
+ type: :runtime
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - "<"
96
+ - !ruby/object:Gem::Version
97
+ version: 1.9.0
98
+ - !ruby/object:Gem::Dependency
99
+ name: with_progress
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ type: :runtime
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ - !ruby/object:Gem::Dependency
113
+ name: slop
114
+ requirement: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - "~>"
117
+ - !ruby/object:Gem::Version
118
+ version: '4.0'
119
+ type: :runtime
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - "~>"
124
+ - !ruby/object:Gem::Version
125
+ version: '4.0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: pry
128
+ requirement: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ version: '0'
133
+ type: :runtime
134
+ prerelease: false
135
+ version_requirements: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - ">="
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
140
+ - !ruby/object:Gem::Dependency
141
+ name: bundler
142
+ requirement: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - "~>"
145
+ - !ruby/object:Gem::Version
146
+ version: '1.15'
147
+ type: :development
148
+ prerelease: false
149
+ version_requirements: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - "~>"
152
+ - !ruby/object:Gem::Version
153
+ version: '1.15'
154
+ - !ruby/object:Gem::Dependency
155
+ name: rake
156
+ requirement: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - "~>"
159
+ - !ruby/object:Gem::Version
160
+ version: '10.0'
161
+ type: :development
162
+ prerelease: false
163
+ version_requirements: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - "~>"
166
+ - !ruby/object:Gem::Version
167
+ version: '10.0'
168
+ - !ruby/object:Gem::Dependency
169
+ name: rspec
170
+ requirement: !ruby/object:Gem::Requirement
171
+ requirements:
172
+ - - "~>"
173
+ - !ruby/object:Gem::Version
174
+ version: '3.0'
175
+ type: :development
176
+ prerelease: false
177
+ version_requirements: !ruby/object:Gem::Requirement
178
+ requirements:
179
+ - - "~>"
180
+ - !ruby/object:Gem::Version
181
+ version: '3.0'
182
+ - !ruby/object:Gem::Dependency
183
+ name: activesupport
184
+ requirement: !ruby/object:Gem::Requirement
185
+ requirements:
186
+ - - "~>"
187
+ - !ruby/object:Gem::Version
188
+ version: '4.0'
189
+ type: :development
190
+ prerelease: false
191
+ version_requirements: !ruby/object:Gem::Requirement
192
+ requirements:
193
+ - - "~>"
194
+ - !ruby/object:Gem::Version
195
+ version: '4.0'
196
+ description: Write a longer description or delete this line.
197
+ email:
198
+ - github@marc-andre.ca
199
+ - hunter_spawn@hotmail.com
200
+ executables:
201
+ - deep-cover
202
+ extensions: []
203
+ extra_rdoc_files: []
204
+ files:
205
+ - ".gitignore"
206
+ - ".rspec"
207
+ - ".travis.yml"
208
+ - CODE_OF_CONDUCT.md
209
+ - Gemfile
210
+ - LICENSE.txt
211
+ - README.md
212
+ - Rakefile
213
+ - bin/console
214
+ - bin/cov
215
+ - bin/gemcov
216
+ - bin/selfcov
217
+ - bin/setup
218
+ - bin/testall
219
+ - deep_cover.gemspec
220
+ - exe/deep-cover
221
+ - future_read_me.md
222
+ - lib/deep-cover.rb
223
+ - lib/deep_cover.rb
224
+ - lib/deep_cover/analyser.rb
225
+ - lib/deep_cover/analyser/base.rb
226
+ - lib/deep_cover/analyser/branch.rb
227
+ - lib/deep_cover/analyser/covered_code_source.rb
228
+ - lib/deep_cover/analyser/function.rb
229
+ - lib/deep_cover/analyser/ignore_uncovered.rb
230
+ - lib/deep_cover/analyser/node.rb
231
+ - lib/deep_cover/analyser/per_char.rb
232
+ - lib/deep_cover/analyser/per_line.rb
233
+ - lib/deep_cover/analyser/statement.rb
234
+ - lib/deep_cover/analyser/subset.rb
235
+ - lib/deep_cover/auto_run.rb
236
+ - lib/deep_cover/autoload_tracker.rb
237
+ - lib/deep_cover/backports.rb
238
+ - lib/deep_cover/base.rb
239
+ - lib/deep_cover/builtin_takeover.rb
240
+ - lib/deep_cover/cli/debugger.rb
241
+ - lib/deep_cover/cli/deep_cover.rb
242
+ - lib/deep_cover/cli/instrumented_clone_reporter.rb
243
+ - lib/deep_cover/config.rb
244
+ - lib/deep_cover/core_ext/autoload_overrides.rb
245
+ - lib/deep_cover/core_ext/coverage_replacement.rb
246
+ - lib/deep_cover/core_ext/load_overrides.rb
247
+ - lib/deep_cover/core_ext/require_overrides.rb
248
+ - lib/deep_cover/coverage.rb
249
+ - lib/deep_cover/covered_code.rb
250
+ - lib/deep_cover/custom_requirer.rb
251
+ - lib/deep_cover/node.rb
252
+ - lib/deep_cover/node/arguments.rb
253
+ - lib/deep_cover/node/assignments.rb
254
+ - lib/deep_cover/node/base.rb
255
+ - lib/deep_cover/node/begin.rb
256
+ - lib/deep_cover/node/block.rb
257
+ - lib/deep_cover/node/boolean.rb
258
+ - lib/deep_cover/node/branch.rb
259
+ - lib/deep_cover/node/case.rb
260
+ - lib/deep_cover/node/collections.rb
261
+ - lib/deep_cover/node/const.rb
262
+ - lib/deep_cover/node/def.rb
263
+ - lib/deep_cover/node/empty_body.rb
264
+ - lib/deep_cover/node/exceptions.rb
265
+ - lib/deep_cover/node/if.rb
266
+ - lib/deep_cover/node/keywords.rb
267
+ - lib/deep_cover/node/literals.rb
268
+ - lib/deep_cover/node/loops.rb
269
+ - lib/deep_cover/node/mixin/can_augment_children.rb
270
+ - lib/deep_cover/node/mixin/check_completion.rb
271
+ - lib/deep_cover/node/mixin/child_can_be_empty.rb
272
+ - lib/deep_cover/node/mixin/executed_after_children.rb
273
+ - lib/deep_cover/node/mixin/execution_location.rb
274
+ - lib/deep_cover/node/mixin/flow_accounting.rb
275
+ - lib/deep_cover/node/mixin/has_child.rb
276
+ - lib/deep_cover/node/mixin/has_child_handler.rb
277
+ - lib/deep_cover/node/mixin/has_tracker.rb
278
+ - lib/deep_cover/node/mixin/is_statement.rb
279
+ - lib/deep_cover/node/mixin/rewriting.rb
280
+ - lib/deep_cover/node/mixin/wrapper.rb
281
+ - lib/deep_cover/node/module.rb
282
+ - lib/deep_cover/node/root.rb
283
+ - lib/deep_cover/node/send.rb
284
+ - lib/deep_cover/node/splat.rb
285
+ - lib/deep_cover/node/variables.rb
286
+ - lib/deep_cover/parser_ext/range.rb
287
+ - lib/deep_cover/reporter.rb
288
+ - lib/deep_cover/reporter/istanbul.rb
289
+ - lib/deep_cover/tools.rb
290
+ - lib/deep_cover/tools/builtin_coverage.rb
291
+ - lib/deep_cover/tools/camelize.rb
292
+ - lib/deep_cover/tools/dump_covered_code.rb
293
+ - lib/deep_cover/tools/execute_sample.rb
294
+ - lib/deep_cover/tools/format.rb
295
+ - lib/deep_cover/tools/format_char_cover.rb
296
+ - lib/deep_cover/tools/format_generated_code.rb
297
+ - lib/deep_cover/tools/number_lines.rb
298
+ - lib/deep_cover/tools/our_coverage.rb
299
+ - lib/deep_cover/tools/require_relative_dir.rb
300
+ - lib/deep_cover/tools/silence_warnings.rb
301
+ - lib/deep_cover/version.rb
302
+ homepage: http://github.com
303
+ licenses:
304
+ - MIT
305
+ metadata: {}
306
+ post_install_message:
307
+ rdoc_options: []
308
+ require_paths:
309
+ - lib
310
+ required_ruby_version: !ruby/object:Gem::Requirement
311
+ requirements:
312
+ - - ">="
313
+ - !ruby/object:Gem::Version
314
+ version: '0'
315
+ required_rubygems_version: !ruby/object:Gem::Requirement
316
+ requirements:
317
+ - - ">="
318
+ - !ruby/object:Gem::Version
319
+ version: '0'
320
+ requirements: []
321
+ rubyforge_project:
322
+ rubygems_version: 2.6.13
323
+ signing_key:
324
+ specification_version: 4
325
+ summary: Write a short summary, because Rubygems requires one.
326
+ test_files: []