mutant 0.14.2 → 0.15.1

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 (72) hide show
  1. checksums.yaml +4 -4
  2. data/VERSION +1 -1
  3. data/bin/mutant +0 -7
  4. data/lib/mutant/ast/named_children.rb +0 -4
  5. data/lib/mutant/ast/nodes.rb +5 -0
  6. data/lib/mutant/ast/pattern/lexer.rb +0 -1
  7. data/lib/mutant/ast/structure.rb +10 -0
  8. data/lib/mutant/context.rb +2 -6
  9. data/lib/mutant/env.rb +8 -27
  10. data/lib/mutant/hooks.rb +2 -6
  11. data/lib/mutant/integration/null.rb +1 -3
  12. data/lib/mutant/integration.rb +2 -6
  13. data/lib/mutant/isolation/fork.rb +0 -2
  14. data/lib/mutant/matcher/method/instance.rb +2 -2
  15. data/lib/mutant/matcher/method.rb +0 -1
  16. data/lib/mutant/meta/example/verification.rb +0 -1
  17. data/lib/mutant/mutation/operators.rb +141 -44
  18. data/lib/mutant/mutation.rb +6 -18
  19. data/lib/mutant/mutator/node/and_asgn.rb +1 -0
  20. data/lib/mutant/mutator/node/binary.rb +5 -0
  21. data/lib/mutant/mutator/node/block.rb +10 -0
  22. data/lib/mutant/mutator/node/case_match.rb +46 -0
  23. data/lib/mutant/mutator/node/conditional_loop.rb +30 -1
  24. data/lib/mutant/mutator/node/define.rb +26 -0
  25. data/lib/mutant/mutator/node/defined.rb +1 -0
  26. data/lib/mutant/mutator/node/ensure.rb +24 -0
  27. data/lib/mutant/mutator/node/guard.rb +23 -0
  28. data/lib/mutant/mutator/node/in_pattern.rb +25 -0
  29. data/lib/mutant/mutator/node/literal/complex.rb +31 -0
  30. data/lib/mutant/mutator/node/literal/rational.rb +31 -0
  31. data/lib/mutant/mutator/node/literal/string.rb +1 -0
  32. data/lib/mutant/mutator/node/match_alt.rb +26 -0
  33. data/lib/mutant/mutator/node/match_pattern_p.rb +25 -0
  34. data/lib/mutant/mutator/node/op_asgn.rb +21 -1
  35. data/lib/mutant/mutator/node/or_asgn.rb +1 -4
  36. data/lib/mutant/mutator/node/regopt.rb +4 -6
  37. data/lib/mutant/mutator/node/rescue.rb +27 -0
  38. data/lib/mutant/mutator/node/send/binary.rb +45 -0
  39. data/lib/mutant/mutator/node/send.rb +23 -7
  40. data/lib/mutant/mutator/node/super.rb +2 -0
  41. data/lib/mutant/mutator/node/zsuper.rb +17 -0
  42. data/lib/mutant/mutator/node.rb +3 -9
  43. data/lib/mutant/mutator.rb +1 -3
  44. data/lib/mutant/parallel/connection.rb +9 -23
  45. data/lib/mutant/parallel/driver.rb +1 -5
  46. data/lib/mutant/parallel/source.rb +2 -1
  47. data/lib/mutant/parallel/worker.rb +8 -14
  48. data/lib/mutant/registry.rb +2 -1
  49. data/lib/mutant/reporter/cli/format.rb +4 -12
  50. data/lib/mutant/reporter/cli/printer/env_result.rb +9 -0
  51. data/lib/mutant/reporter/cli/printer.rb +2 -6
  52. data/lib/mutant/reporter/cli/progress_bar.rb +4 -12
  53. data/lib/mutant/reporter/cli.rb +6 -23
  54. data/lib/mutant/reporter/sequence.rb +1 -3
  55. data/lib/mutant/repository/diff.rb +1 -3
  56. data/lib/mutant/result.rb +16 -48
  57. data/lib/mutant/scope.rb +2 -6
  58. data/lib/mutant/segment.rb +1 -3
  59. data/lib/mutant/subject/method/instance.rb +3 -9
  60. data/lib/mutant/subject/method/metaclass.rb +1 -4
  61. data/lib/mutant/subject/method/singleton.rb +2 -8
  62. data/lib/mutant/subject/method.rb +3 -9
  63. data/lib/mutant/subject.rb +6 -18
  64. data/lib/mutant/timer.rb +2 -6
  65. data/lib/mutant/transform.rb +11 -33
  66. data/lib/mutant/usage.rb +6 -18
  67. data/lib/mutant/variable.rb +2 -6
  68. data/lib/mutant/version.rb +8 -14
  69. data/lib/mutant/world.rb +1 -3
  70. data/lib/mutant/zombifier.rb +3 -1
  71. data/lib/mutant.rb +8 -0
  72. metadata +39 -13
