mutant 0.9.8 → 0.9.13

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 (335) hide show
  1. checksums.yaml +4 -4
  2. data/lib/mutant.rb +5 -2
  3. data/lib/mutant/ast.rb +0 -9
  4. data/lib/mutant/ast/find_metaclass_containing.rb +48 -0
  5. data/lib/mutant/ast/meta/send.rb +0 -6
  6. data/lib/mutant/bootstrap.rb +14 -37
  7. data/lib/mutant/cli.rb +11 -49
  8. data/lib/mutant/config.rb +0 -8
  9. data/lib/mutant/context.rb +0 -3
  10. data/lib/mutant/env.rb +0 -6
  11. data/lib/mutant/expression/method.rb +6 -6
  12. data/lib/mutant/expression/methods.rb +6 -6
  13. data/lib/mutant/expression/parser.rb +0 -6
  14. data/lib/mutant/integration.rb +0 -18
  15. data/lib/mutant/isolation.rb +1 -1
  16. data/lib/mutant/isolation/fork.rb +2 -24
  17. data/lib/mutant/isolation/none.rb +1 -1
  18. data/lib/mutant/license.rb +11 -0
  19. data/lib/mutant/matcher.rb +0 -14
  20. data/lib/mutant/matcher/config.rb +2 -11
  21. data/lib/mutant/matcher/method.rb +0 -31
  22. data/lib/mutant/matcher/method/instance.rb +0 -8
  23. data/lib/mutant/matcher/method/metaclass.rb +86 -0
  24. data/lib/mutant/matcher/method/singleton.rb +0 -25
  25. data/lib/mutant/matcher/methods.rb +17 -28
  26. data/lib/mutant/matcher/namespace.rb +0 -10
  27. data/lib/mutant/matcher/scope.rb +2 -4
  28. data/lib/mutant/meta/example/dsl.rb +0 -21
  29. data/lib/mutant/meta/example/verification.rb +0 -20
  30. data/lib/mutant/minitest/coverage.rb +53 -0
  31. data/lib/mutant/mutation.rb +0 -3
  32. data/lib/mutant/mutator.rb +1 -29
  33. data/lib/mutant/mutator/node.rb +1 -66
  34. data/lib/mutant/mutator/node/and_asgn.rb +0 -3
  35. data/lib/mutant/mutator/node/argument.rb +0 -15
  36. data/lib/mutant/mutator/node/arguments.rb +0 -20
  37. data/lib/mutant/mutator/node/begin.rb +0 -3
  38. data/lib/mutant/mutator/node/binary.rb +0 -23
  39. data/lib/mutant/mutator/node/block.rb +0 -15
  40. data/lib/mutant/mutator/node/block_pass.rb +29 -0
  41. data/lib/mutant/mutator/node/break.rb +0 -3
  42. data/lib/mutant/mutator/node/case.rb +0 -9
  43. data/lib/mutant/mutator/node/class.rb +0 -3
  44. data/lib/mutant/mutator/node/conditional_loop.rb +0 -3
  45. data/lib/mutant/mutator/node/const.rb +0 -3
  46. data/lib/mutant/mutator/node/define.rb +0 -11
  47. data/lib/mutant/mutator/node/defined.rb +0 -3
  48. data/lib/mutant/mutator/node/dstr.rb +0 -3
  49. data/lib/mutant/mutator/node/dsym.rb +0 -3
  50. data/lib/mutant/mutator/node/generic.rb +0 -3
  51. data/lib/mutant/mutator/node/if.rb +0 -12
  52. data/lib/mutant/mutator/node/index.rb +0 -27
  53. data/lib/mutant/mutator/node/kwbegin.rb +0 -3
  54. data/lib/mutant/mutator/node/literal.rb +0 -3
  55. data/lib/mutant/mutator/node/literal/array.rb +0 -6
  56. data/lib/mutant/mutator/node/literal/boolean.rb +0 -4
  57. data/lib/mutant/mutator/node/literal/float.rb +0 -9
  58. data/lib/mutant/mutator/node/literal/hash.rb +0 -9
  59. data/lib/mutant/mutator/node/literal/integer.rb +0 -9
  60. data/lib/mutant/mutator/node/literal/nil.rb +0 -3
  61. data/lib/mutant/mutator/node/literal/range.rb +4 -7
  62. data/lib/mutant/mutator/node/literal/regex.rb +0 -6
  63. data/lib/mutant/mutator/node/literal/string.rb +0 -3
  64. data/lib/mutant/mutator/node/literal/symbol.rb +0 -3
  65. data/lib/mutant/mutator/node/masgn.rb +0 -3
  66. data/lib/mutant/mutator/node/match_current_line.rb +0 -3
  67. data/lib/mutant/mutator/node/mlhs.rb +0 -3
  68. data/lib/mutant/mutator/node/named_value/access.rb +2 -14
  69. data/lib/mutant/mutator/node/named_value/constant_assignment.rb +0 -9
  70. data/lib/mutant/mutator/node/named_value/variable_assignment.rb +0 -6
  71. data/lib/mutant/mutator/node/next.rb +0 -3
  72. data/lib/mutant/mutator/node/noop.rb +1 -4
  73. data/lib/mutant/mutator/node/nthref.rb +0 -3
  74. data/lib/mutant/mutator/node/op_asgn.rb +0 -3
  75. data/lib/mutant/mutator/node/or_asgn.rb +0 -3
  76. data/lib/mutant/mutator/node/procarg_zero.rb +0 -3
  77. data/lib/mutant/mutator/node/regopt.rb +0 -6
  78. data/lib/mutant/mutator/node/resbody.rb +0 -6
  79. data/lib/mutant/mutator/node/rescue.rb +2 -19
  80. data/lib/mutant/mutator/node/return.rb +0 -3
  81. data/lib/mutant/mutator/node/sclass.rb +20 -0
  82. data/lib/mutant/mutator/node/send.rb +26 -61
  83. data/lib/mutant/mutator/node/send/attribute_assignment.rb +0 -9
  84. data/lib/mutant/mutator/node/send/binary.rb +0 -11
  85. data/lib/mutant/mutator/node/send/conditional.rb +0 -3
  86. data/lib/mutant/mutator/node/splat.rb +0 -3
  87. data/lib/mutant/mutator/node/super.rb +0 -3
  88. data/lib/mutant/mutator/node/when.rb +0 -19
  89. data/lib/mutant/mutator/node/yield.rb +0 -3
  90. data/lib/mutant/mutator/node/zsuper.rb +0 -3
  91. data/lib/mutant/mutator/util/array.rb +0 -6
  92. data/lib/mutant/mutator/util/symbol.rb +0 -3
  93. data/lib/mutant/parallel.rb +0 -13
  94. data/lib/mutant/parallel/driver.rb +0 -10
  95. data/lib/mutant/parallel/worker.rb +0 -22
  96. data/lib/mutant/reporter/cli.rb +0 -5
  97. data/lib/mutant/reporter/cli/format.rb +0 -9
  98. data/lib/mutant/reporter/cli/printer.rb +2 -42
  99. data/lib/mutant/reporter/cli/printer/env_progress.rb +0 -15
  100. data/lib/mutant/reporter/cli/printer/isolation_result.rb +9 -21
  101. data/lib/mutant/reporter/cli/printer/mutation_progress_result.rb +0 -5
  102. data/lib/mutant/reporter/cli/printer/mutation_result.rb +1 -22
  103. data/lib/mutant/reporter/cli/printer/status_progressive.rb +0 -8
  104. data/lib/mutant/reporter/cli/printer/subject_progress.rb +0 -9
  105. data/lib/mutant/repository/diff.rb +1 -13
  106. data/lib/mutant/repository/diff/ranges.rb +0 -11
  107. data/lib/mutant/result.rb +0 -3
  108. data/lib/mutant/runner.rb +0 -18
  109. data/lib/mutant/runner/sink.rb +0 -5
  110. data/lib/mutant/subject.rb +0 -8
  111. data/lib/mutant/subject/method.rb +0 -3
  112. data/lib/mutant/subject/method/instance.rb +40 -6
  113. data/lib/mutant/subject/method/metaclass.rb +30 -0
  114. data/lib/mutant/transform.rb +0 -92
  115. data/lib/mutant/version.rb +1 -1
  116. data/lib/mutant/warnings.rb +0 -6
  117. data/lib/mutant/zombifier.rb +2 -34
  118. metadata +61 -333
  119. data/.github/workflows/ci.yml +0 -121
  120. data/.gitignore +0 -38
  121. data/.rspec +0 -5
  122. data/.rubocop.yml +0 -7
  123. data/Changelog.md +0 -75
  124. data/Gemfile +0 -7
  125. data/Gemfile.lock +0 -167
  126. data/Gemfile.shared +0 -10
  127. data/README.md +0 -138
  128. data/Rakefile +0 -5
  129. data/config/devtools.yml +0 -2
  130. data/config/reek.yml +0 -138
  131. data/config/rubocop.yml +0 -205
  132. data/config/yardstick.yml +0 -2
  133. data/docs/commercial-support.md +0 -14
  134. data/docs/concurrency.md +0 -39
  135. data/docs/incremental.md +0 -76
  136. data/docs/known-problems.md +0 -30
  137. data/docs/limitations.md +0 -50
  138. data/docs/mutant-minitest.md +0 -149
  139. data/docs/mutant-rspec.md +0 -130
  140. data/docs/nomenclature.md +0 -82
  141. data/docs/reading-reports.md +0 -74
  142. data/lib/mutant/color.rb +0 -43
  143. data/lib/mutant/diff.rb +0 -114
  144. data/meta/and.rb +0 -15
  145. data/meta/and_asgn.rb +0 -14
  146. data/meta/array.rb +0 -30
  147. data/meta/begin.rb +0 -23
  148. data/meta/block.rb +0 -202
  149. data/meta/block_pass.rb +0 -8
  150. data/meta/blockarg.rb +0 -10
  151. data/meta/break.rb +0 -10
  152. data/meta/case.rb +0 -223
  153. data/meta/casgn.rb +0 -28
  154. data/meta/cbase.rb +0 -8
  155. data/meta/class.rb +0 -12
  156. data/meta/const.rb +0 -17
  157. data/meta/csend.rb +0 -10
  158. data/meta/cvar.rb +0 -7
  159. data/meta/cvasgn.rb +0 -10
  160. data/meta/date.rb +0 -59
  161. data/meta/def.rb +0 -203
  162. data/meta/defined.rb +0 -9
  163. data/meta/dstr.rb +0 -13
  164. data/meta/dsym.rb +0 -14
  165. data/meta/ensure.rb +0 -9
  166. data/meta/false.rb +0 -8
  167. data/meta/file.rb +0 -5
  168. data/meta/float.rb +0 -37
  169. data/meta/gvar.rb +0 -7
  170. data/meta/gvasgn.rb +0 -10
  171. data/meta/hash.rb +0 -24
  172. data/meta/if.rb +0 -77
  173. data/meta/index.rb +0 -133
  174. data/meta/indexasgn.rb +0 -31
  175. data/meta/int.rb +0 -18
  176. data/meta/ivar.rb +0 -8
  177. data/meta/ivasgn.rb +0 -23
  178. data/meta/kwarg.rb +0 -10
  179. data/meta/kwbegin.rb +0 -9
  180. data/meta/kwoptarg.rb +0 -13
  181. data/meta/lambda.rb +0 -23
  182. data/meta/line.rb +0 -5
  183. data/meta/lvar.rb +0 -16
  184. data/meta/lvasgn.rb +0 -25
  185. data/meta/masgn.rb +0 -7
  186. data/meta/match_current_line.rb +0 -15
  187. data/meta/next.rb +0 -11
  188. data/meta/nil.rb +0 -5
  189. data/meta/nthref.rb +0 -14
  190. data/meta/op_assgn.rb +0 -17
  191. data/meta/or.rb +0 -15
  192. data/meta/or_asgn.rb +0 -50
  193. data/meta/range.rb +0 -39
  194. data/meta/redo.rb +0 -5
  195. data/meta/regexp.rb +0 -81
  196. data/meta/regopt.rb +0 -10
  197. data/meta/rescue.rb +0 -90
  198. data/meta/return.rb +0 -16
  199. data/meta/self.rb +0 -7
  200. data/meta/send.rb +0 -604
  201. data/meta/str.rb +0 -7
  202. data/meta/super.rb +0 -27
  203. data/meta/sym.rb +0 -8
  204. data/meta/true.rb +0 -8
  205. data/meta/until.rb +0 -17
  206. data/meta/while.rb +0 -26
  207. data/meta/yield.rb +0 -10
  208. data/mutant-minitest.gemspec +0 -22
  209. data/mutant-rspec.gemspec +0 -22
  210. data/mutant.gemspec +0 -41
  211. data/mutant.yml +0 -6
  212. data/spec/integration/mutant/corpus_spec.rb +0 -15
  213. data/spec/integration/mutant/isolation/fork_spec.rb +0 -28
  214. data/spec/integration/mutant/minitest_spec.rb +0 -11
  215. data/spec/integration/mutant/null_spec.rb +0 -16
  216. data/spec/integration/mutant/rspec_spec.rb +0 -15
  217. data/spec/integration/mutant/test_mutator_handles_types_spec.rb +0 -9
  218. data/spec/integrations.yml +0 -63
  219. data/spec/shared/base_behavior.rb +0 -45
  220. data/spec/shared/framework_integration_behavior.rb +0 -70
  221. data/spec/shared/method_matcher_behavior.rb +0 -47
  222. data/spec/spec_helper.rb +0 -75
  223. data/spec/support/corpus.rb +0 -318
  224. data/spec/support/file_system.rb +0 -62
  225. data/spec/support/ice_nine_config.rb +0 -10
  226. data/spec/support/ruby_vm.rb +0 -84
  227. data/spec/support/shared_context.rb +0 -169
  228. data/spec/support/test_app.rb +0 -7
  229. data/spec/support/warnings.yml +0 -6
  230. data/spec/support/xspec.rb +0 -183
  231. data/spec/unit/mutant/ast/meta/optarg_spec.rb +0 -24
  232. data/spec/unit/mutant/ast/meta/send/proc_predicate_spec.rb +0 -30
  233. data/spec/unit/mutant/ast/meta/send/receiver_possible_top_level_const_predicate_spec.rb +0 -39
  234. data/spec/unit/mutant/ast/meta/send_spec.rb +0 -42
  235. data/spec/unit/mutant/ast/named_children_spec.rb +0 -89
  236. data/spec/unit/mutant/ast/sexp_spec.rb +0 -38
  237. data/spec/unit/mutant/ast_spec.rb +0 -57
  238. data/spec/unit/mutant/bootstrap_spec.rb +0 -216
  239. data/spec/unit/mutant/cli_spec.rb +0 -305
  240. data/spec/unit/mutant/clock_monotonic_spec.rb +0 -52
  241. data/spec/unit/mutant/config_spec.rb +0 -126
  242. data/spec/unit/mutant/context_spec.rb +0 -111
  243. data/spec/unit/mutant/diff_spec.rb +0 -189
  244. data/spec/unit/mutant/env_spec.rb +0 -229
  245. data/spec/unit/mutant/expression/method_spec.rb +0 -62
  246. data/spec/unit/mutant/expression/methods_spec.rb +0 -61
  247. data/spec/unit/mutant/expression/namespace/exact_spec.rb +0 -28
  248. data/spec/unit/mutant/expression/namespace/recursive_spec.rb +0 -66
  249. data/spec/unit/mutant/expression/parser_spec.rb +0 -65
  250. data/spec/unit/mutant/expression_spec.rb +0 -45
  251. data/spec/unit/mutant/integration/rspec_spec.rb +0 -201
  252. data/spec/unit/mutant/integration_spec.rb +0 -150
  253. data/spec/unit/mutant/isolation/fork_spec.rb +0 -309
  254. data/spec/unit/mutant/isolation/none_spec.rb +0 -23
  255. data/spec/unit/mutant/isolation/result_spec.rb +0 -73
  256. data/spec/unit/mutant/license_spec.rb +0 -293
  257. data/spec/unit/mutant/loader_spec.rb +0 -79
  258. data/spec/unit/mutant/matcher/chain_spec.rb +0 -26
  259. data/spec/unit/mutant/matcher/compiler_spec.rb +0 -0
  260. data/spec/unit/mutant/matcher/config_spec.rb +0 -47
  261. data/spec/unit/mutant/matcher/filter_spec.rb +0 -22
  262. data/spec/unit/mutant/matcher/method/instance_spec.rb +0 -164
  263. data/spec/unit/mutant/matcher/method/singleton_spec.rb +0 -90
  264. data/spec/unit/mutant/matcher/methods/instance_spec.rb +0 -54
  265. data/spec/unit/mutant/matcher/methods/singleton_spec.rb +0 -51
  266. data/spec/unit/mutant/matcher/namespace_spec.rb +0 -37
  267. data/spec/unit/mutant/matcher/null_spec.rb +0 -12
  268. data/spec/unit/mutant/matcher/scope_spec.rb +0 -35
  269. data/spec/unit/mutant/matcher/static_spec.rb +0 -13
  270. data/spec/unit/mutant/matcher_spec.rb +0 -102
  271. data/spec/unit/mutant/meta/example/dsl_spec.rb +0 -108
  272. data/spec/unit/mutant/meta/example/verification_spec.rb +0 -154
  273. data/spec/unit/mutant/meta/example_spec.rb +0 -34
  274. data/spec/unit/mutant/mutation_spec.rb +0 -140
  275. data/spec/unit/mutant/mutator/node_spec.rb +0 -52
  276. data/spec/unit/mutant/mutator_spec.rb +0 -21
  277. data/spec/unit/mutant/parallel/driver_spec.rb +0 -126
  278. data/spec/unit/mutant/parallel/source/array_spec.rb +0 -57
  279. data/spec/unit/mutant/parallel/worker_spec.rb +0 -206
  280. data/spec/unit/mutant/parallel_spec.rb +0 -115
  281. data/spec/unit/mutant/parser_spec.rb +0 -26
  282. data/spec/unit/mutant/range_spec.rb +0 -141
  283. data/spec/unit/mutant/registry_spec.rb +0 -74
  284. data/spec/unit/mutant/reporter/cli/printer/config_spec.rb +0 -17
  285. data/spec/unit/mutant/reporter/cli/printer/env_progress_spec.rb +0 -85
  286. data/spec/unit/mutant/reporter/cli/printer/env_result_spec.rb +0 -45
  287. data/spec/unit/mutant/reporter/cli/printer/isolation_result_spec.rb +0 -132
  288. data/spec/unit/mutant/reporter/cli/printer/mutation_progress_result_spec.rb +0 -25
  289. data/spec/unit/mutant/reporter/cli/printer/mutation_result_spec.rb +0 -153
  290. data/spec/unit/mutant/reporter/cli/printer/status_progressive_spec.rb +0 -45
  291. data/spec/unit/mutant/reporter/cli/printer/subject_progress_spec.rb +0 -36
  292. data/spec/unit/mutant/reporter/cli/printer/subject_result_spec.rb +0 -44
  293. data/spec/unit/mutant/reporter/cli/printer/test_result_spec.rb +0 -16
  294. data/spec/unit/mutant/reporter/cli/printer_spec.rb +0 -163
  295. data/spec/unit/mutant/reporter/cli_spec.rb +0 -137
  296. data/spec/unit/mutant/reporter/null_spec.rb +0 -14
  297. data/spec/unit/mutant/reporter/sequence_spec.rb +0 -31
  298. data/spec/unit/mutant/repository/diff/ranges_spec.rb +0 -180
  299. data/spec/unit/mutant/repository/diff_spec.rb +0 -122
  300. data/spec/unit/mutant/repository/subject_filter_spec.rb +0 -30
  301. data/spec/unit/mutant/require_highjack_spec.rb +0 -73
  302. data/spec/unit/mutant/result/class_methods_spec.rb +0 -51
  303. data/spec/unit/mutant/result/env_spec.rb +0 -161
  304. data/spec/unit/mutant/result/mutation_spec.rb +0 -70
  305. data/spec/unit/mutant/result/subject_spec.rb +0 -111
  306. data/spec/unit/mutant/result/test_spec.rb +0 -14
  307. data/spec/unit/mutant/result_spec.rb +0 -33
  308. data/spec/unit/mutant/runner/sink_spec.rb +0 -174
  309. data/spec/unit/mutant/runner_spec.rb +0 -121
  310. data/spec/unit/mutant/selector/expression_spec.rb +0 -62
  311. data/spec/unit/mutant/selector/null_spec.rb +0 -17
  312. data/spec/unit/mutant/subject/method/instance_spec.rb +0 -181
  313. data/spec/unit/mutant/subject/method/singleton_spec.rb +0 -61
  314. data/spec/unit/mutant/subject_spec.rb +0 -93
  315. data/spec/unit/mutant/transform/array_spec.rb +0 -92
  316. data/spec/unit/mutant/transform/bool_spec.rb +0 -63
  317. data/spec/unit/mutant/transform/error_spec.rb +0 -132
  318. data/spec/unit/mutant/transform/exception_spec.rb +0 -44
  319. data/spec/unit/mutant/transform/hash_spec.rb +0 -236
  320. data/spec/unit/mutant/transform/index_spec.rb +0 -92
  321. data/spec/unit/mutant/transform/named_spec.rb +0 -49
  322. data/spec/unit/mutant/transform/primitive_spec.rb +0 -56
  323. data/spec/unit/mutant/transform/sequence_spec.rb +0 -98
  324. data/spec/unit/mutant/util/one_spec.rb +0 -22
  325. data/spec/unit/mutant/warnings_spec.rb +0 -89
  326. data/spec/unit/mutant/world_spec.rb +0 -63
  327. data/spec/unit/mutant/zombifier_spec.rb +0 -122
  328. data/test_app/.rspec +0 -1
  329. data/test_app/Gemfile.minitest +0 -4
  330. data/test_app/Gemfile.rspec3.8 +0 -7
  331. data/test_app/lib/test_app.rb +0 -109
  332. data/test_app/lib/test_app/literal.rb +0 -35
  333. data/test_app/spec/spec_helper.rb +0 -9
  334. data/test_app/spec/unit/test_app/literal_spec.rb +0 -20
  335. data/test_app/test/unit/test_app/literal_test.rb +0 -16
