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
@@ -13,8 +13,6 @@ module Mutant
13
13
  # Syntax of expression
14
14
  #
15
15
  # @return [String]
16
- #
17
- # @api private
18
16
  abstract_method :syntax
19
17
 
20
18
  # Match length with other expression
@@ -22,8 +20,6 @@ module Mutant
22
20
  # @param [Expression] other
23
21
  #
24
22
  # @return [Fixnum]
25
- #
26
- # @api private
27
23
  def match_length(other)
28
24
  if eql?(other)
29
25
  syntax.length
@@ -37,8 +33,6 @@ module Mutant
37
33
  # @param [Expression] other
38
34
  #
39
35
  # @return [Boolean]
40
- #
41
- # @api private
42
36
  def prefix?(other)
43
37
  !match_length(other).zero?
44
38
  end
@@ -52,8 +46,6 @@ module Mutant
52
46
  #
53
47
  # @return [nil]
54
48
  # otherwise
55
- #
56
- # @api private
57
49
  def self.try_parse(input)
58
50
  match = self::REGEXP.match(input)
59
51
  return unless match
@@ -3,7 +3,12 @@ module Mutant
3
3
 
4
4
  # Explicit method expression
5
5
  class Method < self
6
- include Anima.new(:scope_name, :scope_symbol, :method_name)
6
+ include Anima.new(
7
+ :method_name,
8
+ :scope_name,
9
+ :scope_symbol
10
+ )
11
+
7
12
  private(*anima.attribute_names)
8
13
 