@@ -7,9 +7,7 @@ module Mutant
7
7
  # Default slug
8
8
  #
9
9
  # @return [String]
10
- def slug
11
- self.class.to_s
12
- end
10
+ def slug = self.class.to_s
13
11
 
14
12
  # Apply transformation to input
15
13
  #
@@ -34,24 +32,18 @@ module Mutant
34
32
  # Compact error message
35
33
  #
36
34
  # @return [String]
37
- def compact_message
38
- COMPACT % { path:, message: trace.last.message }
39
- end
35
+ def compact_message = COMPACT % { path:, message: trace.last.message }
40
36
  memoize :compact_message
41
37
 
42
38
  # Error path trace
43
39
  #
44
40
  # @return [Array<Error>]
45
- def trace
46
- [self, *cause&.trace]
47
- end
41
+ def trace = [self, *cause&.trace]
48
42
  memoize :trace
49
43
 
50
44
  private
51
45
 
52
- def path
53
- trace.map { |error| error.transform.slug }.reject(&:empty?).join('/')
54
- end
46
+ def path = trace.map { |error| error.transform.slug }.reject(&:empty?).join('/')
55
47
  end # Error
56
48
 
57
49
  # Wrapper adding a name to a transformation
@@ -68,9 +60,7 @@ module Mutant
68
60
  # Named slug
69
61
  #
70
62
  # @return [String]
71
- def slug
72
- name
73
- end
63
+ def slug = name
74
64
  end # Named
75
65
 
76
66
  class Block < self
@@ -93,9 +83,7 @@ module Mutant
93
83
  end
94
84
  end
95
85
 
96
- def slug
97
- name
98
- end
86
+ def slug = name
99
87
  end
100
88
 
101
89
  private
@@ -158,9 +146,7 @@ module Mutant
158
146
  # Rendering slug
159
147
  #
160
148
  # @return [Array<String>]
161
- def slug
162
- '%<index>d' % { index: }
163
- end
149
+ def slug = '%<index>d' % { index: }
164
150
  memoize :slug
165
151
  end # Index
166
152
 
@@ -193,9 +179,7 @@ module Mutant
193
179
  # Rendering slug
194
180
  #
195
181
  # @return [String]
196
- def slug
197
- primitive.to_s
198
- end
182
+ def slug = primitive.to_s
199
183
  memoize :slug
200
184
  end # Primitive
201
185
 
@@ -298,9 +282,7 @@ module Mutant
298
282
  # Rendering slug
299
283
  #
300
284
  # @return [String]
301
- def slug
302
- '[%<key>s]' % { key: value.inspect }
303
- end
285
+ def slug = '[%<key>s]' % { key: value.inspect }
304
286
  memoize :slug
305
287
 
306
288
  # Apply transformation to input
@@ -388,14 +370,10 @@ module Mutant
388
370
  end
389
371
  # rubocop:enable Metrics/MethodLength
390
372
 
391
- def allowed_keys
392
- required_keys + optional.map(&:value)
393
- end
373
+ def allowed_keys = required_keys + optional.map(&:value)
394
374
  memoize :allowed_keys
395
375
 