@@ -13,9 +13,6 @@ module Mutant
13
13
 
14
14
  private
15
15
 
16
- # Emit mutations
17
- #
18
- # @return [undefined]
19
16
  def dispatch
20
17
  emit_singletons
21
18
  emit_left_mutations do |node|
@@ -14,24 +14,15 @@ module Mutant
14
14
 
15
15
  private
16
16
 
17
- # Emit mutations
18
- #
19
- # @return [undefined]
20
17
  def dispatch
21
18
  emit_name_mutation
22
19
  end
23
20
 
24
- # Emit name mutations
25
- #
26
- # @return [undefined]
27
21
  def emit_name_mutation
28
22
  return if skip?
29
23
  emit_name(:"#{UNDERSCORE}#{name}")
30
24
  end
31
25
 
32
- # Test if argument mutation is skipped
33
- #
34
- # @return [Boolean]
35
26
  def skip?
36
27
  name.to_s.start_with?(UNDERSCORE)
37
28
  end
@@ -50,18 +41,12 @@ module Mutant
50
41
 
51
42
  private
52
43
 
53
- # Emit mutations
54
- #
55
- # @return [undefined]
56
44
  def dispatch
57
45
  emit_name_mutation
58
46
  emit_required_mutation
59
47
  emit_default_mutations
