mutest 0.0.9 → 0.0.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (236) hide show
  1. checksums.yaml +5 -5
  2. data/.circleci/config.yml +38 -0
  3. data/{config/rubocop.yml → .rubocop.yml} +80 -183
  4. data/CHANGELOG.md +8 -0
  5. data/Gemfile +2 -3
  6. data/Gemfile.lock +41 -52
  7. data/README.md +16 -0
  8. data/Rakefile +1 -1
  9. data/lib/mutest.rb +5 -4
  10. data/lib/mutest/actor.rb +7 -6
  11. data/lib/mutest/actor/env.rb +3 -3
  12. data/lib/mutest/actor/mailbox.rb +5 -4
  13. data/lib/mutest/actor/receiver.rb +6 -5
  14. data/lib/mutest/actor/sender.rb +5 -4
  15. data/lib/mutest/ast.rb +4 -3
  16. data/lib/mutest/ast/meta.rb +3 -3
  17. data/lib/mutest/ast/meta/const.rb +7 -5
  18. data/lib/mutest/ast/meta/optarg.rb +6 -5
  19. data/lib/mutest/ast/meta/resbody.rb +6 -5
  20. data/lib/mutest/ast/meta/restarg.rb +6 -5
  21. data/lib/mutest/ast/meta/send.rb +8 -20
  22. data/lib/mutest/ast/meta/symbol.rb +6 -5
  23. data/lib/mutest/ast/named_children.rb +5 -5
  24. data/lib/mutest/ast/node_predicates.rb +4 -4
  25. data/lib/mutest/ast/nodes.rb +3 -3
  26. data/lib/mutest/ast/regexp.rb +3 -3
  27. data/lib/mutest/ast/regexp/transformer.rb +19 -11
  28. data/lib/mutest/ast/regexp/transformer/alternative.rb +6 -6
  29. data/lib/mutest/ast/regexp/transformer/character_set.rb +7 -7
  30. data/lib/mutest/ast/regexp/transformer/direct.rb +7 -7
  31. data/lib/mutest/ast/regexp/transformer/options_group.rb +7 -7
  32. data/lib/mutest/ast/regexp/transformer/quantifier.rb +11 -13
  33. data/lib/mutest/ast/regexp/transformer/recursive.rb +7 -7
  34. data/lib/mutest/ast/regexp/transformer/root.rb +6 -6
  35. data/lib/mutest/ast/regexp/transformer/text.rb +7 -7
  36. data/lib/mutest/ast/sexp.rb +3 -3
  37. data/lib/mutest/ast/types.rb +8 -6
  38. data/lib/mutest/cli.rb +5 -3
  39. data/lib/mutest/color.rb +4 -3
  40. data/lib/mutest/config.rb +4 -3
  41. data/lib/mutest/context.rb +4 -3
  42. data/lib/mutest/diff.rb +5 -3
  43. data/lib/mutest/env.rb +5 -5
  44. data/lib/mutest/env/bootstrap.rb +7 -5
  45. data/lib/mutest/expression.rb +7 -5
  46. data/lib/mutest/expression/method.rb +4 -4
  47. data/lib/mutest/expression/methods.rb +4 -4
  48. data/lib/mutest/expression/namespace.rb +9 -8
  49. data/lib/mutest/expression/parser.rb +9 -8
  50. data/lib/mutest/integration.rb +5 -3
  51. data/lib/mutest/integration/null.rb +3 -3
  52. data/lib/mutest/isolation.rb +2 -2
  53. data/lib/mutest/isolation/fork.rb +4 -4
  54. data/lib/mutest/isolation/none.rb +4 -4
  55. data/lib/mutest/loader.rb +2 -2
  56. data/lib/mutest/matcher.rb +4 -3
  57. data/lib/mutest/matcher/chain.rb +3 -3
  58. data/lib/mutest/matcher/compiler.rb +7 -5
  59. data/lib/mutest/matcher/config.rb +5 -4
  60. data/lib/mutest/matcher/filter.rb +3 -3
  61. data/lib/mutest/matcher/method.rb +13 -13
  62. data/lib/mutest/matcher/method/instance.rb +6 -6
  63. data/lib/mutest/matcher/method/singleton.rb +5 -5
  64. data/lib/mutest/matcher/methods.rb +7 -6
  65. data/lib/mutest/matcher/namespace.rb +3 -3
  66. data/lib/mutest/matcher/null.rb +3 -3
  67. data/lib/mutest/matcher/scope.rb +3 -3
  68. data/lib/mutest/matcher/static.rb +3 -3
  69. data/lib/mutest/meta.rb +4 -4
  70. data/lib/mutest/meta/example.rb +5 -4
  71. data/lib/mutest/meta/example/dsl.rb +12 -11
  72. data/lib/mutest/meta/example/verification.rb +7 -6
  73. data/lib/mutest/mutation.rb +7 -6
  74. data/lib/mutest/mutator.rb +6 -6
  75. data/lib/mutest/mutator/node.rb +19 -7
  76. data/lib/mutest/mutator/node/and_asgn.rb +4 -4
  77. data/lib/mutest/mutator/node/argument.rb +6 -5
  78. data/lib/mutest/mutator/node/arguments.rb +18 -5
  79. data/lib/mutest/mutator/node/begin.rb +4 -4
  80. data/lib/mutest/mutator/node/binary.rb +4 -4
  81. data/lib/mutest/mutator/node/block.rb +6 -5
  82. data/lib/mutest/mutator/node/block_pass.rb +4 -4
  83. data/lib/mutest/mutator/node/break.rb +4 -4
  84. data/lib/mutest/mutator/node/case.rb +6 -4
  85. data/lib/mutest/mutator/node/class.rb +4 -4
  86. data/lib/mutest/mutator/node/conditional_loop.rb +4 -4
  87. data/lib/mutest/mutator/node/const.rb +4 -4
  88. data/lib/mutest/mutator/node/define.rb +6 -6
  89. data/lib/mutest/mutator/node/defined.rb +4 -4
  90. data/lib/mutest/mutator/node/dstr.rb +4 -4
  91. data/lib/mutest/mutator/node/dsym.rb +4 -4
  92. data/lib/mutest/mutator/node/generic.rb +5 -4
  93. data/lib/mutest/mutator/node/if.rb +6 -4
  94. data/lib/mutest/mutator/node/index.rb +128 -0
  95. data/lib/mutest/mutator/node/kwbegin.rb +4 -4
  96. data/lib/mutest/mutator/node/literal.rb +4 -4
  97. data/lib/mutest/mutator/node/literal/array.rb +8 -6
  98. data/lib/mutest/mutator/node/literal/boolean.rb +5 -5
  99. data/lib/mutest/mutator/node/literal/fixnum.rb +5 -5
  100. data/lib/mutest/mutator/node/literal/float.rb +5 -5
  101. data/lib/mutest/mutator/node/literal/hash.rb +6 -6
  102. data/lib/mutest/mutator/node/literal/nil.rb +5 -5
  103. data/lib/mutest/mutator/node/literal/range.rb +5 -5
  104. data/lib/mutest/mutator/node/literal/regex.rb +5 -5
  105. data/lib/mutest/mutator/node/literal/string.rb +5 -5
  106. data/lib/mutest/mutator/node/literal/symbol.rb +5 -5
  107. data/lib/mutest/mutator/node/masgn.rb +4 -4
  108. data/lib/mutest/mutator/node/match_current_line.rb +4 -4
  109. data/lib/mutest/mutator/node/mlhs.rb +4 -4
  110. data/lib/mutest/mutator/node/named_value/access.rb +6 -6
  111. data/lib/mutest/mutator/node/named_value/constant_assignment.rb +6 -5
  112. data/lib/mutest/mutator/node/named_value/variable_assignment.rb +5 -5
  113. data/lib/mutest/mutator/node/next.rb +4 -4
  114. data/lib/mutest/mutator/node/nthref.rb +4 -4
  115. data/lib/mutest/mutator/node/op_asgn.rb +4 -4
  116. data/lib/mutest/mutator/node/or_asgn.rb +5 -4
  117. data/lib/mutest/mutator/node/procarg_zero.rb +45 -0
  118. data/lib/mutest/mutator/node/regexp.rb +6 -6
  119. data/lib/mutest/mutator/node/regexp/alternation_meta.rb +5 -5
  120. data/lib/mutest/mutator/node/regexp/capture_group.rb +5 -5
  121. data/lib/mutest/mutator/node/regexp/character_type.rb +5 -5
  122. data/lib/mutest/mutator/node/regexp/end_of_line_anchor.rb +5 -5
  123. data/lib/mutest/mutator/node/regexp/end_of_string_or_before_end_of_line_anchor.rb +5 -5
  124. data/lib/mutest/mutator/node/regexp/one_or_more.rb +5 -5
  125. data/lib/mutest/mutator/node/regexp/zero_or_more.rb +5 -5
  126. data/lib/mutest/mutator/node/regopt.rb +4 -4
  127. data/lib/mutest/mutator/node/resbody.rb +6 -4
  128. data/lib/mutest/mutator/node/rescue.rb +6 -4
  129. data/lib/mutest/mutator/node/return.rb +5 -4
  130. data/lib/mutest/mutator/node/send.rb +6 -34
  131. data/lib/mutest/mutator/node/send/attribute_assignment.rb +5 -5
  132. data/lib/mutest/mutator/node/send/binary.rb +5 -5
  133. data/lib/mutest/mutator/node/send/conditional.rb +5 -5
  134. data/lib/mutest/mutator/node/splat.rb +4 -4
  135. data/lib/mutest/mutator/node/super.rb +4 -4
  136. data/lib/mutest/mutator/node/when.rb +4 -4
  137. data/lib/mutest/mutator/node/yield.rb +4 -4
  138. data/lib/mutest/mutator/node/zsuper.rb +4 -4
  139. data/lib/mutest/mutator/util.rb +3 -3
  140. data/lib/mutest/mutator/util/array.rb +6 -6
  141. data/lib/mutest/mutator/util/symbol.rb +4 -4
  142. data/lib/mutest/parallel.rb +16 -12
  143. data/lib/mutest/parallel/master.rb +4 -4
  144. data/lib/mutest/parallel/source.rb +6 -5
  145. data/lib/mutest/parallel/worker.rb +6 -5
  146. data/lib/mutest/parser.rb +4 -3
  147. data/lib/mutest/registry.rb +6 -5
  148. data/lib/mutest/reporter.rb +2 -2
  149. data/lib/mutest/reporter/cli.rb +3 -3
  150. data/lib/mutest/reporter/cli/format.rb +9 -8
  151. data/lib/mutest/reporter/cli/printer.rb +8 -8
  152. data/lib/mutest/reporter/cli/printer/config.rb +5 -5
  153. data/lib/mutest/reporter/cli/printer/env_progress.rb +16 -16
  154. data/lib/mutest/reporter/cli/printer/env_result.rb +5 -5
  155. data/lib/mutest/reporter/cli/printer/mutation_progress_result.rb +5 -5
  156. data/lib/mutest/reporter/cli/printer/mutation_result.rb +5 -5
  157. data/lib/mutest/reporter/cli/printer/status.rb +6 -5
  158. data/lib/mutest/reporter/cli/printer/status_progressive.rb +5 -5
  159. data/lib/mutest/reporter/cli/printer/subject_progress.rb +5 -5
  160. data/lib/mutest/reporter/cli/printer/subject_result.rb +5 -5
  161. data/lib/mutest/reporter/cli/printer/test_result.rb +5 -5
  162. data/lib/mutest/reporter/cli/tput.rb +6 -5
  163. data/lib/mutest/reporter/null.rb +3 -3
  164. data/lib/mutest/reporter/sequence.rb +3 -3
  165. data/lib/mutest/repository.rb +9 -7
  166. data/lib/mutest/require_highjack.rb +2 -2
  167. data/lib/mutest/requirer.rb +2 -2
  168. data/lib/mutest/result.rb +18 -12
  169. data/lib/mutest/runner.rb +6 -3
  170. data/lib/mutest/runner/sink.rb +3 -3
  171. data/lib/mutest/scope.rb +2 -2
  172. data/lib/mutest/selector.rb +4 -3
  173. data/lib/mutest/selector/expression.rb +3 -3
  174. data/lib/mutest/source_file.rb +6 -5
  175. data/lib/mutest/subject.rb +5 -3
  176. data/lib/mutest/subject/method.rb +3 -3
  177. data/lib/mutest/subject/method/instance.rb +5 -5
  178. data/lib/mutest/subject/method/singleton.rb +4 -4
  179. data/lib/mutest/test.rb +4 -3
  180. data/lib/mutest/util.rb +3 -3
  181. data/lib/mutest/version.rb +2 -2
  182. data/lib/mutest/warning_filter.rb +3 -3
  183. data/lib/mutest/zombifier.rb +5 -4
  184. data/meta/block.rb +22 -3
  185. data/meta/case.rb +29 -1
  186. data/meta/index.rb +132 -0
  187. data/meta/indexasgn.rb +42 -0
  188. data/meta/lambda.rb +17 -0
  189. data/meta/send.rb +5 -139
  190. data/mutest-rspec.gemspec +1 -1
  191. data/mutest.gemspec +11 -12
  192. data/spec/integration/mutest/rspec_spec.rb +1 -1
  193. data/spec/shared/framework_integration_behavior.rb +1 -1
  194. data/spec/shared/idempotent_method_behavior.rb +2 -1
  195. data/spec/spec_helper.rb +5 -5
  196. data/spec/support/compress_helper.rb +2 -1
  197. data/spec/support/corpus.rb +12 -8
  198. data/spec/support/fake_actor.rb +19 -14
  199. data/spec/support/file_system.rb +10 -7
  200. data/spec/support/ice_nine_config.rb +3 -3
  201. data/spec/support/ruby_vm.rb +10 -11
  202. data/spec/support/shared_context.rb +1 -1
  203. data/spec/support/test_app.rb +1 -1
  204. data/spec/support/warning.rb +8 -7
  205. data/spec/support/xspec.rb +18 -17
  206. data/spec/unit/mutest/actor/binding_spec.rb +1 -0
  207. data/spec/unit/mutest/ast/meta/optarg_spec.rb +1 -0
  208. data/spec/unit/mutest/ast/meta/send/proc_predicate_spec.rb +1 -1
  209. data/spec/unit/mutest/ast/meta/send/receiver_possible_top_level_const_predicate_spec.rb +1 -1
  210. data/spec/unit/mutest/ast/meta/send_spec.rb +14 -18
  211. data/spec/unit/mutest/ast/regexp_spec.rb +4 -3
  212. data/spec/unit/mutest/ast_spec.rb +1 -1
  213. data/spec/unit/mutest/cli_spec.rb +15 -15
  214. data/spec/unit/mutest/env/bootstrap_spec.rb +1 -1
  215. data/spec/unit/mutest/integration_spec.rb +1 -0
  216. data/spec/unit/mutest/isolation/none_spec.rb +1 -1
  217. data/spec/unit/mutest/matcher/config_spec.rb +1 -0
  218. data/spec/unit/mutest/mutator/node_spec.rb +1 -1
  219. data/spec/unit/mutest/parallel/master_spec.rb +3 -3
  220. data/spec/unit/mutest/reporter/cli/printer_spec.rb +2 -0
  221. data/spec/unit/mutest/reporter/cli/tput_spec.rb +2 -0
  222. data/spec/unit/mutest/reporter/cli_spec.rb +2 -0
  223. data/spec/unit/mutest/repository/diff_spec.rb +1 -1
  224. data/spec/unit/mutest/runner_spec.rb +1 -1
  225. data/spec/unit/mutest/subject_spec.rb +1 -1
  226. data/spec/unit/mutest/warning_filter_spec.rb +2 -3
  227. data/spec/unit/mutest/zombifier_spec.rb +1 -1
  228. data/test_app/Gemfile.rspec3.8 +7 -0
  229. metadata +67 -68
  230. data/.buildkite/hooks/pre-command +0 -3
  231. data/.buildkite/pipeline.yml +0 -38
  232. data/.gitmodules +0 -3
  233. data/circle.yml +0 -10
  234. data/config/triage.yml +0 -2
  235. data/config/yardstick.yml +0 -2
  236. data/lib/mutest/mutator/node/send/index.rb +0 -47
