mutest 0.0.9 → 0.0.10

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