60
48
  end
61
49
 
62
- # Emit required mutation
63
- #
64
- # @return [undefined]
65
50
  def emit_required_mutation
66
51
  emit(s(TYPE_MAP.fetch(node.type), name))
67
52
  end
@@ -12,18 +12,12 @@ module Mutant
12
12
 
13
13
  private
14
14
 
15
- # Emit mutations
16
- #
17
- # @return [undefined]
18
15
  def dispatch
19
16
  emit_argument_presence
20
17
  emit_argument_mutations
21
18
  emit_mlhs_expansion
22
19
  end
23
20
 
24
- # Emit argument presence mutation
25
- #
26
- # @return [undefined]
27
21
  def emit_argument_presence
28
22
  emit_type
29
23
 
@@ -34,9 +28,6 @@ module Mutant
34
28
  end
35
29
  end
36
30
 
37
- # Emit argument mutations
38
- #
39
- # @return [undefined]
40
31
  def emit_argument_mutations
41
32
  children.each_with_index do |child, index|
42
33
  Mutator.mutate(child).each do |mutant|
@@ -46,18 +37,10 @@ module Mutant
46
37
  end
47
38
  end
48
39
 
49
- # Test if child mutation is allowed
50
- #
51
- # @param [Parser::AST::Node]
52
- #
53
- # @return [Boolean]
54
40
  def invalid_argument_replacement?(mutant, index)
