mutant 0.9.8 → 0.9.13

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -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
  return unless value
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Mutant
4
+ class Mutator
5
+ class Node
6
+ # Namespace for singleton class mutations (class << some_obj)
7
+ class Sclass < self
8
+ handle :sclass
9
+
10
+ children :expr, :body
11
+
12
+ private
13
+
14
+ def dispatch
15
+ emit_body_mutations if body
16
+ end
17
+ end # Class
18
+ end # Node
19
+ end # Mutator
20
+ end # Mutant
@@ -36,8 +36,8 @@ module Mutant
36
36
  :== => %i[eql? equal?],
37
37
  :>= => %i[> == eql? equal?],
38
38
  :<= => %i[< == eql? equal?],
39
- :> => %i[== >= eql? equal?],
40
- :< => %i[== <= eql? equal?]
39
+ :> => %i[== eql? equal?],
40
+ :< => %i[== eql? equal?]
41
41
  )
42
42
 
43
43
  RECEIVER_SELECTOR_REPLACEMENTS = IceNine.deep_freeze(
@@ -48,9 +48,6 @@ module Mutant
48
48
 
49
49
  private
50
50
 
51
- # Emit mutations
52
- #
53
- # @return [undefined]
54
51
  def dispatch
55
52
  emit_singletons
56
53
 
@@ -63,23 +60,14 @@ module Mutant
63
60
  end
64
61
  end
65
62
 
66
- # AST metadata for node
67
- #
68
- # @return [AST::Meta::Send]
69
63
  def meta
70
64
  AST::Meta::Send.new(node)
71
65
  end
72
66
  memoize :meta
73
67
 
74
- # Arguments being send
75
- #
76
- # @return [Enumerable<Parser::AST::Node>]
77
68
  alias_method :arguments, :remaining_children
78
69
  private :arguments
79
70
 
80
- # Perform normal, non special case dispatch
81
- #
82
- # @return [undefined]
83
71
  def normal_dispatch
84
72
  emit_naked_receiver
85
73
  emit_selector_replacement
@@ -90,10 +78,9 @@ module Mutant
90
78
  mutate_arguments
91
79
  end
92
80
 
93
- # Emit mutations which only correspond to one selector
94
- #
95
- # @return [undefined]
96
81
  def emit_selector_specific_mutations
82
+ emit_array_mutation
83
+ emit_static_send
97
84
  emit_const_get_mutation
98
85
  emit_integer_mutation
99
86
  emit_dig_mutation
@@ -101,9 +88,28 @@ module Mutant
101
88
  emit_lambda_mutation
102
89
  end
103
90
 
104
- # Emit selector mutations specific to top level constants
105
- #
106
- # @return [undefined]
91
+ def emit_array_mutation
92
+ return unless selector.equal?(:Array) && possible_kernel_method?
93
+
94
+ emit(s(:array, *arguments))
95
+ end
96
+
97
+ def emit_static_send
98
+ return unless %i[__send__ send public_send].include?(selector)
99
+
100
+ dynamic_selector, *actual_arguments = *arguments
101
+
102
+ return unless n_sym?(dynamic_selector)
103
+
104
+ method_name = AST::Meta::Symbol.new(dynamic_selector).name
105
+
106
+ emit(s(node.type, receiver, method_name, *actual_arguments))
107
+ end
108
+
109
+ def possible_kernel_method?
110
+ receiver.nil? || receiver.eql?(s(:const, nil, :Kernel))
111
+ end
112
+
107
113
  def emit_receiver_selector_mutations
108
114
  return unless meta.receiver_possible_top_level_const?
109
115
 
@@ -113,9 +119,6 @@ module Mutant
113
119
  .each(&method(:emit_selector))
114
120
  end
115
121
 
116
- # Emit mutation from `!!foo` to `foo`
117
- #
118
- # @return [undefined]
119
122
  def emit_double_negation_mutation
120
123
  return unless selector.equal?(:!) && n_send?(receiver)
121
124
 
@@ -123,19 +126,10 @@ module Mutant
123
126
  emit(negated.receiver) if negated.selector.equal?(:!)
124
127
  end
125
128
 
126
- # Emit mutation from proc definition to lambda
127
- #
128
- # @return [undefined]
129
129
  def emit_lambda_mutation
130
130
  emit(s(:send, nil, :lambda)) if meta.proc?
131
131
  end
132
132
 
133
- # Emit mutation for `#dig`
134
- #
135
- # - Mutates `foo.dig(a, b)` to `foo.fetch(a).dig(b)`
136
- # - Mutates `foo.dig(a)` to `foo.fetch(a)`
137
- #
138
- # @return [undefined]
139
133
  def emit_dig_mutation
140
134
  return if !selector.equal?(:dig) || arguments.none?
141
135
 
@@ -148,41 +142,26 @@ module Mutant
148
142
  emit(s(:send, fetch_mutation, :dig, *tail))
149
143
  end
150
144
 
151
- # Emit mutation from `to_i` to `Integer(...)`
152
- #
153
- # @return [undefined]
154
145
  def emit_integer_mutation
155
146
  return unless selector.equal?(:to_i)
156
147
 
157
148
  emit(s(:send, nil, :Integer, receiver))
158
149
  end
159
150
 
160
- # Emit mutation from `const_get` to const literal
161
- #
162
- # @return [undefined]
163
151
  def emit_const_get_mutation
164
152
  return unless selector.equal?(:const_get) && n_sym?(arguments.first)
165
153
 
166
154
  emit(s(:const, receiver, AST::Meta::Symbol.new(arguments.first).name))
167
155
  end
168
156
 
169
- # Emit selector replacement
170
- #
171
- # @return [undefined]
172
157
  def emit_selector_replacement
173
158
  SELECTOR_REPLACEMENTS.fetch(selector, EMPTY_ARRAY).each(&method(:emit_selector))
174
159
  end
175
160
 
176
- # Emit naked receiver mutation
177
- #
178
- # @return [undefined]
179
161
  def emit_naked_receiver
180
162
  emit(receiver) if receiver
181
163
  end
182
164
 
183
- # Mutate arguments
184
- #
185
- # @return [undefined]
186
165
  def mutate_arguments
187
166
  emit_type(receiver, selector)
188
167
  remaining_children_with_index.each do |_node, index|
@@ -191,25 +170,14 @@ module Mutant
191
170
  end
192
171
  end
193
172
 
194
- # Mutate argument
195
- #
196
- # @param [Integer] index
197
- #
198
- # @return [undefined]
199
173
  def mutate_argument_index(index)
200
174
  mutate_child(index) { |node| !n_begin?(node) }
201
175
  end
202
176
 
203
- # Emit argument propagation
204
- #
205
- # @return [undefined]
206
177
  def emit_argument_propagation
207
178
  emit_propagation(Mutant::Util.one(arguments)) if arguments.one?
208
179
  end
209
180
 
210
- # Emit receiver mutations
211
- #
212
- # @return [undefined]
213
181
  def mutate_receiver
214
182
  return unless receiver
215
183
  emit_implicit_self
@@ -218,9 +186,6 @@ module Mutant
218
186
  end
219
187
  end
220
188
 
221
- # Emit implicit self mutation
222
- #
223
- # @return [undefined]
224
189
  def emit_implicit_self
225
190
  emit_receiver(nil) if n_self?(receiver) && !(
226
191
  KEYWORDS.include?(selector) ||
@@ -12,26 +12,17 @@ module Mutant
12
12
 
13
13
  private
14
14
 
15
- # Emit mutations
16
- #
17
- # @return [undefined]
18
15
  def dispatch
19
16
  normal_dispatch
20
17
  emit_attribute_read
21
18
  end
22
19
 
23
- # Mutate arguments
24
- #
25
- # @return [undefined]
26
20
  def mutate_arguments
27
21
  remaining_children_indices.each do |index|
28
22
  mutate_child(index)
29
23
  end
30
24
  end
31
25
 
32
- # Emit attribute read
33
- #
34
- # @return [undefined]
35
26
  def emit_attribute_read
36
27
  emit_type(receiver, selector[ATTRIBUTE_RANGE].to_sym)
37
28
  end
@@ -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(left)
20
17
  emit_left_mutations
@@ -24,9 +21,6 @@ module Mutant
24
21
  emit_not_equality_mutations
25
22
  end
26
23
 
27
- # Emit mutations for `!=`
28
- #
29
- # @return [undefined]
30
24
  def emit_not_equality_mutations
31
25
  return unless operator.equal?(:'!=')
32
26
 
@@ -34,11 +28,6 @@ module Mutant
34
28
  emit_not_equality_mutation(:equal?)
35
29
  end
36
30
 
37
- # Emit negated method sends with specified operator
38
- #
39
- # @param new_operator [Symbol] selector to be negated
40
- #
41
- # @return [undefined]
42
31
  def emit_not_equality_mutation(new_operator)
43
32
  emit(n_not(s(:send, left, new_operator, right)))
44
33
  end
@@ -10,9 +10,6 @@ module Mutant
10
10
 
11
11
  private
12
12
 
13
- # Emit mutations
14
- #
15
- # @return [undefined]
16
13
  def dispatch
17
14
  super()
18
15
  emit(s(:send, *children))
@@ -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_expression_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
19
16
  emit(N_EMPTY_SUPER)
@@ -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
  if body
19
16
  mutate_body
@@ -23,9 +20,6 @@ module Mutant
23
20
  mutate_conditions
24
21
  end
25
22
 
26
- # Emit condition mutations
27
- #
28
- # @return [undefined]
29
23
  def mutate_conditions
30
24
  conditions = children.length - 1
31
25
  children[0..-2].each_index do |index|
@@ -34,27 +28,14 @@ module Mutant
34
28
  end
35
29
  end
36
30
 
37
- # Emit body mutations
38
- #
39
- # @return [undefined]
40
31
  def mutate_body
41
32
  mutate_child(body_index)
42
33
  end
43
34
 
44
- # Body node
45
- #
46
- # @return [Parser::AST::Node]
47
- # if body is present
48
- #
49
- # @return [nil]
50
- # otherwise
51
35
  def body
52
36
  children.fetch(body_index)
53
37
  end
54
38
 
55
- # Index of body node
56
- #
57
- # @return [Integer]
58
39
  def body_index
59
40
  children.length - 1
60
41
  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
  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
  emit_singletons
19
16
  emit(N_EMPTY_SUPER)
@@ -12,9 +12,6 @@ module Mutant
12
12
 
13
13
  private
14
14
 
15
- # Emit element presence mutations
16
- #
17
- # @return [undefined]
18
15
  def dispatch
19
16
  input.each_index do |index|
20
17
  dup = dup_input
@@ -30,9 +27,6 @@ module Mutant
30
27
 
31
28
  private
32
29
 
33
- # Emit mutations
34
- #
35
- # @return [undefined]
36
30
  def dispatch
37
31
  input.each_with_index do |element, index|
38
32
  Mutator.mutate(element).each do |mutation|
@@ -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((input.to_s + POSTFIX).to_sym)
19
16
  end
@@ -36,24 +36,11 @@ module Mutant
36
36
  )
37
37
  end
38
38
 
39
- # Start threads
40
- #
41
- # @param [Config] config
42
- # @param [Worker] worker
43
- #
44
- # @return [Array<Thread>]
45
39
  def self.threads(config, worker)
46
40
  Array.new(config.jobs) { config.thread.new(&worker.method(:call)) }
47
41
  end
48
42
  private_class_method :threads
49
43
 
50
- # Create shared variable
51
- #
52
- # @param [Class] klass
53
- # @param [Config] config
54
- #
55
- # @return [Variable]
56
- #
57
44
  # ignore :reek:LongParameterList
58
45
  def self.shared(klass, config, **attributes)
59
46
  klass.new(
@@ -27,22 +27,12 @@ module Mutant
27
27
 
28
28
  private
29
29
 
30
- # Possibly finalize the exeuction
31
- #
32
- # @param [Status]
33
- #
34
- # @return [Status]
35
30
  def finalize(status)
36
31
  status.tap do
37
32
  threads.each(&:join) if status.done?
38
33
  end
39
34
  end
40
35
 
41
- # Get status
42
- #
43
- # @return [Status]
44
- #
45
- # ignore :reek:NestedIterators
46
36
  def status
47
37
  var_active_jobs.with do |active_jobs|
48
38
  var_sink.with do |sink|