396
- def required_keys
397
- required.map(&:value)
398
- end
376
+ def required_keys = required.map(&:value)
399
377
  memoize :required_keys
400
378
  end # Hash
401
379
 
data/lib/mutant/usage.rb CHANGED
@@ -4,21 +4,13 @@ module Mutant
4
4
  class Usage
5
5
  include Adamantium, Equalizer.new
6
6
 
7
- def value
8
- self.class::VALUE
9
- end
7
+ def value = self.class::VALUE
10
8
 
11
- def verify
12
- Either::Right.new(nil)
13
- end
9
+ def verify = Either::Right.new(nil)
14
10
 
15
- def message
16
- self.class::MESSAGE
17
- end
11
+ def message = self.class::MESSAGE
18
12
 
19
- def merge(_other)
20
- self
21
- end
13
+ def merge(_other) = self
22
14
 
23
15
  class Commercial < self
24
16
  VALUE = 'commercial'
@@ -81,13 +73,9 @@ module Mutant
81
73
  License gem is gone entirely.
82
74
  MESSAGE
83
75
 
84
- def merge(other)
85
- other
86
- end
76
+ def merge(other) = other
87
77
 
88
- def verify
89
- Either::Left.new(MESSAGE)
90
- end
78
+ def verify = Either::Left.new(MESSAGE)
91
79
  end
92
80
 
93
81
  def self.parse(value)
@@ -197,9 +197,7 @@ module Mutant
197
197
  # Wait till mvar is full
198
198
  #
199
199
  # @return [undefined]
200
- def wait_full
201
- wait(@full, &method(:full?))
202
- end
200
+ def wait_full = wait(@full, &method(:full?))
203
201
 
204
202
  # Test if state is full
205
203
  #
@@ -262,9 +260,7 @@ module Mutant
262
260
  # Perform take operation
263
261
  #
264
262
  # @return [Object]
265
- def perform_take
266
- @value
267
- end
263
+ def perform_take = @value
268
264
  end # IVar
269
265
 
270
266
  # Shared variable that can be written multiple times
@@ -4,19 +4,13 @@ require 'pathname'
4
4
 
5
5
  module Mutant
6
6
  # Current mutant version
7
- #
8
- # See RUST.md for documentation on version loading behavior.
9
7
  VERSION =
10
- if ENV['MUTANT_RUST']
11
- ENV.fetch('MUTANT_VERSION').freeze
12
- else
13
- Pathname
14
- .new(__dir__)
15
- .parent
16
- .parent
17
- .join('VERSION')
18
- .read
19
- .chomp
20
- .freeze
21
- end
8
+ Pathname
9
+ .new(__dir__)
10
+ .parent
11
+ .parent
12
+ .join('VERSION')
13
+ .read
14
+ .chomp
15
+ .freeze
22
16
  end # Mutant
data/lib/mutant/world.rb CHANGED
@@ -35,9 +35,7 @@ module Mutant
35
35
  # Object inspection
36
36
  #
37
37
  # @return [String]
38
- def inspect
39
- INSPECT
40
- end
38
+ def inspect = INSPECT
41
39
 
42
40
  class CommandStatus
43
41
  include Adamantium, Anima.new(:process_status, :stderr, :stdout)
@@ -17,7 +17,9 @@ module Mutant
17
17
 
18
18
  include AST::Sexp
19
19
 
20
- LoadError = Class.new(::LoadError)
20
+ class LoadError < ::LoadError
21
+ end
22
+
21
23
  # Initialize object
22
24
  #
23
25
  # @param [Symbol] namespace
data/lib/mutant.rb CHANGED
@@ -117,6 +117,7 @@ module Mutant
117
117
  require 'mutant/mutator/util/symbol'
118
118
  require 'mutant/mutator/node'
119
119
  require 'mutant/mutator/node/generic'
120
+ require 'mutant/mutator/node/guard'
120
121
  require 'mutant/mutator/node/literal'
121
122
  require 'mutant/mutator/node/literal/boolean'