55
41
  n_arg?(mutant) && children[0...index].any?(&method(:n_optarg?))
56
42
  end
57
43
 
58
- # Emit mlhs expansions
59
- #
60
- # @return [undefined]
61
44
  def emit_mlhs_expansion
62
45
  mlhs_childs_with_index.each do |child, index|
63
46
  dup_children = children.dup
@@ -67,9 +50,6 @@ module Mutant
67
50
  end
68
51
  end
69
52
 
70
- # Multiple left hand side childs
71
- #
72
- # @return [Enumerable<Parser::AST::Node, Integer>]
73
53
  def mlhs_childs_with_index
74
54
  children.each_with_index.select do |child,|
75
55
  n_mlhs?(child)
@@ -11,9 +11,6 @@ module Mutant
11
11
 
12
12
  private
13
13
 
14
- # Emit mutations
15
- #
16
- # @return [undefined]
17
14
  def dispatch
18
15
  mutate_single_child do |child|
19
16
  emit(child)
@@ -17,9 +17,6 @@ module Mutant
17
17
 
18
18
  private
19
19
 
20
- # Emit mutations
21
- #
22
- # @return [undefined]
23
20
  def dispatch
24
21
  emit_singletons
25
22
  emit_promotions
@@ -29,35 +26,15 @@ module Mutant
29
26
  emit_right_mutations
