mutant 0.10.23 → 0.10.28

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 (82) hide show
  1. checksums.yaml +4 -4
  2. data/lib/mutant.rb +34 -14
  3. data/lib/mutant/ast/find_metaclass_containing.rb +1 -1
  4. data/lib/mutant/ast/regexp.rb +54 -0
  5. data/lib/mutant/ast/regexp/transformer.rb +150 -0
  6. data/lib/mutant/ast/regexp/transformer/direct.rb +121 -0
  7. data/lib/mutant/ast/regexp/transformer/named_group.rb +50 -0
  8. data/lib/mutant/ast/regexp/transformer/options_group.rb +68 -0
  9. data/lib/mutant/ast/regexp/transformer/quantifier.rb +92 -0
  10. data/lib/mutant/ast/regexp/transformer/recursive.rb +56 -0
  11. data/lib/mutant/ast/regexp/transformer/root.rb +28 -0
  12. data/lib/mutant/ast/regexp/transformer/text.rb +58 -0
  13. data/lib/mutant/ast/types.rb +115 -2
  14. data/lib/mutant/bootstrap.rb +1 -1
  15. data/lib/mutant/cli/command.rb +4 -0
  16. data/lib/mutant/cli/command/environment.rb +9 -3
  17. data/lib/mutant/cli/command/environment/subject.rb +0 -4
  18. data/lib/mutant/cli/command/environment/test.rb +36 -0
  19. data/lib/mutant/cli/command/root.rb +1 -1
  20. data/lib/mutant/config.rb +9 -55
  21. data/lib/mutant/config/coverage_criteria.rb +61 -0
  22. data/lib/mutant/context.rb +1 -1
  23. data/lib/mutant/env.rb +2 -2
  24. data/lib/mutant/expression.rb +0 -12
  25. data/lib/mutant/expression/method.rb +4 -4
  26. data/lib/mutant/expression/methods.rb +5 -4
  27. data/lib/mutant/integration.rb +8 -2
  28. data/lib/mutant/isolation/exception.rb +22 -0
  29. data/lib/mutant/isolation/fork.rb +9 -12
  30. data/lib/mutant/loader.rb +1 -1
  31. data/lib/mutant/matcher.rb +3 -3
  32. data/lib/mutant/matcher/config.rb +30 -8
  33. data/lib/mutant/matcher/method.rb +14 -13
  34. data/lib/mutant/matcher/method/instance.rb +6 -2
  35. data/lib/mutant/matcher/method/metaclass.rb +1 -1
  36. data/lib/mutant/matcher/methods.rb +2 -4
  37. data/lib/mutant/meta/example.rb +1 -1
  38. data/lib/mutant/meta/example/dsl.rb +6 -2
  39. data/lib/mutant/meta/example/verification.rb +1 -1
  40. data/lib/mutant/mutation.rb +1 -1
  41. data/lib/mutant/mutator.rb +8 -1
  42. data/lib/mutant/mutator/node.rb +0 -5
  43. data/lib/mutant/mutator/node/argument.rb +2 -2
  44. data/lib/mutant/mutator/node/dynamic_literal.rb +1 -1
  45. data/lib/mutant/mutator/node/index.rb +1 -0
  46. data/lib/mutant/mutator/node/kwargs.rb +2 -2
  47. data/lib/mutant/mutator/node/literal/float.rb +1 -3
  48. data/lib/mutant/mutator/node/literal/integer.rb +3 -6
  49. data/lib/mutant/mutator/node/literal/regex.rb +12 -0
  50. data/lib/mutant/mutator/node/module.rb +19 -0
  51. data/lib/mutant/mutator/node/named_value/variable_assignment.rb +3 -3
  52. data/lib/mutant/mutator/node/regexp.rb +20 -0
  53. data/lib/mutant/mutator/node/regexp/alternation_meta.rb +20 -0
  54. data/lib/mutant/mutator/node/regexp/beginning_of_line_anchor.rb +20 -0
  55. data/lib/mutant/mutator/node/regexp/capture_group.rb +25 -0
  56. data/lib/mutant/mutator/node/regexp/character_type.rb +31 -0
  57. data/lib/mutant/mutator/node/regexp/end_of_line_anchor.rb +20 -0
  58. data/lib/mutant/mutator/node/regexp/end_of_string_or_before_end_of_line_anchor.rb +20 -0
  59. data/lib/mutant/mutator/node/regexp/named_group.rb +39 -0
  60. data/lib/mutant/mutator/node/regexp/zero_or_more.rb +34 -0
  61. data/lib/mutant/mutator/node/regopt.rb +1 -1
  62. data/lib/mutant/mutator/node/sclass.rb +1 -1
  63. data/lib/mutant/mutator/node/send.rb +73 -6
  64. data/lib/mutant/parallel.rb +2 -2
  65. data/lib/mutant/parallel/driver.rb +1 -1
  66. data/lib/mutant/parallel/worker.rb +1 -1
  67. data/lib/mutant/parser.rb +1 -1
  68. data/lib/mutant/pipe.rb +1 -1
  69. data/lib/mutant/procto.rb +23 -0
  70. data/lib/mutant/reporter/cli/printer.rb +10 -4
  71. data/lib/mutant/reporter/cli/printer/env.rb +3 -3
  72. data/lib/mutant/reporter/cli/printer/env_progress.rb +2 -2
  73. data/lib/mutant/reporter/cli/printer/isolation_result.rb +3 -1
  74. data/lib/mutant/selector.rb +1 -1
  75. data/lib/mutant/subject.rb +2 -4
  76. data/lib/mutant/subject/method/instance.rb +6 -45
  77. data/lib/mutant/transform.rb +25 -0
  78. data/lib/mutant/variable.rb +322 -0
  79. data/lib/mutant/version.rb +1 -1
  80. data/lib/mutant/world.rb +2 -3
  81. metadata +38 -149
  82. data/lib/mutant/warnings.rb +0 -106