9
14
  MATCHERS = IceNine.deep_freeze(
@@ -23,8 +28,6 @@ module Mutant
23
28
  # Syntax of expression
24
29
  #
25
30
  # @return [String]
26
- #
27
- # @api private
28
31
  def syntax
29
32
  [scope_name, scope_symbol, method_name].join
30
33
  end
@@ -33,8 +36,6 @@ module Mutant
33
36
  # Matcher for expression
34
37
  #
35
38
  # @return [Matcher]
36
- #
37
- # @api private
38
39
  def matcher
39
40
  methods_matcher = MATCHERS.fetch(scope_symbol).new(scope)
40
41
 
@@ -46,8 +47,6 @@ module Mutant
46
47
  # Scope object
47
48
  #
48
49
  # @return [Class, Method]
49
- #
50
- # @api private
51
50
  def scope
52
51
  Object.const_get(scope_name)
53
52
  end
@@ -3,7 +3,11 @@ module Mutant
3
3
 
4
4
  # Abstract base class for methods expression
5
5
  class Methods < self
6
- include Anima.new(:scope_name, :scope_symbol)
6
+ include Anima.new(
7
+ :scope_name,
8
+ :scope_symbol
9
+ )
10
+
7
11
  private(*anima.attribute_names)
8
12
 
9
13
  MATCHERS = IceNine.deep_freeze(
@@ -17,8 +21,6 @@ module Mutant
17
21
  # Syntax of expression
18
22
  #
19
23
  # @return [String]
20
- #
21
- # @api private
22
24
  def syntax
23
25
  [scope_name, scope_symbol].join
24
26
  end
@@ -27,8 +29,6 @@ module Mutant
27
29
  # Matcher on expression
28
30
  #
29
31
  # @return [Matcher::Method]
30
- #
31
- # @api private
32
32
  def matcher
33
33
  MATCHERS.fetch(scope_symbol).new(scope)
34
34
  end
@@ -38,8 +38,6 @@ module Mutant
38
38
  # @param [Expression] expression
39
39
  #
40
40
  # @return [Fixnum]
41
- #
42
- # @api private
43
41
  def match_length(expression)
44
42
  if expression.syntax.start_with?(syntax)
45
43
  syntax.length
@@ -53,8 +51,6 @@ module Mutant
53
51
  # Scope object
54
52
  #
55
53
  # @return [Class, Method]
56
- #
57
- # @api private
58
54
  def scope
59
55
  Object.const_get(scope_name)
60
56
  end
@@ -12,8 +12,6 @@ module Mutant
12
12
  # Initialize object
13
13
  #
14
14
  # @return [undefined]
15
- #
16
- # @api private
17
15
  def initialize(*)
18
16
  super
19
17
  @recursion_pattern = Regexp.union(
@@ -26,8 +24,6 @@ module Mutant
26
24
  # Syntax for expression
27
25
  #
28
26
  # @return [String]
29
- #
30
- # @api private
31
27
  def syntax
32
28
  "#{scope_name}*"
33
29
  end
@@ -36,8 +32,6 @@ module Mutant
36
32
  # Matcher for expression
37
33
  #
38
34
  # @return [Matcher]
39
- #
40
- # @api private
41
35
  def matcher
42
36
  Matcher::Namespace.new(self)
43
37
  end
@@ -47,8 +41,6 @@ module Mutant
47
41
  # @param [Expression] expression
48
42
  #
49
43
  # @return [Fixnum]
50
- #
51
- # @api private
52
44
  def match_length(expression)
53
45
  if @recursion_pattern =~ expression.syntax
54
46
  scope_name.length
@@ -70,8 +62,6 @@ module Mutant
70
62
  # Matcher matcher on expression
71
63
  #
72
64
  # @return [Matcher]
73
- #
74
- # @api private
75
65
  def matcher
76
66
  Matcher::Scope.new(Object.const_get(scope_name))
77
67
  end
@@ -79,9 +69,6 @@ module Mutant
79
69
  # Syntax for expression
80
70
  #
81
71
  # @return [String]
82
- #
83
- # @api private
84
- #
85
72
  alias_method :syntax, :scope_name
86
73
  public :syntax
87
74
 
@@ -22,8 +22,6 @@ module Mutant
22
22
  #
23
23
  # @raise [ParserError]
24
24
  # otherwise
25
- #
26
- # @api private
27
25
  def call(input)
28
26
  try_parse(input) or fail InvalidExpressionError, "Expression: #{input.inspect} is not valid"
29
27
  end
@@ -37,8 +35,6 @@ module Mutant
37
35
  #
38
36
  # @return [nil]
39
37
  # otherwise
40
- #
41
- # @api private
42
38
  def try_parse(input)
43
39
  expressions = expressions(input)
44
40
  case expressions.length
@@ -57,8 +53,6 @@ module Mutant
57
53
  #
58
54
  # @return [Array<Expression>]
59
55
  # if expressions can be parsed from input
60
- #
61
- # @api private
62
56
  def expressions(input)
63
57
  types.each_with_object([]) do |type, aggregate|
64
58
  expression = type.try_parse(input)
@@ -11,8 +11,6 @@ module Mutant
11
11
  # @param [String] name
12
12
  #
13
13
  # @return [Integration]
14
- #
15
- # @api private
16
14
  def self.setup(name)
17
15
  require "mutant/integration/#{name}"
18
16
  lookup(name)
@@ -24,8 +22,6 @@ module Mutant
24
22
  #
25
23
  # @return [Integration]
26
24
  # if found
27
- #
28
- # @api private
29
25
  def self.lookup(name)
30
26
  REGISTRY.fetch(name)
31
27
  end
@@ -35,8 +31,6 @@ module Mutant
35
31
  # @param [String] name
36
32
  #
37
33
  # @return [undefined]
38
- #
39
- # @api private
40
34
  def self.register(name)
41
35
  REGISTRY[name] = self
42
36
  end
@@ -45,8 +39,6 @@ module Mutant
45
39
  # Perform integration setup
46
40
  #
47
41
  # @return [self]
48
- #
49
- # @api private
50
42
  def setup
51
43
  self
52
44
  end
@@ -56,15 +48,11 @@ module Mutant
56
48
  # @param [Enumerable<Test>] tests
57
49
  #
58
50
  # @return [Result::Test]
59
- #
60
- # @api private
61
51
  abstract_method :call
62
52
 
63
53
  # Available tests for integration
64
54
  #
65
55
  # @return [Enumerable<Test>]
66
- #
67
- # @api private
68
56
  abstract_method :all_tests
69
57
 
70
58
  private
@@ -72,8 +60,6 @@ module Mutant
72
60
  # Expression parser
73
61
  #
74
62
  # @return [Expression::Parser]
75
- #
76
- # @api private
77
63
  def expression_parser
78
64
  config.expression_parser
79
65
  end
@@ -86,8 +72,6 @@ module Mutant
86
72
  # Available tests for integration
87
73
  #
88
74
  # @return [Enumerable<Test>]
89
- #
90
- # @api private
91
75
  def all_tests
92
76
  EMPTY_ARRAY
93
77
  end
@@ -97,14 +81,12 @@ module Mutant
97
81
  # @param [Enumerable<Mutant::Test>] tests
98
82
  #
99
83
  # @return [Result::Test]
100
- #
101
- # @api private
102
84
  def call(tests)
103
85
  Result::Test.new(
104
- tests: tests,
105
86
  output: '',
87
+ passed: true,
106
88
  runtime: 0.0,
107
- passed: true
89
+ tests: tests
108
90
  )
109
91
  end
110
92
 
@@ -11,8 +11,6 @@ module Mutant
11
11
  #
12
12
  # @raise [Error]
13
13
  # if block terminates abnormal
14
- #
15
- # @api private
16
14
  def self.call(&block)
17
15
  block.call
18
16
  rescue => exception
@@ -35,8 +33,6 @@ module Mutant
35
33
  # if block terminates abnormal
36
34
  #
37
35
  # rubocop:disable MethodLength
38
- #
39
- # @api private
40
36
  def self.call(&block)
41
37
  IO.pipe(binmode: true) do |reader, writer|
42
38
  writer.binmode
@@ -1,42 +1,27 @@
1
1
  module Mutant
2
2
  # Base class for code loaders
3
3
  class Loader
4
- include AbstractType, Concord.new(:root, :subject), Procto.call
4
+ include Anima.new(:binding, :kernel, :node, :subject)
5
5
 
6
- # Eval based loader
7
- class Eval < self
8
-
9
- # Call loader
10
- #
11
- # @return [undefined]
12
- #
13
- # One off the very few valid uses of eval
14
- #
15
- # rubocop:disable Lint/Eval
16
- #
17
- # @api private
18
- def call
19
- eval(
20
- source,
21
- TOPLEVEL_BINDING,
22
- subject.source_path.to_s,
23
- subject.source_line
24
- )
25
- self
26
- end
27
-
28
- private
29
-
30
- # Source generated from AST
31
- #
32
- # @return [String]
33
- #
34
- # @api private
35
- def source
36
- Unparser.unparse(root)
37
- end
38
-
39
- end # Eval
6
+ # Call loader
7
+ #
8
+ # @return [self]
9
+ def self.call(*arguments)
10
+ new(*arguments).call
11
+ end
40
12
 
13
+ # Call loader
14
+ #
15
+ # One off the very few valid uses of eval
16
+ #
17
+ # @return [undefined]
18
+ def call
19
+ kernel.eval(
20
+ Unparser.unparse(node),
21
+ binding,
22
+ subject.source_path.to_s,
23
+ subject.source_line
24
+ )
25
+ end
41
26
  end # Loader
42
27
  end # Mutant
@@ -5,7 +5,7 @@ module Mutant
5
5
 
6
6
  # Call matcher
7
7
  #
8
- # @param [Env] env
8
+ # @param [Env::Bootstrap] env
9
9
  #
10
10
  # @return [Enumerable<Subject>]
11
11
  #
@@ -6,11 +6,9 @@ module Mutant
6
6
 
7
7
  # Call matcher
8
8
  #
9
- # @param [Env] env
9
+ # @param [Env::Bootstrap] env
10
10
  #
11
11
  # @return [Enumerable<Subject>]
12
- #
13
- # @api private
14
12
  def call(env)
15
13
  matchers.flat_map do |matcher|
16
14
  matcher.call(env)
@@ -8,8 +8,6 @@ module Mutant
8
8
  # Generated matcher
9
9
  #
10
10
  # @return [Matcher]
11
- #
12
- # @api private
13
11
  def result
14
12
  Filter.new(
15
13
  Chain.new(config.match_expressions.map(&:matcher)),
@@ -29,8 +27,6 @@ module Mutant
29
27
  # Test if subject expression is matched by prefix
30
28
  #
31
29
  # @return [Boolean]
32
- #
33
- # @api private
34
30
  def call(subject)
35
31
  expression.prefix?(subject.expression)
36
32
  end
@@ -42,8 +38,6 @@ module Mutant
42
38
  # Predicate returning false on expression ignored subject
43
39
  #
44
40
  # @return [#call]
45
- #
46
- # @api private
47
41
  def ignored_subjects
48
42
  Morpher::Evaluator::Predicate::Boolean::Negation.new(
49
43
  Morpher::Evaluator::Predicate::Boolean::Or.new(
@@ -55,8 +49,6 @@ module Mutant
55
49
  # Predicate returning false on filtered subject
56
50
  #
57
51
  # @return [#call]
58
- #
59
- # @api private
60
52
  def filtered_subjects
61
53
  Morpher::Evaluator::Predicate::Boolean::And.new(config.subject_filters)
62
54
  end
@@ -3,8 +3,8 @@ module Mutant
3
3
  # Subject matcher configuration
4
4
  class Config
5
5
  include Adamantium, Anima.new(
6
- :match_expressions,
7
6
  :ignore_expressions,
7
+ :match_expressions,
8
8
  :subject_filters
9
9
  )
10
10
 
@@ -14,8 +14,8 @@ module Mutant
14
14
  ENUM_DELIMITER = ','.freeze
15
15
  EMPTY_ATTRIBUTES = 'empty'.freeze
16
16
  PRESENTATIONS = IceNine.deep_freeze(
17
- match_expressions: :syntax,
18
17
  ignore_expressions: :syntax,
18
+ match_expressions: :syntax,
19
19
  subject_filters: :inspect
20
20
  )
21
21
  private_constant(*constants(false))
@@ -25,8 +25,6 @@ module Mutant
25
25
  # Inspection string
26
26
  #
27
27
  # @return [String]
28
- #
29
- # @api private
30
28
  def inspect
31
29
  INSPECT_FORMAT % inspect_attributes
32
30
  end
@@ -38,8 +36,6 @@ module Mutant
38
36
  # @param [Object] value
39
37
  #
40
38
  # @return [Config]
41
- #
42
- # @api private
43
39
  def add(attribute, value)
44
40
  with(attribute => public_send(attribute) + [value])
45
41
  end
@@ -49,8 +45,6 @@ module Mutant
49
45
  # Present attributes
50
46
  #
51
47
  # @return [Array<Symbol>]
52
- #
53
- # @api private
54
48
  def present_attributes
55
49
  to_h.reject { |_key, value| value.empty? }.keys
56
50
  end
@@ -58,8 +52,6 @@ module Mutant
58
52
  # Formatted attributes
59
53
  #
60
54
  # @return [String]
61
- #
62
- # @api private
63
55
  def inspect_attributes
64
56
  attributes = present_attributes
65
57
  .map(&method(:format_attribute))