30
27
  end
31
28
 
32
- # Emit operator mutations
33
- #
34
- # @return [undefined]
35
29
  def emit_operator_mutations
36
30
  emit(s(INVERSE.fetch(node.type), left, right))
37
31
  end
38
32
 
39
- # Emit promotions
40
- #
41
- # @return [undefined]
42
33
  def emit_promotions
43
34
  emit(left)
44
35
  emit(right)
45
36
  end
46
37
 
47
- # Emit left negation
48
- #
49
- # We do not emit right negation as the `and` and `or` nodes
50
- # in ruby are also used for control flow.
51
- #
52
- # Irrespective of their syntax, aka `||` parses internally to `or`.
53
- #
54
- # `do_a or do_b`. Negating left makes sense, negating right
55
- # only when the result is actually used.
56
- #
57
- # It *would* be possible to emit the right negation in case the use of the result is proved.
58
- # Like parent is an assignment to an {l,i}var. Dunno if we ever get the time to do that.
59
- #
60
- # @return [undefined]
61
38
  def emit_left_negation
62
39
  emit(s(node.type, n_not(left), right))
63
40
  end
@@ -11,9 +11,6 @@ module Mutant
11
11
 
12
12
  private
13
13
 
14
- # Emit mutations
15
- #
16
- # @return [undefined]
17
14
  def dispatch