@@ -2,5 +2,5 @@
2
2
 
3
3
  module Mutant
4
4
  # Current mutant version
5
- VERSION = '0.10.23'
5
+ VERSION = '0.10.28'
6
6
  end # Mutant
data/lib/mutant/world.rb CHANGED
@@ -3,7 +3,7 @@
3
3
  module Mutant
4
4
  # The outer world IO objects mutant does interact with
5
5
  class World
6
- include Adamantium::Flat, Anima.new(
6
+ include Adamantium, Anima.new(
7
7
  :condition_variable,
8
8
  :gem,
9
9
  :gem_method,
@@ -20,8 +20,7 @@ module Mutant
20
20
  :stderr,
21
21
  :stdout,
22
22
  :thread,
23
- :timer,
24
- :warnings
23
+ :timer
25
24
  )
26
25
 
27
26
  INSPECT = '#<Mutant::World>'
metadata CHANGED
@@ -1,85 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mutant
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.23
4
+ version: 0.10.28
5
5
  platform: ruby
6
6
  authors:
7
7
  - Markus Schirp
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-12-30 00:00:00.000000000 Z
11
+ date: 2021-03-07 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: abstract_type
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: 0.0.7
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: 0.0.7
27
- - !ruby/object:Gem::Dependency
28
- name: adamantium
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: 0.2.0
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: 0.2.0
41
- - !ruby/object:Gem::Dependency
42
- name: anima
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: 0.3.1
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: 0.3.1
55
- - !ruby/object:Gem::Dependency
56
- name: ast
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '2.2'
62
- type: :runtime
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: '2.2'
69
- - !ruby/object:Gem::Dependency
70
- name: concord
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - "~>"
74
- - !ruby/object:Gem::Version
75
- version: 0.1.5
76
- type: :runtime
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: 0.1.5
83
13
  - !ruby/object:Gem::Dependency
84
14
  name: diff-lcs
85
15
  requirement: !ruby/object:Gem::Requirement
@@ -94,62 +24,6 @@ dependencies:
94
24
  - - "~>"
95
25
  - !ruby/object:Gem::Version
96
26
  version: '1.3'
97
- - !ruby/object:Gem::Dependency
98
- name: equalizer
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - "~>"
102
- - !ruby/object:Gem::Version
103
- version: 0.0.9
104
- type: :runtime
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - "~>"
109
- - !ruby/object:Gem::Version
110
- version: 0.0.9
111
- - !ruby/object:Gem::Dependency
112
- name: ice_nine
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - "~>"
116
- - !ruby/object:Gem::Version
117
- version: 0.11.1
118
- type: :runtime
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - "~>"
123
- - !ruby/object:Gem::Version
124
- version: 0.11.1
125
- - !ruby/object:Gem::Dependency
126
- name: memoizable
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - "~>"
130
- - !ruby/object:Gem::Version
131
- version: 0.4.2
132
- type: :runtime
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - "~>"
137
- - !ruby/object:Gem::Version
138
- version: 0.4.2
139
- - !ruby/object:Gem::Dependency
140
- name: mprelude
141
- requirement: !ruby/object:Gem::Requirement
142
- requirements:
143
- - - "~>"
144
- - !ruby/object:Gem::Version
145
- version: 0.1.0
146
- type: :runtime
147
- prerelease: false
148
- version_requirements: !ruby/object:Gem::Requirement
149
- requirements:
150
- - - "~>"
151
- - !ruby/object:Gem::Version
152
- version: 0.1.0
153
27
  - !ruby/object:Gem::Dependency
154
28
  name: parser
155
29
  requirement: !ruby/object:Gem::Requirement
@@ -165,47 +39,39 @@ dependencies:
165
39
  - !ruby/object:Gem::Version
166
40
  version: 3.0.0
167
41
  - !ruby/object:Gem::Dependency
168
- name: procto
42
+ name: regexp_parser
169
43
  requirement: !ruby/object:Gem::Requirement
170
44
  requirements:
171
45
  - - "~>"
172
46
  - !ruby/object:Gem::Version
173
- version: 0.0.2
174
- type: :runtime
175
- prerelease: false
176
- version_requirements: !ruby/object:Gem::Requirement
177
- requirements:
178
- - - "~>"
179
- - !ruby/object:Gem::Version
180
- version: 0.0.2
181
- - !ruby/object:Gem::Dependency
182
- name: unparser
183
- requirement: !ruby/object:Gem::Requirement
184
- requirements:
185
- - - "~>"
47
+ version: '2.0'
48
+ - - ">="
186
49
  - !ruby/object:Gem::Version
187
- version: 0.5.6
50
+ version: 2.0.3
188
51
  type: :runtime
189
52
  prerelease: false
190
53
  version_requirements: !ruby/object:Gem::Requirement
191
54
  requirements:
192
55
  - - "~>"
193
56
  - !ruby/object:Gem::Version
194
- version: 0.5.6
57
+ version: '2.0'
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: 2.0.3
195
61
  - !ruby/object:Gem::Dependency
196
- name: variable
62
+ name: unparser
197
63
  requirement: !ruby/object:Gem::Requirement
198
64
  requirements:
199
65
  - - "~>"
200
66
  - !ruby/object:Gem::Version
201
- version: 0.0.1
67
+ version: 0.6.0
202
68
  type: :runtime
203
69
  prerelease: false
204
70
  version_requirements: !ruby/object:Gem::Requirement
205
71
  requirements:
206
72
  - - "~>"
207
73
  - !ruby/object:Gem::Version
208
- version: 0.0.1
74
+ version: 0.6.0
209
75
  - !ruby/object:Gem::Dependency
210
76
  name: parallel
211
77
  requirement: !ruby/object:Gem::Requirement
@@ -299,6 +165,15 @@ files:
299
165
  - lib/mutant/ast/named_children.rb
300
166
  - lib/mutant/ast/node_predicates.rb
301
167
  - lib/mutant/ast/nodes.rb
168
+ - lib/mutant/ast/regexp.rb
169
+ - lib/mutant/ast/regexp/transformer.rb
170
+ - lib/mutant/ast/regexp/transformer/direct.rb
171
+ - lib/mutant/ast/regexp/transformer/named_group.rb
172
+ - lib/mutant/ast/regexp/transformer/options_group.rb
173
+ - lib/mutant/ast/regexp/transformer/quantifier.rb
174
+ - lib/mutant/ast/regexp/transformer/recursive.rb
175
+ - lib/mutant/ast/regexp/transformer/root.rb
176
+ - lib/mutant/ast/regexp/transformer/text.rb
302
177
  - lib/mutant/ast/sexp.rb
303
178
  - lib/mutant/ast/types.rb
304
179
  - lib/mutant/bootstrap.rb
@@ -308,9 +183,11 @@ files:
308
183
  - lib/mutant/cli/command/environment/run.rb
309
184
  - lib/mutant/cli/command/environment/show.rb
310
185
  - lib/mutant/cli/command/environment/subject.rb
186
+ - lib/mutant/cli/command/environment/test.rb
311
187
  - lib/mutant/cli/command/root.rb
312
188
  - lib/mutant/cli/command/subscription.rb
313
189
  - lib/mutant/config.rb
190
+ - lib/mutant/config/coverage_criteria.rb
314
191
  - lib/mutant/context.rb
315
192
  - lib/mutant/env.rb
316
193
  - lib/mutant/expression.rb
@@ -321,6 +198,7 @@ files:
321
198
  - lib/mutant/integration.rb
322
199
  - lib/mutant/integration/null.rb
323
200
  - lib/mutant/isolation.rb
201
+ - lib/mutant/isolation/exception.rb
324
202
  - lib/mutant/isolation/fork.rb
325
203
  - lib/mutant/isolation/none.rb
326
204
  - lib/mutant/license.rb
@@ -382,6 +260,7 @@ files:
382
260
  - lib/mutant/mutator/node/masgn.rb
383
261
  - lib/mutant/mutator/node/match_current_line.rb
384
262
  - lib/mutant/mutator/node/mlhs.rb
263
+ - lib/mutant/mutator/node/module.rb
385
264
  - lib/mutant/mutator/node/named_value/access.rb
386
265
  - lib/mutant/mutator/node/named_value/constant_assignment.rb
387
266
  - lib/mutant/mutator/node/named_value/variable_assignment.rb
@@ -391,6 +270,15 @@ files:
391
270
  - lib/mutant/mutator/node/op_asgn.rb
392
271
  - lib/mutant/mutator/node/or_asgn.rb
393
272
  - lib/mutant/mutator/node/procarg_zero.rb
273
+ - lib/mutant/mutator/node/regexp.rb
274
+ - lib/mutant/mutator/node/regexp/alternation_meta.rb
275
+ - lib/mutant/mutator/node/regexp/beginning_of_line_anchor.rb
276
+ - lib/mutant/mutator/node/regexp/capture_group.rb
277
+ - lib/mutant/mutator/node/regexp/character_type.rb
278
+ - lib/mutant/mutator/node/regexp/end_of_line_anchor.rb
279
+ - lib/mutant/mutator/node/regexp/end_of_string_or_before_end_of_line_anchor.rb
280
+ - lib/mutant/mutator/node/regexp/named_group.rb
281
+ - lib/mutant/mutator/node/regexp/zero_or_more.rb
394
282
  - lib/mutant/mutator/node/regopt.rb
395
283
  - lib/mutant/mutator/node/resbody.rb
396
284
  - lib/mutant/mutator/node/rescue.rb
@@ -414,6 +302,7 @@ files:
414
302
  - lib/mutant/parallel/worker.rb
415
303
  - lib/mutant/parser.rb
416
304
  - lib/mutant/pipe.rb
305
+ - lib/mutant/procto.rb
417
306
  - lib/mutant/range.rb
418
307
  - lib/mutant/registry.rb
419
308
  - lib/mutant/reporter.rb
@@ -451,8 +340,8 @@ files:
451
340
  - lib/mutant/timer.rb
452
341
  - lib/mutant/transform.rb
453
342
  - lib/mutant/util.rb
343
+ - lib/mutant/variable.rb
454
344
  - lib/mutant/version.rb
455
- - lib/mutant/warnings.rb
456
345
  - lib/mutant/world.rb
457
346
  - lib/mutant/zombifier.rb
458
347
  homepage: https://github.com/mbj/mutant
@@ -474,7 +363,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
474
363
  - !ruby/object:Gem::Version
475
364
  version: '0'
476
365
  requirements: []
477
- rubygems_version: 3.2.0.rc.1
366
+ rubygems_version: 3.1.4
478
367
  signing_key:
479
368
  specification_version: 4
480
369
  summary: ''
@@ -1,106 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Mutant
4
- # Class to capture warnings generated by Kernel#warn and Ruby itself.
5
- #
6
- # @example
7
- # capture = Mutant::Warnings.new(Warning)
8
- #
9
- # # Note that this test case shows we can capture warnings generated from C
10
- # def ruby_warning
11
- # Class.new do
12
- # undef :initialize
13
- # end
14
- # end
15
- #
16
- # messages = capture.call do
17
- # ruby_warning
18
- # end
19
- #
20
- # messages # => ["some_file.rb:44: warning: undefining `initialize' may cause serious problems\n"]
21
- #
22
- # Note this API is fundamentally impure:
23
- #
24
- # * Unlike almost all of classes in the mutant code base it has internal
25
- # mutable state
26
- # * Its therefore NOT thread safe
27
- # * And worst: Each instance, even after its not referenced anymore by user
28
- # code: Leaks permanent global state as instances of this class hook
29
- # itself into the `Warning` module.
30
- #
31
- # So ideally only make *one* instance, and re-use it.
32
- #
33
- # Also note, a more canonical implementation would prepend modules and simply
34
- # call `super` in the event the capture is disabled. This sadly does not
35
- # work as it would inference with various bad players in the ruby ecosystem
36
- # that do not adhere to the semantics outlined in the documentation.
37
- #
38
- # See: https://ruby-doc.org/core-2.6.3/Warning.html
39
- #
40
- # For example in case rubygems is active it adds its own hook to warnings,
41
- # that would in case of the super implementation cause infinite recursion.
42
- #
43
- # Reproduction for this case is as simple as:
44
- #
45
- # ```
46
- # require 'rubygems'
47
- #
48
- # module Warning
49
- # def warn(*)
50
- # super
51
- # end
52
- # end
53
- # ```
54
- #
55
- # For that reason we do have to use the original method capture to dispatch
56
- # in disabled state.
57
- #
58
- class Warnings
59
- # Error raised when warning capture is used recursively
60
- class RecursiveUseError < RuntimeError; end
61
-
62
- # Initialize object
63
- #
64
- # @param [Module] warning
65
- # the module to integrate against
66
- #
67
- # @return [undefined]
68
- def initialize(warning)
69
- @disabled = true
70
- @messages = []
71
- @original = warning.public_method(:warn)
72
-
73
- capture = method(:capture)
74
- warning.module_eval do
75
- module_function define_method(:warn, &capture)
76
- end
77
- end
78
-
79
- # Run a block with warning collection enabled
80
- #
81
- # @return [Array<String>]
82
- def call
83
- assert_no_recursion
84
- @disabled = nil
85
- yield
86
- IceNine.deep_freeze(@messages.dup)
87
- ensure
88
- @disabled = true
89
- @messages.clear
90
- end
91
-
92
- private
93
-
94
- def capture(*arguments)
95
- if @disabled
96
- @original.call(*arguments)
97
- else
98
- @messages << arguments
99
- end
100
- end
101
-
102
- def assert_no_recursion
103
- fail RecursiveUseError unless @disabled
104
- end
105
- end # Warnings
106
- end # Mutant