mutant 0.8.8 → 0.8.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (211) hide show
  1. checksums.yaml +4 -4
  2. data/Changelog.md +9 -0
  3. data/README.md +1 -1
  4. data/Rakefile +12 -8
  5. data/bin/mutant +5 -1
  6. data/config/flay.yml +1 -1
  7. data/lib/mutant.rb +18 -17
  8. data/lib/mutant/actor.rb +1 -7
  9. data/lib/mutant/actor/env.rb +0 -4
  10. data/lib/mutant/actor/mailbox.rb +0 -4
  11. data/lib/mutant/actor/receiver.rb +0 -4
  12. data/lib/mutant/actor/sender.rb +0 -2
  13. data/lib/mutant/ast.rb +1 -5
  14. data/lib/mutant/ast/meta/const.rb +0 -2
  15. data/lib/mutant/ast/meta/optarg.rb +0 -2
  16. data/lib/mutant/ast/meta/send.rb +0 -12
  17. data/lib/mutant/ast/named_children.rb +0 -10
  18. data/lib/mutant/ast/sexp.rb +1 -5
  19. data/lib/mutant/cli.rb +19 -38
  20. data/lib/mutant/color.rb +1 -7
  21. data/lib/mutant/config.rb +11 -7
  22. data/lib/mutant/context.rb +0 -4
  23. data/lib/mutant/context/scope.rb +0 -18
  24. data/lib/mutant/delegator.rb +0 -6
  25. data/lib/mutant/diff.rb +0 -18
  26. data/lib/mutant/env.rb +8 -24
  27. data/lib/mutant/env/bootstrap.rb +18 -41
  28. data/lib/mutant/expression.rb +0 -8
  29. data/lib/mutant/expression/method.rb +6 -7
  30. data/lib/mutant/expression/methods.rb +5 -9
  31. data/lib/mutant/expression/namespace.rb +0 -13
  32. data/lib/mutant/expression/parser.rb +0 -6
  33. data/lib/mutant/integration.rb +2 -20
  34. data/lib/mutant/isolation.rb +0 -4
  35. data/lib/mutant/loader.rb +20 -35
  36. data/lib/mutant/matcher.rb +1 -1
  37. data/lib/mutant/matcher/chain.rb +1 -3
  38. data/lib/mutant/matcher/compiler.rb +0 -8
  39. data/lib/mutant/matcher/config.rb +2 -10
  40. data/lib/mutant/matcher/filter.rb +1 -3
  41. data/lib/mutant/matcher/method.rb +4 -26
  42. data/lib/mutant/matcher/method/instance.rb +1 -7
  43. data/lib/mutant/matcher/method/singleton.rb +0 -12
  44. data/lib/mutant/matcher/methods.rb +1 -19
  45. data/lib/mutant/matcher/namespace.rb +1 -7
  46. data/lib/mutant/matcher/null.rb +1 -3
  47. data/lib/mutant/matcher/scope.rb +1 -5
  48. data/lib/mutant/matcher/static.rb +0 -2
  49. data/lib/mutant/meta.rb +0 -2
  50. data/lib/mutant/meta/example.rb +0 -28
  51. data/lib/mutant/meta/example/dsl.rb +2 -16
  52. data/lib/mutant/mutation.rb +9 -18
  53. data/lib/mutant/mutator.rb +0 -24
  54. data/lib/mutant/mutator/node.rb +1 -33
  55. data/lib/mutant/mutator/node/and_asgn.rb +0 -2
  56. data/lib/mutant/mutator/node/argument.rb +0 -10
  57. data/lib/mutant/mutator/node/arguments.rb +0 -12
  58. data/lib/mutant/mutator/node/begin.rb +0 -4
  59. data/lib/mutant/mutator/node/binary.rb +2 -11
  60. data/lib/mutant/mutator/node/block.rb +0 -6
  61. data/lib/mutant/mutator/node/break.rb +0 -2
  62. data/lib/mutant/mutator/node/case.rb +0 -6
  63. data/lib/mutant/mutator/node/conditional_loop.rb +0 -2
  64. data/lib/mutant/mutator/node/const.rb +1 -3
  65. data/lib/mutant/mutator/node/define.rb +4 -11
  66. data/lib/mutant/mutator/node/defined.rb +0 -2
  67. data/lib/mutant/mutator/node/dstr.rb +0 -2
  68. data/lib/mutant/mutator/node/dsym.rb +0 -2
  69. data/lib/mutant/mutator/node/generic.rb +1 -3
  70. data/lib/mutant/mutator/node/if.rb +0 -8
  71. data/lib/mutant/mutator/node/kwbegin.rb +0 -2
  72. data/lib/mutant/mutator/node/literal/array.rb +0 -4
  73. data/lib/mutant/mutator/node/literal/boolean.rb +0 -2
  74. data/lib/mutant/mutator/node/literal/fixnum.rb +0 -6
  75. data/lib/mutant/mutator/node/literal/float.rb +0 -6
  76. data/lib/mutant/mutator/node/literal/hash.rb +0 -6
  77. data/lib/mutant/mutator/node/literal/nil.rb +0 -2
  78. data/lib/mutant/mutator/node/literal/range.rb +0 -8
  79. data/lib/mutant/mutator/node/literal/regex.rb +0 -4
  80. data/lib/mutant/mutator/node/literal/string.rb +0 -2
  81. data/lib/mutant/mutator/node/literal/symbol.rb +0 -2
  82. data/lib/mutant/mutator/node/masgn.rb +0 -2
  83. data/lib/mutant/mutator/node/match_current_line.rb +0 -2
  84. data/lib/mutant/mutator/node/mlhs.rb +0 -2
  85. data/lib/mutant/mutator/node/named_value/access.rb +0 -8
  86. data/lib/mutant/mutator/node/named_value/constant_assignment.rb +1 -7
  87. data/lib/mutant/mutator/node/named_value/variable_assignment.rb +0 -4
  88. data/lib/mutant/mutator/node/next.rb +0 -2
  89. data/lib/mutant/mutator/node/noop.rb +0 -2
  90. data/lib/mutant/mutator/node/nthref.rb +0 -2
  91. data/lib/mutant/mutator/node/op_asgn.rb +0 -2
  92. data/lib/mutant/mutator/node/or_asgn.rb +0 -2
  93. data/lib/mutant/mutator/node/resbody.rb +0 -4
  94. data/lib/mutant/mutator/node/rescue.rb +0 -10
  95. data/lib/mutant/mutator/node/return.rb +0 -2
  96. data/lib/mutant/mutator/node/send.rb +4 -32
  97. data/lib/mutant/mutator/node/send/attribute_assignment.rb +0 -6
  98. data/lib/mutant/mutator/node/send/binary.rb +0 -6
  99. data/lib/mutant/mutator/node/send/index.rb +0 -6
  100. data/lib/mutant/mutator/node/splat.rb +0 -2
  101. data/lib/mutant/mutator/node/super.rb +0 -2
  102. data/lib/mutant/mutator/node/when.rb +0 -10
  103. data/lib/mutant/mutator/node/yield.rb +0 -2
  104. data/lib/mutant/mutator/node/zsuper.rb +0 -2
  105. data/lib/mutant/mutator/registry.rb +0 -6
  106. data/lib/mutant/mutator/util.rb +0 -4
  107. data/lib/mutant/mutator/util/array.rb +0 -6
  108. data/lib/mutant/mutator/util/symbol.rb +0 -2
  109. data/lib/mutant/parallel.rb +21 -17
  110. data/lib/mutant/parallel/master.rb +0 -28
  111. data/lib/mutant/parallel/source.rb +0 -10
  112. data/lib/mutant/parallel/worker.rb +15 -10
  113. data/lib/mutant/parser.rb +23 -0
  114. data/lib/mutant/reporter.rb +5 -8
  115. data/lib/mutant/reporter/cli.rb +1 -15
  116. data/lib/mutant/reporter/cli/format.rb +3 -25
  117. data/lib/mutant/reporter/cli/printer.rb +0 -18
  118. data/lib/mutant/reporter/cli/printer/config.rb +0 -2
  119. data/lib/mutant/reporter/cli/printer/env_progress.rb +0 -2
  120. data/lib/mutant/reporter/cli/printer/env_result.rb +0 -2
  121. data/lib/mutant/reporter/cli/printer/mutation_progress_result.rb +0 -4
  122. data/lib/mutant/reporter/cli/printer/mutation_result.rb +0 -16
  123. data/lib/mutant/reporter/cli/printer/status.rb +0 -6
  124. data/lib/mutant/reporter/cli/printer/status_progressive.rb +0 -4
  125. data/lib/mutant/reporter/cli/printer/subject_progress.rb +0 -8
  126. data/lib/mutant/reporter/cli/printer/subject_result.rb +0 -2
  127. data/lib/mutant/reporter/cli/printer/test_result.rb +0 -2
  128. data/lib/mutant/reporter/cli/tput.rb +0 -4
  129. data/lib/mutant/repository.rb +4 -22
  130. data/lib/mutant/require_highjack.rb +0 -2
  131. data/lib/mutant/result.rb +23 -43
  132. data/lib/mutant/runner.rb +7 -20
  133. data/lib/mutant/runner/sink.rb +43 -86
  134. data/lib/mutant/selector.rb +0 -2
  135. data/lib/mutant/selector/expression.rb +0 -2
  136. data/lib/mutant/subject.rb +0 -22
  137. data/lib/mutant/subject/method.rb +2 -10
  138. data/lib/mutant/subject/method/instance.rb +0 -6
  139. data/lib/mutant/subject/method/singleton.rb +0 -2
  140. data/lib/mutant/test.rb +4 -3
  141. data/lib/mutant/version.rb +1 -1
  142. data/lib/mutant/warning_filter.rb +0 -10
  143. data/lib/mutant/zombifier.rb +5 -20
  144. data/meta/or_asgn.rb +6 -0
  145. data/meta/send.rb +29 -0
  146. data/mutant-rspec.gemspec +1 -1
  147. data/spec/integration/mutant/rspec_spec.rb +1 -1
  148. data/spec/integrations.yml +2 -3
  149. data/spec/shared/method_matcher_behavior.rb +7 -7
  150. data/spec/spec_helper.rb +2 -9
  151. data/spec/support/corpus.rb +37 -30
  152. data/spec/support/rb_bug.rb +1 -2
  153. data/spec/support/ruby_vm.rb +6 -3
  154. data/spec/support/shared_context.rb +19 -20
  155. data/spec/unit/mutant/actor/binding_spec.rb +6 -6
  156. data/spec/unit/mutant/actor/env_spec.rb +2 -2
  157. data/spec/unit/mutant/actor/mailbox_spec.rb +6 -6
  158. data/spec/unit/mutant/actor/message_spec.rb +2 -2
  159. data/spec/unit/mutant/actor/receiver_spec.rb +4 -4
  160. data/spec/unit/mutant/actor/sender_spec.rb +6 -6
  161. data/spec/unit/mutant/ast_spec.rb +9 -0
  162. data/spec/unit/mutant/cli_spec.rb +16 -10
  163. data/spec/unit/mutant/context/scope/root_spec.rb +1 -1
  164. data/spec/unit/mutant/context/scope/unqualified_name_spec.rb +1 -1
  165. data/spec/unit/mutant/context/scope_spec.rb +3 -3
  166. data/spec/unit/mutant/context_spec.rb +0 -22
  167. data/spec/unit/mutant/env/boostrap_spec.rb +34 -41
  168. data/spec/unit/mutant/env_spec.rb +74 -32
  169. data/spec/unit/mutant/integration/rspec_spec.rb +23 -17
  170. data/spec/unit/mutant/integration_spec.rb +4 -4
  171. data/spec/unit/mutant/isolation_spec.rb +4 -4
  172. data/spec/unit/mutant/loader_spec.rb +42 -0
  173. data/spec/unit/mutant/matcher/compiler_spec.rb +3 -3
  174. data/spec/unit/mutant/matcher/config_spec.rb +1 -1
  175. data/spec/unit/mutant/matcher/method/instance_spec.rb +8 -1
  176. data/spec/unit/mutant/matcher/method/singleton_spec.rb +8 -1
  177. data/spec/unit/mutant/matcher/namespace_spec.rb +7 -8
  178. data/spec/unit/mutant/matcher/null_spec.rb +3 -2
  179. data/spec/unit/mutant/mutation_spec.rb +11 -5
  180. data/spec/unit/mutant/mutator/registry_spec.rb +1 -1
  181. data/spec/unit/mutant/parallel/master_spec.rb +9 -9
  182. data/spec/unit/mutant/parallel/source/array_spec.rb +3 -3
  183. data/spec/unit/mutant/parallel/worker_spec.rb +5 -5
  184. data/spec/unit/mutant/parallel_spec.rb +4 -4
  185. data/spec/unit/mutant/parser_spec.rb +24 -0
  186. data/spec/unit/mutant/reporter/cli/printer_spec.rb +3 -3
  187. data/spec/unit/mutant/reporter/cli/tput_spec.rb +2 -2
  188. data/spec/unit/mutant/reporter/cli_spec.rb +7 -7
  189. data/spec/unit/mutant/reporter/null_spec.rb +5 -4
  190. data/spec/unit/mutant/repository/diff_spec.rb +30 -18
  191. data/spec/unit/mutant/repository/subject_filter_spec.rb +5 -5
  192. data/spec/unit/mutant/require_highjack_spec.rb +1 -1
  193. data/spec/unit/mutant/result/env_spec.rb +9 -9
  194. data/spec/unit/mutant/result/subject_spec.rb +5 -5
  195. data/spec/unit/mutant/runner/driver_spec.rb +4 -4
  196. data/spec/unit/mutant/runner/{sink/mutation_spec.rb → sink_spec.rb} +16 -4
  197. data/spec/unit/mutant/runner_spec.rb +31 -31
  198. data/spec/unit/mutant/selector/expression_spec.rb +8 -8
  199. data/spec/unit/mutant/subject/method/instance_spec.rb +9 -3
  200. data/spec/unit/mutant/subject/method/singleton_spec.rb +1 -1
  201. data/spec/unit/mutant/subject_spec.rb +1 -5
  202. data/spec/unit/mutant_spec.rb +3 -3
  203. metadata +9 -15
  204. data/config/mutant.yml +0 -14
  205. data/lib/mutant/cache.rb +0 -29
  206. data/lib/mutant/reporter/trace.rb +0 -36
  207. data/spec/support/rspec.rb +0 -21
  208. data/spec/unit/mutant/cache_spec.rb +0 -22
  209. data/spec/unit/mutant/loader/eval_spec.rb +0 -44
  210. data/spec/unit/mutant/reporter/trace_spec.rb +0 -21
  211. data/test_app/Gemfile.rspec3.2 +0 -7
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d83617d43f73b49c391d1b7e8f3317a666297c83
4
- data.tar.gz: 186b8ce58089718ba3cafa1c08f609b89941541e
3
+ metadata.gz: 6629a951cb8a81c688c0adc0acac1f3ff41f13b6
4
+ data.tar.gz: b8e775063ca733fe989083a38c31ef680135cbc1
5
5
  SHA512:
6
- metadata.gz: 3d4ee1e94a96ba909cf327bde6afdca8ff5e50f80603ca8835115fdba2abbfa05ad89897366908f8b64bca2e9302605e7accddf1167260c187cf4e40417d0df5
7
- data.tar.gz: 7b599e22fa7ddd03e9f9ac91af9ce0e730b155c8df2b5ab1b5a67fc8cd62f8bf8972ca8df64b45fb5114a556e7416f3c86baf666ea62f5de5201e8b068406afc
6
+ metadata.gz: f11084993d2875f56e6fd86174eaae8a1b8681feee2f81d4442914fc63ab9a7e8a9be395145b55b424519f5c7975f114bf5adf0c7e01ce1dca5b2aa091fd0364
7
+ data.tar.gz: 44e651cc4312db4388d975f1955791966055c67fc4a648a297e34535d9f47cea0588e94921098416d2a0636d0d4d26e017a75377960beeb28dcfa8ad555032c0
@@ -1,5 +1,14 @@
1
+ # v0.8.9 2016-01-05
2
+
3
+ * Add mutation from `Hash#[]` to `Hash#key?` (#511)
4
+ * Add mutation from `Hash#fetch` to `Hash#key?` (#511)
5
+ * Add mutation from `#at` to `#key?` (#511)
6
+ * Add mutation from `Hash#values_at` to `Hash#fetch_values` (#510)
7
+
1
8
  # v0.8.8 2015-11-15
2
9
 
10
+ * Drop support for rspec-3.2
11
+ * Remove CI specific job number default
3
12
  * Add support for rspec-3.3.4
4
13
  * Add mutations/s performance metric to report
5
14
 
data/README.md CHANGED
@@ -286,7 +286,7 @@ people do talks about it at conferences, user groups or other chances. Thanks fo
286
286
  As I (the author @mbj) am not too happy with some of the facts being presented about
287
287
  mutant the last month.
288
288
 
289
- So if you plan to do a presentation: I offer to review your slides / talk - for free off course.
289
+ So if you plan to do a presentation: I offer to review your slides / talk - for free of course.
290
290
  My intention is NOT to change your bias pro / against this tool. Just to help to fix
291
291
  invalid statements about the tool.
292
292
 
data/Rakefile CHANGED
@@ -6,17 +6,21 @@ Rake.application.load_imports
6
6
 
7
7
  task('metrics:mutant').clear
8
8
  namespace :metrics do
9
- task :mutant => :coverage do
10
- success = Kernel.system(*%w[
9
+ task mutant: :coverage do
10
+ arguments = %w[
11
11
  bundle exec mutant
12
- --zombie
13
- --use rspec
12
+ --ignore-subject Mutant::Meta*
14
13
  --include lib
15
- --require mutant
16
14
  --since HEAD~1
17
- --
18
- Mutant*
19
- ]) or fail 'Mutant task is not successful'
15
+ --require mutant
16
+ --use rspec
17
+ --zombie
18
+ ]
19
+ arguments.concat(%W[--jobs 4]) if ENV.key?('CIRCLE_CI')
20
+
21
+ arguments.concat(%w[-- Mutant*])
22
+
23
+ success = Kernel.system(*arguments) or fail 'Mutant task is not successful'
20
24
  end
21
25
  end
22
26
 
data/bin/mutant CHANGED
@@ -15,7 +15,11 @@ namespace =
15
15
  load_path: $LOAD_PATH,
16
16
  kernel: Kernel,
17
17
  pathname: Pathname,
18
- require_highjack: Mutant::RequireHighjack.method(:call).to_proc.curry.call(Kernel),
18
+ require_highjack: Mutant::RequireHighjack
19
+ .method(:call)
20
+ .to_proc
21
+ .curry
22
+ .call(Kernel),
19
23
  root_require: 'mutant',
20
24
  includes: %w[
21
25
  mutant
@@ -1,3 +1,3 @@
1
1
  ---
2
2
  threshold: 18
3
- total_score: 1232
3
+ total_score: 1173
@@ -23,6 +23,8 @@ require 'unparser'
23
23
  Thread.abort_on_exception = true
24
24
 
25
25
  # Library namespace
26
+ #
27
+ # @api private
26
28
  module Mutant
27
29
  EMPTY_STRING = ''.freeze
28
30
  EMPTY_ARRAY = [].freeze
@@ -32,8 +34,6 @@ module Mutant
32
34
  # Test if CI is detected via environment
33
35
  #
34
36
  # @return [Boolean]
35
- #
36
- # @api private
37
37
  def self.ci?
38
38
  ENV.key?('CI')
39
39
  end
@@ -60,7 +60,7 @@ require 'mutant/actor/receiver'
60
60
  require 'mutant/actor/sender'
61
61
  require 'mutant/actor/mailbox'
62
62
  require 'mutant/actor/env'
63
- require 'mutant/cache'
63
+ require 'mutant/parser'
64
64
  require 'mutant/delegator'
65
65
  require 'mutant/isolation'
66
66
  require 'mutant/parallel'
@@ -69,8 +69,8 @@ require 'mutant/parallel/worker'
69
69
  require 'mutant/parallel/source'
70
70
  require 'mutant/warning_filter'
71
71
  require 'mutant/require_highjack'
72
- require 'mutant/mutator'
73
72
  require 'mutant/mutation'
73
+ require 'mutant/mutator'
74
74
  require 'mutant/mutator/registry'
75
75
  require 'mutant/mutator/util'
76
76
  require 'mutant/mutator/util/array'
@@ -168,7 +168,6 @@ require 'mutant/runner/sink'
168
168
  require 'mutant/result'
169
169
  require 'mutant/reporter'
170
170
  require 'mutant/reporter/null'
171
- require 'mutant/reporter/trace'
172
171
  require 'mutant/reporter/cli'
173
172
  require 'mutant/reporter/cli/printer'
174
173
  require 'mutant/reporter/cli/printer/config'
@@ -189,26 +188,28 @@ require 'mutant/zombifier'
189
188
  module Mutant
190
189
  # Reopen class to initialize constant to avoid dep circle
191
190
  class Config
192
- CI_DEFAULT_PROCESSOR_COUNT = 4
193
-
194
191
  DEFAULT = new(
195
192
  debug: false,
196
- fail_fast: false,
197
- integration: Integration::Null,
198
- matcher: Matcher::Config::DEFAULT,
199
- includes: EMPTY_ARRAY,
200
- requires: EMPTY_ARRAY,
201
- isolation: Mutant::Isolation::Fork,
202
- reporter: Reporter::CLI.build($stdout),
203
- zombie: false,
204
- jobs: Mutant.ci? ? CI_DEFAULT_PROCESSOR_COUNT : ::Parallel.processor_count,
205
193
  expected_coverage: Rational(1),
206
194
  expression_parser: Expression::Parser.new([
207
195
  Expression::Method,
208
196
  Expression::Methods,
209
197
  Expression::Namespace::Exact,
210
198
  Expression::Namespace::Recursive
211
- ])
199
+ ]),
200
+ fail_fast: false,
201
+ includes: EMPTY_ARRAY,
202
+ integration: Integration::Null,
203
+ isolation: Mutant::Isolation::Fork,
204
+ jobs: ::Parallel.processor_count,
205
+ kernel: Kernel,
206
+ load_path: $LOAD_PATH,
207
+ matcher: Matcher::Config::DEFAULT,
208
+ open3: Open3,
209
+ pathname: Pathname,
210
+ requires: EMPTY_ARRAY,
211
+ reporter: Reporter::CLI.build($stdout),
212
+ zombie: false
212
213
  )
213
214
  end # Config
214
215
  end # Mutant
@@ -13,8 +13,6 @@ module Mutant
13
13
  # Object inspection
14
14
  #
15
15
  # @return [String]
16
- #
17
- # @api private
18
16
  def inspect
19
17
  INSPECT
20
18
  end
@@ -30,15 +28,13 @@ module Mutant
30
28
  # @param [Object] payload
31
29
  #
32
30
  # @return [Message]
33
- #
34
- # @api private
35
31
  def self.new(_type, _payload = Undefined)
36
32
  super
37
33
  end
38
34
 
39
35
  end # Message
40
36
 
41
- # Binding to othersactors sender for simple RPC
37
+ # Binding to other actors sender for simple RPC
42
38
  class Binding
43
39
  include Concord.new(:mailbox, :other)
44
40
 
@@ -47,8 +43,6 @@ module Mutant
47
43
  # @param [Symbol] type
48
44
  #
49
45
  # @return [Object]
50
- #
51
- # @api private
52
46
  def call(type)
53
47
  other.call(Message.new(type, mailbox.sender))
54
48
  message = mailbox.receiver.call
@@ -7,8 +7,6 @@ module Mutant
7
7
  # Spawn a new actor executing block
8
8
  #
9
9
  # @return [Actor::Sender]
10
- #
11
- # @api private
12
10
  def spawn
13
11
  mailbox = new_mailbox
14
12
 
@@ -22,8 +20,6 @@ module Mutant
22
20
  # New unbound mailbox
23
21
  #
24
22
  # @return [Mailbox]
25
- #
26
- # @api private
27
23
  def new_mailbox
28
24
  Mailbox.new
29
25
  end
@@ -7,8 +7,6 @@ module Mutant
7
7
  # New mailbox
8
8
  #
9
9
  # @return [Mailbox]
10
- #
11
- # @api private
12
10
  def self.new
13
11
  mutex = Mutex.new
14
12
  condition_variable = ConditionVariable.new
@@ -25,8 +23,6 @@ module Mutant
25
23
  # @param [Actor::Sender] other
26
24
  #
27
25
  # @return [Binding]
28
- #
29
- # @api private
30
26
  def bind(other)
31
27
  Binding.new(self, other)
32
28
  end
@@ -7,8 +7,6 @@ module Mutant
7
7
  # Receives a message, blocking
8
8
  #
9
9
  # @return [Object]
10
- #
11
- # @api private
12
10
  def call
13
11
  2.times do
14
12
  message = try_blocking_receive
@@ -26,8 +24,6 @@ module Mutant
26
24
  #
27
25
  # @return [Object]
28
26
  # if there is a message
29
- #
30
- # @api private
31
27
  def try_blocking_receive
32
28
  mutex.synchronize do
33
29
  if messages.empty?
@@ -10,8 +10,6 @@ module Mutant
10
10
  # @param [Object] message
11
11
  #
12
12
  # @return [self]
13
- #
14
- # @api private
15
13
  def call(message)
16
14
  mutex.synchronize do
17
15
  messages << message
@@ -14,8 +14,6 @@ module Mutant
14
14
  #
15
15
  # @return [nil]
16
16
  # otherwise
17
- #
18
- # @api private
19
17
  def self.find_last_path(node, &predicate)
20
18
  fail ArgumentError, 'block expected' unless block_given?
21
19
  path = []
@@ -36,11 +34,9 @@ module Mutant
36
34
  # all nodes visited recursively including root
37
35
  #
38
36
  # @return [undefined]
39
- #
40
- # @api private
41
37
  def self.walk(node, stack, &block)
42
38
  block.call(node, stack)
43
- node.children.grep(Parser::AST::Node) do |child|
39
+ node.children.grep(::Parser::AST::Node) do |child|
44
40
  stack.push(child)
45
41
  walk(child, stack, &block)
46
42
  stack.pop
@@ -12,8 +12,6 @@ module Mutant
12
12
  # Test if AST node is possibly a top level constant
13
13
  #
14
14
  # @return [Boolean]
15
- #
16
- # @api private
17
15
  def possible_top_level?
18
16
  base.nil? || n_cbase?(base)
19
17
  end
@@ -14,8 +14,6 @@ module Mutant
14
14
  # Test if optarg definition intends to be used
15
15
  #
16
16
  # @return [Boolean]
17
- #
18
- # @api private
19
17
  def used?
20
18
  !name.to_s.start_with?(UNDERSCORE)
21
19
  end
@@ -15,15 +15,11 @@ module Mutant
15
15
  # Arguments of mutated node
16
16
  #
17
17
  # @return [Enumerable<Parser::AST::Node>]
18
- #
19
- # @api private
20
18
  alias_method :arguments, :remaining_children
21
19
 
22
20
  # Test if AST node is a valid assignment target
23
21
  #
24
22
  # @return [Boolean]
25
- #
26
- # @api private
27
23
  def assignment?
28
24
  index_assignment? || attribute_assignment?
29
25
  end
@@ -31,8 +27,6 @@ module Mutant
31
27
  # Test if AST node is an attribute assignment?
32
28
  #
33
29
  # @return [Boolean]
34
- #
35
- # @api private
36
30
  def attribute_assignment?
37
31
  !Types::METHOD_OPERATORS.include?(selector) &&
38
32
  selector.to_s.end_with?(ATTRIBUTE_ASSIGNMENT_SELECTOR_SUFFIX)
@@ -41,8 +35,6 @@ module Mutant
41
35
  # Test if AST node is an index assign
42
36
  #
43
37
  # @return [Boolean]
44
- #
45
- # @api private
46
38
  def index_assignment?
47
39
  selector.equal?(INDEX_ASSIGNMENT_SELECTOR)
48
40
  end
@@ -50,8 +42,6 @@ module Mutant
50
42
  # Test for binary operator implemented as method
51
43
  #
52
44
  # @return [Boolean]
53
- #
54
- # @api private
55
45
  def binary_method_operator?
56
46
  Types::BINARY_METHOD_OPERATORS.include?(selector)
57
47
  end
@@ -59,8 +49,6 @@ module Mutant
59
49
  # Test if receiver is possibly a top level constant
60
50
  #
61
51
  # @return [Boolean]
62
- #
63
- # @api private
64
52
  def receiver_possible_top_level_const?
65
53
  return false unless receiver && n_const?(receiver)
66
54
 
@@ -9,8 +9,6 @@ module Mutant
9
9
  # @param [Class, Module] host
10
10
  #
11
11
  # @return [undefined]
12
- #
13
- # @api private
14
12
  def self.included(host)
15
13
  host.class_eval do
16
14
  include InstanceMethods
@@ -26,8 +24,6 @@ module Mutant
26
24
  # Mutated nodes children
27
25
  #
28
26
  # @return [Array<Parser::AST::Node]
29
- #
30
- # @api private
31
27
  def children
32
28
  node.children
33
29
  end
@@ -45,8 +41,6 @@ module Mutant
45
41
  # @param [Fixnum] index
46
42
  #
47
43
  # @return [undefined]
48
- #
49
- # @api private
50
44
  def define_named_child(name, index)
51
45
  define_method(name) do
52
46
  children.at(index)
@@ -58,8 +52,6 @@ module Mutant
58
52
  # @param [Array<Symbol>] names
59
53
  #
60
54
  # @return [undefined]
61
- #
62
- # @api private
63
55
  def define_remaining_children(names)
64
56
  define_method(:remaining_children_with_index) do
65
57
  children.each_with_index.drop(names.length)
@@ -77,8 +69,6 @@ module Mutant
77
69
  # Create name helpers
78
70
  #
79
71
  # @return [undefined]
80
- #
81
- # @api private
82
72
  def children(*names)
83
73
  names.each_with_index do |name, index|
84
74
  define_named_child(name, index)
@@ -10,10 +10,8 @@ module Mutant
10
10
  # @param [Symbol] type
11
11
  #
12
12
  # @return [Parser::AST::Node]
13
- #
14
- # @api private
15
13
  def s(type, *children)
16
- Parser::AST::Node.new(type, children)
14
+ ::Parser::AST::Node.new(type, children)
17
15
  end
18
16
 
19
17
  # Build a negated boolean node
@@ -21,8 +19,6 @@ module Mutant
21
19
  # @param [Parser::AST::Node] node
22
20
  #
23
21
  # @return [Parser::AST::Node]
24
- #
25
- # @api private
26
22
  def n_not(node)
27
23
  s(:send, node, :!)
28
24
  end
@@ -1,37 +1,31 @@
1
1
  module Mutant
2
2
 
3
3
  # Commandline parser
4
+ #
5
+ # rubocop:disable ClassLength
4
6
  class CLI
5
7
  include Adamantium::Flat, Equalizer.new(:config), Procto.call(:config)
6
8
 
7
9
  # Error failed when CLI argv is invalid
8
10
  Error = Class.new(RuntimeError)
9
11
 
10
- EXIT_FAILURE = 1
11
- EXIT_SUCCESS = 0
12
-
13
12
  # Run cli with arguments
14
13
  #
15
14
  # @param [Array<String>] arguments
16
15
  #
17
- # @return [Fixnum]
18
- # the exit status
19
- #
20
- # @api private
16
+ # @return [Boolean]
21
17
  def self.run(arguments)
22
- Runner.call(Env::Bootstrap.call(call(arguments))).success? ? EXIT_SUCCESS : EXIT_FAILURE
18
+ Runner.call(Env::Bootstrap.call(call(arguments))).success?
23
19
  rescue Error => exception
24
20
  $stderr.puts(exception.message)
25
- EXIT_FAILURE
21
+ false
26
22
  end
27
23
 
28
- # Initialize objecct
24
+ # Initialize object
29
25
  #
30
26
  # @param [Array<String>]
31
27
  #
32
28
  # @return [undefined]
33
- #
34
- # @api private
35
29
  def initialize(arguments)
36
30
  @config = Config::DEFAULT
37
31
 
@@ -41,8 +35,6 @@ module Mutant
41
35
  # Config parsed from CLI
42
36
  #
43
37
  # @return [Config]
44
- #
45
- # @api private
46
38
  attr_reader :config
47
39
 
48
40
  private
@@ -56,12 +48,10 @@ module Mutant
56
48
  # An error occurred while parsing the options.
57
49
  #
58
50
  # @return [undefined]
59
- #
60
- # @api private
61
51
  def parse(arguments)
62
52
  opts = OptionParser.new do |builder|
63
53
  builder.banner = 'usage: mutant [options] MATCH_EXPRESSION ...'
64
- %w[add_environment_options add_mutation_options add_filter_options add_debug_options].each do |name|
54
+ %i[add_environment_options add_mutation_options add_filter_options add_debug_options].each do |name|
65
55
  __send__(name, builder)
66
56
  end
67
57
  end
@@ -76,8 +66,6 @@ module Mutant
76
66
  # @param [Array<String>] expressions
77
67
  #
78
68
  # @return [undefined]
79
- #
80
- # @api private
81
69
  def parse_match_expressions(expressions)
82
70
  fail Error, 'No expressions given' if expressions.empty?
83
71
 
@@ -93,8 +81,6 @@ module Mutant
93
81
  # @return [undefined]
94
82
  #
95
83
  # rubocop:disable MethodLength
96
- #
97
- # @api private
98
84
  def add_environment_options(opts)
99
85
  opts.separator('Environment:')
100
86
  opts.on('--zombie', 'Run mutant zombified') do
@@ -116,8 +102,6 @@ module Mutant
116
102
  # @param [String] name
117
103
  #
118
104
  # @return [undefined]
119
- #
120
- # @api private
121
105
  def setup_integration(name)
122
106
  with(integration: Integration.setup(name))
123
107
  rescue LoadError
@@ -129,8 +113,6 @@ module Mutant
129
113
  # @param [OptionParser] opts
130
114
  #
131
115
  # @return [undefined]
132
- #
133
- # @api private
134
116
  def add_mutation_options(opts)
135
117
  opts.separator(nil)
136
118
  opts.separator('Options:')
@@ -149,14 +131,21 @@ module Mutant
149
131
  # @param [OptionParser] opts
150
132
  #
151
133
  # @return [undefined]
152
- #
153
- # @api private
154
134
  def add_filter_options(opts)
155
135
  opts.on('--ignore-subject EXPRESSION', 'Ignore subjects that match EXPRESSION as prefix') do |pattern|
156
136
  add_matcher(:ignore_expressions, config.expression_parser.(pattern))
157
137
  end
158
138
  opts.on('--since REVISION', 'Only select subjects touched since REVISION') do |revision|
159
- add_matcher(:subject_filters, Repository::SubjectFilter.new(Repository::Diff.from_head(revision)))
139
+ add_matcher(
140
+ :subject_filters,
141
+ Repository::SubjectFilter.new(
142
+ Repository::Diff.new(
143
+ config: config,
144
+ from: Repository::Diff::HEAD,
145
+ to: revision
146
+ )
147
+ )
148
+ )
160
149
  end
161
150
  end
162
151
 
@@ -165,22 +154,20 @@ module Mutant
165
154
  # @param [OptionParser] opts
166
155
  #
167
156
  # @return [undefined]
168
- #
169
- # @api private
170
157
  def add_debug_options(opts)
171
158
  opts.on('--fail-fast', 'Fail fast') do
172
159
  with(fail_fast: true)
173
160
  end
174
161
  opts.on('--version', 'Print mutants version') do
175
162
  puts("mutant-#{VERSION}")
176
- Kernel.exit(EXIT_SUCCESS)
163
+ config.kernel.exit
177
164
  end
178
165
  opts.on('-d', '--debug', 'Enable debugging output') do
179
166
  with(debug: true)
180
167
  end
181
168
  opts.on_tail('-h', '--help', 'Show this message') do
182
169
  puts(opts.to_s)
183
- Kernel.exit(EXIT_SUCCESS)
170
+ config.kernel.exit
184
171
  end
185
172
  end
186
173
 
@@ -189,8 +176,6 @@ module Mutant
189
176
  # @param [Hash<Symbol, Object>] attributes
190
177
  #
191
178
  # @return [undefined]
192
- #
193
- # @api private
194
179
  def with(attributes)
195
180
  @config = config.with(attributes)
196
181
  end
@@ -204,8 +189,6 @@ module Mutant
204
189
  # the value to add
205
190
  #
206
191
  # @return [undefined]
207
- #
208
- # @api private
209
192
  def add(attribute, value)
210
193
  with(attribute => config.public_send(attribute) + [value])
211
194
  end
@@ -219,8 +202,6 @@ module Mutant
219
202
  # the value to add
220
203
  #
221
204
  # @return [undefined]
222
- #
223
- # @api private
224
205
  def add_matcher(attribute, value)
225
206
  with(matcher: config.matcher.add(attribute, value))
226
207
  end