mutant 0.8.8 → 0.8.9

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 (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