122
123
  require 'mutant/mutator/node/literal/range'
@@ -124,6 +125,8 @@ module Mutant
124
125
  require 'mutant/mutator/node/literal/string'
125
126
  require 'mutant/mutator/node/literal/integer'
126
127
  require 'mutant/mutator/node/literal/float'
128
+ require 'mutant/mutator/node/literal/rational'
129
+ require 'mutant/mutator/node/literal/complex'
127
130
  require 'mutant/mutator/node/literal/array'
128
131
  require 'mutant/mutator/node/literal/hash'
129
132
  require 'mutant/mutator/node/literal/regex'
@@ -166,10 +169,15 @@ module Mutant
166
169
  require 'mutant/mutator/node/block_pass'
167
170
  require 'mutant/mutator/node/if'
168
171
  require 'mutant/mutator/node/case'
172
+ require 'mutant/mutator/node/case_match'
169
173
  require 'mutant/mutator/node/splat'
170
174
  require 'mutant/mutator/node/regopt'
175
+ require 'mutant/mutator/node/in_pattern'
176
+ require 'mutant/mutator/node/match_alt'
177
+ require 'mutant/mutator/node/match_pattern_p'
171
178
  require 'mutant/mutator/node/resbody'
172
179
  require 'mutant/mutator/node/rescue'
180
+ require 'mutant/mutator/node/ensure'
173
181
  require 'mutant/mutator/node/match_current_line'
174
182
  require 'mutant/mutator/node/index'
175
183
  require 'mutant/mutator/node/procarg_zero'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mutant
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.14.2
4
+ version: 0.15.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Markus Schirp
@@ -13,16 +13,22 @@ dependencies:
13
13
  name: diff-lcs
14
14
  requirement: !ruby/object:Gem::Requirement
15
15
  requirements:
16
- - - "~>"
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '1.6'
19
+ - - "<"
17
20
  - !ruby/object:Gem::Version
18
- version: '1.3'
21
+ version: '3'
19
22
  type: :runtime
20
23
  prerelease: false
21
24
  version_requirements: !ruby/object:Gem::Requirement
22
25
  requirements:
23
- - - "~>"
26
+ - - ">="
24
27
  - !ruby/object:Gem::Version
25
- version: '1.3'
28
+ version: '1.6'
29
+ - - "<"
30
+ - !ruby/object:Gem::Version
31
+ version: '3'
26
32
  - !ruby/object:Gem::Dependency
27
33
  name: irb
28
34
  requirement: !ruby/object:Gem::Requirement
@@ -43,14 +49,14 @@ dependencies:
43
49
  requirements:
44
50
  - - "~>"
45
51
  - !ruby/object:Gem::Version
46
- version: 3.3.0
52
+ version: 3.3.10
47
53
  type: :runtime
48
54
  prerelease: false
49
55
  version_requirements: !ruby/object:Gem::Requirement
50
56
  requirements:
51
57
  - - "~>"
52
58
  - !ruby/object:Gem::Version
53
- version: 3.3.0
59
+ version: 3.3.10
54
60
  - !ruby/object:Gem::Dependency
55
61
  name: regexp_parser
56
62
  requirement: !ruby/object:Gem::Requirement
@@ -85,42 +91,54 @@ dependencies:
85
91
  requirements:
86
92
  - - "~>"
87
93
  - !ruby/object:Gem::Version
88
- version: 0.8.0
94
+ version: 0.8.2
89
95
  type: :runtime
90
96
  prerelease: false
91
97
  version_requirements: !ruby/object:Gem::Requirement
92
98
  requirements:
93
99
  - - "~>"
94
100
  - !ruby/object:Gem::Version
95
- version: 0.8.0
101
+ version: 0.8.2
96
102
  - !ruby/object:Gem::Dependency
97
103
  name: rspec
98
104
  requirement: !ruby/object:Gem::Requirement
99
105
  requirements:
100
- - - "~>"
106
+ - - ">="
101
107
  - !ruby/object:Gem::Version
102
108
  version: '3.10'
