deep-cover 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
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: []