data/README.md CHANGED
@@ -4,6 +4,22 @@ mutest
4
4
 
5
5
  `mutest` is a mutation testing tool for ruby designed to help audit the thoroughness of your test suite and encourage you to write more robust code.
6
6
 
7
+ ## Relationship to `mutant`
8
+
9
+ `mutest` is a fork of the [mutant](https://github.com/mbj/mutant) project with a few minor additions. There are a handful of mutations which have been added, removed, or altered (see the [CHANGELOG](CHANGELOG.md) for details) as well as an inline disable comment system. This means that `mutest` allows you to do something like this:
10
+
11
+ ```ruby
12
+ # mutest:disable
13
+ dont_mutate(me: true) # This line is not mutated because of the significant comment above.
14
+ mutate(me: true) # This line would continue to be mutated.
15
+ ```
16
+
17
+ The `mutant` project, however, only allows disabling mutations on the method selector level and these subjects must be passed as a command line argument to the `mutant` executable.
18
+
19
+ Otherwise, `mutest` project is effectively identical to `mutant`, which is the brainchild and excellent work of [Markus Schirp](https://github.com/mbj).
20
+
21
+ ###### Note: Referring to the mutant documentation may be helpful for using `mutest`, as it is generally applicable.
22
+
7
23
  ## How it works
8
24
 
9
25
  `mutest` parses your ruby code, inserts modifications, and then runs your test suite. If your test suite still _passes_ after `mutest` has mutated your code, you have an _alive_ mutation--meaning your tests do not thoroughly cover the modified part of your code. If your tests _fail_ after the code has been modified, the mutation is _killed_. This means that your test suite was able to detect the semantic change and provide adequate coverage of that condition.
data/Rakefile CHANGED
@@ -13,6 +13,6 @@ namespace :metrics do
13
13
 
14
14
  arguments.concat(%w[-- Mutest*])
15
15
 
16
- Kernel.system(*arguments) or fail 'Mutant task is not successful'
16
+ Kernel.system(*arguments) or raise 'Mutest task is not successful'
17
17
  end
18
18
  end
@@ -38,7 +38,7 @@ module Mutest
38
38
  def self.ci?
39
39
  ENV.key?('CI')
40
40
  end
41
- end # Mutest
41
+ end
42
42
 
43
43
  require 'mutest/version'
44
44
  require 'mutest/env'
@@ -136,7 +136,6 @@ require 'mutest/mutator/node/send'
136
136
  require 'mutest/mutator/node/send/binary'
137
137
  require 'mutest/mutator/node/send/conditional'
138
138
  require 'mutest/mutator/node/send/attribute_assignment'
139
- require 'mutest/mutator/node/send/index'
140
139
  require 'mutest/mutator/node/when'
141
140
  require 'mutest/mutator/node/class'
142
141
  require 'mutest/mutator/node/define'
@@ -152,6 +151,8 @@ require 'mutest/mutator/node/regopt'
152
151
  require 'mutest/mutator/node/resbody'
153
152
  require 'mutest/mutator/node/rescue'
154
153
  require 'mutest/mutator/node/match_current_line'
154
+ require 'mutest/mutator/node/index'
155
+ require 'mutest/mutator/node/procarg_zero'
155
156
  require 'mutest/loader'
156
157
  require 'mutest/context'
157
158
  require 'mutest/scope'
@@ -242,5 +243,5 @@ module Mutest
242
243
  reporter: Reporter::CLI.build($stdout),
243
244
  zombie: false
244
245
  )
245
- end # Config
246
- end # Mutest
246
+ end
247
+ end
@@ -3,7 +3,7 @@ module Mutest
3
3
  module Actor
4
4
  # Error raised when actor signalling protocol is violated
5
5
  class ProtocolError < RuntimeError
6
- end # ProtocolError
6
+ end
7
7
 
8
8
  # Undefined message payload
9
9
  Undefined = Class.new do
@@ -30,7 +30,7 @@ module Mutest
30
30
  def self.new(_type, _payload = Undefined)
31
31
  super
32
32
  end
33
- end # Message
33
+ end
34
34
 
35
35
  # Binding to other actors sender for simple RPC
36
36
  class Binding
@@ -44,9 +44,10 @@ module Mutest
44
44
  def call(type)
45
45
  other.call(Message.new(type, mailbox.sender))
46
46
  message = mailbox.receiver.call
47
- fail ProtocolError, "Expected #{type} but got #{message.type}" unless type.equal?(message.type)
47
+ raise ProtocolError, "Expected #{type} but got #{message.type}" unless type.equal?(message.type)
48
+
48
49
  message.payload
49
50
  end
50
- end # Binding
51
- end # Actor
52
- end # Mutest
51
+ end
52
+ end
53
+ end
@@ -23,6 +23,6 @@ module Mutest
23
23
  def new_mailbox
24
24
  Mailbox.new
25
25
  end
26
- end # Env
27
- end # Actor
28
- end # Mutest
26
+ end
27
+ end
28
+ end
@@ -2,7 +2,8 @@ module Mutest
2
2
  module Actor
3
3
  # Unbound mailbox
4
4
  class Mailbox
5
- include Adamantium::Flat, Concord::Public.new(:receiver, :sender)
5
+ include Concord::Public.new(:receiver, :sender)
6
+ include Adamantium::Flat
6
7
 
7
8
  # New mailbox
8
9
  #
@@ -26,6 +27,6 @@ module Mutest
26
27
  def bind(other)
27
28
  Binding.new(self, other)
28
29
  end
29
- end # Mailbox
30
- end # Actor
31
- end # Mutest
30
+ end
31
+ end
32
+ end
@@ -2,7 +2,8 @@ module Mutest
2
2
  module Actor
3
3
  # Receiver side of an actor
4
4
  class Receiver
5
- include Adamantium::Flat, Concord.new(:condition_variable, :mutex, :messages)
5
+ include Concord.new(:condition_variable, :mutex, :messages)
6
+ include Adamantium::Flat
6
7
 
7
8
  # Receives a message, blocking
8
9
  #
@@ -12,7 +13,7 @@ module Mutest
12
13
  message = try_blocking_receive
13
14
  return message unless message.equal?(Undefined)
14
15
  end
15
- fail ProtocolError
16
+ raise ProtocolError
16
17
  end
17
18
 
18
19
  private
@@ -34,6 +35,6 @@ module Mutest
34
35
  end
35
36
  end
36
37
  end
37
- end # Receiver
38
- end # Actor
39
- end # Mutest
38
+ end
39
+ end
40
+ end
@@ -2,7 +2,8 @@ module Mutest
2
2
  module Actor
3
3
  # Sender for messages to acting thread
4
4
  class Sender
5
- include Adamantium::Flat, Concord.new(:condition_variable, :mutex, :messages)
5
+ include Concord.new(:condition_variable, :mutex, :messages)
6
+ include Adamantium::Flat
6
7
 
7
8
  # Send a message to actor
8
9
  #
@@ -17,6 +18,6 @@ module Mutest
17
18
 
18
19
  self
19
20
  end
20
- end # Sender
21
- end # Actor
22
- end # Mutest
21
+ end
22
+ end
23
+ end
@@ -14,7 +14,8 @@ module Mutest
14
14
  # @return [nil]
15
15
  # otherwise
16
16
  def self.find_last_path(node, &predicate)
17
- fail ArgumentError, 'block expected' unless block_given?
17
+ raise ArgumentError, 'block expected' unless block_given?
18
+
18
19
  path = []
19
20
  walk(node, [node]) do |candidate, stack|
20
21
  path = stack.dup if predicate.call(candidate)
@@ -40,5 +41,5 @@ module Mutest
40
41
  end
41
42
  end
42
43
  private_class_method :walk
43
- end # AST
44
- end # Mutest
44
+ end
45
+ end
@@ -2,6 +2,6 @@ module Mutest
2
2
  module AST
3
3
  # Node meta information mixin
4
4
  module Meta
5
- end # Meta
6
- end # AST
7
- end # Mutest
5
+ end
6
+ end
7
+ end
@@ -4,7 +4,9 @@ module Mutest
4
4
  module Meta
5
5
  # Metadata for const nodes
6
6
  class Const
7
- include NamedChildren, Concord.new(:node), NodePredicates
7
+ include NodePredicates
8
+ include Concord.new(:node)
9
+ include NamedChildren
8
10
 
9
11
  children :base, :name
10
12
 
@@ -16,7 +18,7 @@ module Mutest
16
18
  def possible_top_level?
17
19
  base.nil? || n_cbase?(base)
18
20
  end
19
- end # Const
20
- end # Meta
21
- end # AST
22
- end # Mutest
21
+ end
22
+ end
23
+ end
24
+ end
@@ -4,7 +4,8 @@ module Mutest
4
4
  module Meta
5
5
  # Metadata for optional argument nodes
6
6
  class Optarg
7
- include NamedChildren, Concord.new(:node)
7
+ include Concord.new(:node)
8
+ include NamedChildren
8
9
 
9
10
  UNDERSCORE = '_'.freeze
10
11
 
@@ -18,7 +19,7 @@ module Mutest
18
19
  def used?
19
20
  !name.to_s.start_with?(UNDERSCORE)
20
21
  end
21
- end # Optarg
22
- end # Meta
23
- end # AST
24
- end # Mutest
22
+ end
23
+ end
24
+ end
25
+ end
@@ -4,12 +4,13 @@ module Mutest
4
4
  module Meta
5
5
  # Metadata for resbody nodes
6
6
  class Resbody
7
- include NamedChildren, Concord.new(:node)
7
+ include Concord.new(:node)
8
+ include NamedChildren
8
9
 
9
10
  children :captures, :assignment, :body
10
11
 
11
12
  public :captures, :assignment, :body
12
- end # Resbody
13
- end # Meta
14
- end # AST
15
- end # Mutest
13
+ end
14
+ end
15
+ end
16
+ end
@@ -4,12 +4,13 @@ module Mutest
4
4
  module Meta
5
5
  # Metadata for restarg nodes
6
6
  class Restarg
7
- include NamedChildren, Concord.new(:node)
7
+ include Concord.new(:node)
8
+ include NamedChildren
8
9
 
9
10
  children :name
10
11
 
11
12
  public :name
12
- end # Restarg
13
- end # Meta
14
- end # AST
15
- end # Mutest
13
+ end
14
+ end
15
+ end
16
+ end
@@ -4,7 +4,9 @@ module Mutest
4
4
  module Meta
5
5
  # Metadata for send nodes
6
6
  class Send
7
- include NamedChildren, Concord.new(:node), NodePredicates
7
+ include NodePredicates
8
+ include Concord.new(:node)
9
+ include NamedChildren
8
10
 
9
11
  children :receiver, :selector
10
12
 
@@ -28,14 +30,7 @@ module Mutest
28
30
  naked_proc? || proc_new?
29
31
  end
30
32
 
31
- # Test if AST node is a valid assignment target
32
- #
33
- # @return [Boolean]
34
- def assignment?
35
- index_assignment? || attribute_assignment?
36
- end
37
-
38
- # Test if AST node is an attribute assignment?
33
+ # Test if AST node is a valid attribute assignment
39
34
  #
40
35
  # @return [Boolean]
41
36
  def attribute_assignment?
@@ -43,13 +38,6 @@ module Mutest
43
38
  selector.to_s.end_with?(ATTRIBUTE_ASSIGNMENT_SELECTOR_SUFFIX)
44
39
  end
45
40
 
46
- # Test if AST node is an index assign
47
- #
48
- # @return [Boolean]
49
- def index_assignment?
50
- selector.equal?(INDEX_ASSIGNMENT_SELECTOR)
51
- end
52
-
53
41
  # Test for binary operator implemented as method
54
42
  #
55
43
  # @return [Boolean]
@@ -89,7 +77,7 @@ module Mutest
89
77
  n_const?(receiver) &&
90
78
  Const.new(receiver).name.equal?(:Proc)
91
79
  end
92
- end # Send
93
- end # Meta
94
- end # AST
95
- end # Mutest
80
+ end
81
+ end
82
+ end
83
+ end
@@ -4,12 +4,13 @@ module Mutest
4
4
  module Meta
5
5
  # Metadata for symbol nodes
6
6
  class Symbol
7
- include NamedChildren, Concord.new(:node)
7
+ include Concord.new(:node)
8
+ include NamedChildren
8
9
 
9
10
  children :name
10
11
 
11
12
  public :name
12
- end # Symbol
13
- end # Meta
14
- end # AST
15
- end # Mutest
13
+ end
14
+ end
15
+ end
16
+ end
@@ -24,7 +24,7 @@ module Mutest
24
24
  def children
25
25
  node.children
26
26
  end
27
- end # InstanceMethods
27
+ end
28
28
 
29
29
  # Methods mixed in at class level
30
30
  module ClassMethods
@@ -80,7 +80,7 @@ module Mutest
80
80
  define_method(name, &block)
81
81
  private(name)
82
82
  end
83
- end # ClassMethods
84
- end # NamedChildren
85
- end # AST
86
- end # Mutest
83
+ end
84
+ end
85
+ end
86
+ end
@@ -3,7 +3,7 @@ module Mutest
3
3
  # Module for node predicates
4
4
  module NodePredicates
5
5
  Types::ALL.each do |type|
6
- fail "method: #{type} is already defined" if instance_methods(true).include?(type)
6
+ raise "method: #{type} is already defined" if instance_methods(true).include?(type)
7
7
 
8
8
  name = "n_#{type.to_s.chomp('?')}?"
9
9
 
@@ -12,6 +12,6 @@ module Mutest
12
12
  end
13
13
  private name
14
14
  end
15
- end # NodePredicates
16
- end # AST
17
- end # Mutest
15
+ end
16
+ end
17
+ end
@@ -15,6 +15,6 @@ module Mutest
15
15
  N_SELF = s(:self)
16
16
  N_ZSUPER = s(:zsuper)
17
17
  N_EMPTY_SUPER = s(:super)
18
- end # Nodes
19
- end # AST
20
- end # Mutest
18
+ end
19
+ end
20
+ end
@@ -45,6 +45,6 @@ module Mutest
45
45
  def self.to_expression(node)
46
46
  Transformer.lookup(node.type).to_expression(node)
47
47
  end
48
- end # Regexp
49
- end # AST
50
- end # Mutest
48
+ end
49
+ end
50
+ end
@@ -52,7 +52,11 @@ module Mutest
52
52
  class ExpressionToAST
53
53
  PREFIX = :regexp
54
54
 
55
- include Concord.new(:expression), Procto.call, AST::Sexp, AbstractType, Adamantium
55
+ include Adamantium
56
+ include AbstractType
57
+ include AST::Sexp
58
+ include Procto.call
59
+ include Concord.new(:expression)
56
60
 
57
61
  private
58
62
 
@@ -93,11 +97,14 @@ module Mutest
93
97
  def type
94
98
  :"#{PREFIX}_#{expression.token}_#{expression.type}"
95
99
  end
96
- end # ExpressionToAST
100
+ end
97
101
 
98
102
  # Abstract node transformer
99
103
  class ASTToExpression
100
- include Concord.new(:node), Procto.call, AbstractType, Adamantium
104
+ include Adamantium
105
+ include AbstractType
106
+ include Procto.call
107
+ include Concord.new(:node)
101
108
 
102
109
  # Call generic transform method and freeze result
103
110
  #
@@ -119,7 +126,7 @@ module Mutest
119
126
  def subexpressions
120
127
  node.children.map(&Regexp.public_method(:to_expression))
121
128
  end
122
- end # ASTToExpression
129
+ end
123
130
 
124
131
  # Mixin for node transformers
125
132
  #
@@ -143,7 +150,8 @@ module Mutest
143
150
  new(table)
144
151
  end
145
152
 
146
- include Concord.new(:table), Adamantium
153
+ include Adamantium
154
+ include Concord.new(:table)
147
155
 
148
156
  # Types defined by the table
149
157
  #
@@ -160,7 +168,7 @@ module Mutest
160
168
  def lookup(type)
161
169
  table.fetch(type)
162
170
  end
163
- end # Table
171
+ end
164
172
 
165
173
  private
166
174
 
@@ -177,8 +185,8 @@ module Mutest
177
185
  def expression_class
178
186
  self.class::TABLE.lookup(node.type).regexp_class
179
187
  end
180
- end # LookupTable
181
- end # Transformer
182
- end # Regexp
183
- end # AST
184
- end # Mutest
188
+ end
189
+ end
190
+ end
191
+ end
192
+ end