109
+ - - "<"
110
+ - !ruby/object:Gem::Version
111
+ version: '5'
103
112
  type: :development
104
113
  prerelease: false
105
114
  version_requirements: !ruby/object:Gem::Requirement
106
115
  requirements:
107
- - - "~>"
116
+ - - ">="
108
117
  - !ruby/object:Gem::Version
109
118
  version: '3.10'
119
+ - - "<"
120
+ - !ruby/object:Gem::Version
121
+ version: '5'
110
122
  - !ruby/object:Gem::Dependency
111
123
  name: rspec-core
112
124
  requirement: !ruby/object:Gem::Requirement
113
125
  requirements:
114
- - - "~>"
126
+ - - ">="
115
127
  - !ruby/object:Gem::Version
116
128
  version: '3.10'
129
+ - - "<"
130
+ - !ruby/object:Gem::Version
131
+ version: '5'
117
132
  type: :development
118
133
  prerelease: false
119
134
  version_requirements: !ruby/object:Gem::Requirement
120
135
  requirements:
121
- - - "~>"
136
+ - - ">="
122
137
  - !ruby/object:Gem::Version
123
138
  version: '3.10'
139
+ - - "<"
140
+ - !ruby/object:Gem::Version
141
+ version: '5'
124
142
  - !ruby/object:Gem::Dependency
125
143
  name: rspec-its
126
144
  requirement: !ruby/object:Gem::Requirement
@@ -247,6 +265,7 @@ files:
247
265
  - lib/mutant/mutator/node/block_pass.rb
248
266
  - lib/mutant/mutator/node/break.rb
249
267
  - lib/mutant/mutator/node/case.rb
268
+ - lib/mutant/mutator/node/case_match.rb
250
269
  - lib/mutant/mutator/node/class.rb
251
270
  - lib/mutant/mutator/node/conditional_loop.rb
252
271
  - lib/mutant/mutator/node/const.rb
@@ -254,24 +273,31 @@ files:
254
273
  - lib/mutant/mutator/node/define.rb
255
274
  - lib/mutant/mutator/node/defined.rb
256
275
  - lib/mutant/mutator/node/dynamic_literal.rb
276
+ - lib/mutant/mutator/node/ensure.rb
257
277
  - lib/mutant/mutator/node/generic.rb
278
+ - lib/mutant/mutator/node/guard.rb
258
279
  - lib/mutant/mutator/node/if.rb
280
+ - lib/mutant/mutator/node/in_pattern.rb
259
281
  - lib/mutant/mutator/node/index.rb
260
282
  - lib/mutant/mutator/node/kwargs.rb
261
283
  - lib/mutant/mutator/node/kwbegin.rb
262
284
  - lib/mutant/mutator/node/literal.rb
263
285
  - lib/mutant/mutator/node/literal/array.rb
264
286
  - lib/mutant/mutator/node/literal/boolean.rb
287
+ - lib/mutant/mutator/node/literal/complex.rb
265
288
  - lib/mutant/mutator/node/literal/float.rb
266
289
  - lib/mutant/mutator/node/literal/hash.rb
267
290
  - lib/mutant/mutator/node/literal/integer.rb
268
291
  - lib/mutant/mutator/node/literal/nil.rb
269
292
  - lib/mutant/mutator/node/literal/range.rb
293
+ - lib/mutant/mutator/node/literal/rational.rb
270
294
  - lib/mutant/mutator/node/literal/regex.rb
271
295
  - lib/mutant/mutator/node/literal/string.rb
272
296
  - lib/mutant/mutator/node/literal/symbol.rb
273
297
  - lib/mutant/mutator/node/masgn.rb
298
+ - lib/mutant/mutator/node/match_alt.rb
274
299
  - lib/mutant/mutator/node/match_current_line.rb
300
+ - lib/mutant/mutator/node/match_pattern_p.rb
275
301
  - lib/mutant/mutator/node/mlhs.rb
276
302
  - lib/mutant/mutator/node/module.rb
277
303
  - lib/mutant/mutator/node/named_value/access.rb