18
15
  emit_singletons
19
16
  emit(send) unless n_lambda?(send)
@@ -23,9 +20,6 @@ module Mutant
23
20
  mutate_body
24
21
  end
25
22
 
26
- # Emit body mutations
27
- #
28
- # @return [undefined]
29
23
  def mutate_body
30
24
  emit_body(nil)
31
25
  emit_body(N_RAISE)
@@ -37,18 +31,12 @@ module Mutant
37
31
  mutate_body_receiver
38
32
  end
39
33
 
40
- # Test if body has control structures
41
- #
42
- # @return [Boolean]
43
34
  def body_has_control?
44
35
  AST.find_last_path(body) do |node|
45
36
  n_break?(node) || n_next?(node)
46
37
  end.any?
47
38
  end
48
39
 
49
- # Mutate method send in body scope of `send`
50
- #
51
- # @return [undefined]
52
40
  def mutate_body_receiver
53
41
  return if n_lambda?(send) || !n_send?(body)
54
42
 
@@ -57,9 +45,6 @@ module Mutant
57
45
  emit(s(:send, send, body_meta.selector, *body_meta.arguments))
58
46
  end
59
47
 
60
- # Test for valid send mutations
61
- #
62
- # @return [true, false, nil]
63
48
  def valid_send_mutation?(node)
64
49
  return unless n_send?(node)
65
50
 
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Mutant
4
+ class Mutator
5
+ class Node
6
+ class BlockPass < self
7
+
8
+ handle(:block_pass)
9
+
10
+ children :argument
11
+
12
+ private
13
+
14
+ def dispatch
15
+ emit_argument_mutations
16
+ emit_symbol_to_proc_mutations
17
+ end
18
+
19
+ def emit_symbol_to_proc_mutations
20
+ return unless n_sym?(argument)
21
+
22
+ Send::SELECTOR_REPLACEMENTS.fetch(*argument, EMPTY_ARRAY).each do |method|
23
+ emit_argument(s(:sym, method))
24
+ end
25
+ end
26
+ end # Block
27
+ end # Node
28
+ end # Mutator
29
+ end # Mutant
@@ -11,9 +11,6 @@ module Mutant
11
11
 
12
12
  private
13
13
 
14
- # Emit mutations
15
- #
16
- # @return [undefined]
17
14
  def dispatch
18
15
  super()
19
16
  emit_singletons
@@ -13,9 +13,6 @@ module Mutant
13
13
 
14
14
  private
15
15
 
16
- # Emit mutations
17
- #
18
- # @return [undefined]
19
16
  def dispatch
20
17
  emit_singletons
21
18
  emit_condition_mutations if condition
@@ -23,9 +20,6 @@ module Mutant
23
20
  emit_else_mutations
24
21
  end
25
22
 
26
- # Emit when mutations
27
- #
28
- # @return [undefined]
29
23
  def emit_when_mutations
30
24
  indices = children.each_index.drop(1).take(children.length - 2)
31
25
  one = indices.one?
@@ -35,9 +29,6 @@ module Mutant
35
29
  end
36
30
  end
37
31
 
38
- # Emit else mutations
39
- #
40
- # @return [undefined]
41
32
  def emit_else_mutations
42
33
  else_branch = children.last
43
34
  else_index = children.length - 1
@@ -11,9 +11,6 @@ module Mutant
11
11
 
12
12
  private
13
13
 
14
- # Emit mutations only for class body
15
- #
16
- # @return [undefined]
17
14
  def dispatch
18
15
  emit_body_mutations if body
19
16
  end
@@ -13,9 +13,6 @@ module Mutant
13
13
 
14
14
  private
15
15
 
16
- # Emit mutations
17
- #
18
- # @return [undefined]
19
16
  def dispatch
20
17
  emit_singletons
21
18
  emit_condition_mutations
@@ -11,9 +11,6 @@ module Mutant
11
11
 
12
12
  private
13
13
 
14
- # Emit mutations
15
- #
16
- # @return [undefined]
17
14
  def dispatch
18
15
  emit_singletons unless parent_node && n_const?(parent_node)
19
16
  emit_type(nil, *children.drop(1))
@@ -8,9 +8,6 @@ module Mutant
8
8
 
9
9
  private
10
10
 
11
- # Emit mutations
12
- #
13
- # @return [undefined]
14
11
  def dispatch
15
12
  emit_arguments_mutations
16
13
  emit_optarg_body_assignments
@@ -20,9 +17,6 @@ module Mutant
20
17
  emit_body_mutations if body
21
18
  end
22
19
 
23
- # Emit mutations with optional arguments as assignments in method
24
- #
25
- # @return [undefined]
26
20
  def emit_optarg_body_assignments
27
21
  arguments.children.each do |argument|
28
22
  next unless n_optarg?(argument) && AST::Meta::Optarg.new(argument).used?
@@ -31,11 +25,6 @@ module Mutant
31
25
  end
32
26
  end
33
27
 
34
- # Emit valid body ASTs depending on instance body
35
- #
36
- # @param node [Parser::AST::Node]
37
- #
38
- # @return [undefined]
39
28
  def emit_body_prepend(node)
40
29
  if body
41
30
  emit_body(s(:begin, node, body))
@@ -12,9 +12,6 @@ module Mutant
12
12
 
13
13
  private
14
14
 
15
- # Emit mutations
16
- #
17
- # @return [undefined]
18
15
  def dispatch
19
16
  emit_singletons
20
17
  emit(N_TRUE)
@@ -11,9 +11,6 @@ module Mutant
11
11
 
12
12
  private
13
13
 
14
- # Emit mutations
15
- #
16
- # @return [undefined]
17
14
  def dispatch
18
15
  super()
19
16
  emit_singletons
@@ -11,9 +11,6 @@ module Mutant
11
11
 
12
12
  private
13
13
 
14
- # Emit mutations
15
- #
16
- # @return [undefined]
17
14
  def dispatch
18
15
  super()
19
16
  emit_singletons
@@ -8,9 +8,6 @@ module Mutant
8
8
 
9
9
  private
10
10
 
11
- # Emit mutations
12
- #
13
- # @return [undefined]
14
11
  def dispatch
15
12
  children.each_with_index do |child, index|
16
13
  mutate_child(index) if child.instance_of?(::Parser::AST::Node)
@@ -12,9 +12,6 @@ module Mutant
12
12
 
13
13
  private
14
14
 
15
- # Emit mutations
16
- #
17
- # @return [undefined]
18
15
  def dispatch
19
16
  emit_singletons
20
17
  mutate_condition
@@ -22,9 +19,6 @@ module Mutant
22
19
  mutate_else_branch
23
20
  end
24
21
 
25
- # Emit condition mutations
26
- #
27
- # @return [undefined]
28
22
  def mutate_condition
29
23
  emit_condition_mutations do |node|
30
24
  !n_self?(node)
@@ -34,9 +28,6 @@ module Mutant
34
28
  emit_type(N_FALSE, if_branch, else_branch)
35
29
  end
36
30
 
37
- # Emit if branch mutations
38
- #
39
- # @return [undefined]
40
31
  def mutate_if_branch
41
32
  emit_type(condition, else_branch, nil) if else_branch
42
33
  return unless if_branch
@@ -45,9 +36,6 @@ module Mutant
45
36
  emit_type(condition, if_branch, nil)
46
37
  end
47
38
 
48
- # Emit else branch mutations
49
- #
50
- # @return [undefined]
51
39
  def mutate_else_branch
52
40
  return unless else_branch
53
41
  emit(else_branch)
@@ -14,9 +14,6 @@ module Mutant
14
14
 
15
15
  private
16
16
 
17
- # Emit mutations
18
- #
19
- # @return [undefined]
20
17
  def dispatch
21
18
  emit_singletons
22
19
  emit_receiver_mutations { |node| !n_nil?(node) }
@@ -26,9 +23,6 @@ module Mutant
26
23
  mutate_indices
27
24
  end
28
25
 
29
- # Emit send forms
30
- #
31
- # @return [undefined]
32
26
  def emit_send_forms
33
27
  return if left_assignment?
34
28
 
@@ -37,9 +31,6 @@ module Mutant
37
31
  end
38
32
  end
39
33
 
40
- # Emit mutation `foo[n..-1]` -> `foo.drop(n)`
41
- #
42
- # @return [undefined]
43
34
  def emit_drop_mutation
44
35
  return unless indices.one? && n_irange?(Mutant::Util.one(indices))
45
36
 
@@ -50,9 +41,6 @@ module Mutant
50
41
  emit(s(:send, receiver, :drop, start))
51
42
  end
52
43
 
53
- # Mutate indices
54
- #
55
- # @return [undefined]
56
44
  def mutate_indices
57
45
  children_indices(index_range).each do |index|
58
46
  emit_propagation(children.fetch(index)) unless left_assignment?
@@ -61,9 +49,6 @@ module Mutant
61
49
  end
62
50
  end
63
51
 
64
- # The index nodes
65
- #
66
- # @return [Enumerable<Parser::AST::Node>]
67
52
  def indices
68
53
  children[index_range]
69
54
  end
@@ -74,9 +59,6 @@ module Mutant
74
59
 
75
60
  private
76
61
 
77
- # The range index children can be found
78
- #
79
- # @return [Range]
80
62
  def index_range
81
63
  NO_VALUE_RANGE
82
64
  end
@@ -92,9 +74,6 @@ module Mutant
92
74
 
93
75
  private
94
76
 
95
- # Emit mutations
96
- #
97
- # @return [undefined]
98
77
  def dispatch
99
78
  super()
100
79
 
@@ -105,16 +84,10 @@ module Mutant
105
84
  mutate_child(children.length.pred)
106
85
  end
107
86
 
108
- # Emit index read
109
- #
110
- # @return [undefined]
111
87
  def emit_index_read
112
88
  emit(s(:index, receiver, *children[index_range]))
113
89
  end
114
90
 
115
- # Index indices
116
- #
117
- # @return [Range<Integer>]
118
91
  def index_range
119
92
  if left_assignment?
120
93
  NO_VALUE_RANGE