mutant 0.9.6 → 0.9.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (184) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +121 -0
  3. data/.rubocop.yml +203 -0
  4. data/Changelog.md +26 -0
  5. data/Gemfile +0 -7
  6. data/Gemfile.lock +27 -87
  7. data/Gemfile.shared +7 -0
  8. data/README.md +88 -27
  9. data/config/reek.yml +1 -0
  10. data/lib/mutant.rb +4 -2
  11. data/lib/mutant/ast.rb +0 -9
  12. data/lib/mutant/ast/find_metaclass_containing.rb +48 -0
  13. data/lib/mutant/ast/meta/send.rb +0 -6
  14. data/lib/mutant/bootstrap.rb +0 -36
  15. data/lib/mutant/cli.rb +5 -49
  16. data/lib/mutant/config.rb +0 -8
  17. data/lib/mutant/context.rb +0 -3
  18. data/lib/mutant/env.rb +0 -6
  19. data/lib/mutant/expression/method.rb +6 -6
  20. data/lib/mutant/expression/methods.rb +6 -6
  21. data/lib/mutant/expression/parser.rb +0 -6
  22. data/lib/mutant/integration.rb +0 -18
  23. data/lib/mutant/isolation/fork.rb +0 -22
  24. data/lib/mutant/license.rb +11 -0
  25. data/lib/mutant/matcher.rb +0 -14
  26. data/lib/mutant/matcher/config.rb +0 -11
  27. data/lib/mutant/matcher/method.rb +0 -31
  28. data/lib/mutant/matcher/method/instance.rb +0 -8
  29. data/lib/mutant/matcher/method/metaclass.rb +86 -0
  30. data/lib/mutant/matcher/method/singleton.rb +0 -25
  31. data/lib/mutant/matcher/methods.rb +17 -28
  32. data/lib/mutant/matcher/namespace.rb +0 -10
  33. data/lib/mutant/matcher/scope.rb +2 -4
  34. data/lib/mutant/meta/example/dsl.rb +0 -21
  35. data/lib/mutant/meta/example/verification.rb +0 -20
  36. data/lib/mutant/mutation.rb +0 -3
  37. data/lib/mutant/mutator.rb +1 -29
  38. data/lib/mutant/mutator/node.rb +1 -66
  39. data/lib/mutant/mutator/node/and_asgn.rb +0 -3
  40. data/lib/mutant/mutator/node/argument.rb +0 -15
  41. data/lib/mutant/mutator/node/arguments.rb +0 -20
  42. data/lib/mutant/mutator/node/begin.rb +0 -3
  43. data/lib/mutant/mutator/node/binary.rb +0 -23
  44. data/lib/mutant/mutator/node/block.rb +0 -15
  45. data/lib/mutant/mutator/node/break.rb +0 -3
  46. data/lib/mutant/mutator/node/case.rb +0 -9
  47. data/lib/mutant/mutator/node/class.rb +0 -3
  48. data/lib/mutant/mutator/node/conditional_loop.rb +0 -3
  49. data/lib/mutant/mutator/node/const.rb +0 -3
  50. data/lib/mutant/mutator/node/define.rb +0 -11
  51. data/lib/mutant/mutator/node/defined.rb +0 -3
  52. data/lib/mutant/mutator/node/dstr.rb +0 -3
  53. data/lib/mutant/mutator/node/dsym.rb +0 -3
  54. data/lib/mutant/mutator/node/generic.rb +0 -67
  55. data/lib/mutant/mutator/node/if.rb +0 -12
  56. data/lib/mutant/mutator/node/index.rb +0 -27
  57. data/lib/mutant/mutator/node/kwbegin.rb +0 -3
  58. data/lib/mutant/mutator/node/literal.rb +0 -3
  59. data/lib/mutant/mutator/node/literal/array.rb +0 -6
  60. data/lib/mutant/mutator/node/literal/boolean.rb +0 -4
  61. data/lib/mutant/mutator/node/literal/float.rb +0 -9
  62. data/lib/mutant/mutator/node/literal/hash.rb +0 -9
  63. data/lib/mutant/mutator/node/literal/integer.rb +0 -9
  64. data/lib/mutant/mutator/node/literal/nil.rb +0 -3
  65. data/lib/mutant/mutator/node/literal/range.rb +4 -7
  66. data/lib/mutant/mutator/node/literal/regex.rb +0 -6
  67. data/lib/mutant/mutator/node/literal/string.rb +0 -3
  68. data/lib/mutant/mutator/node/literal/symbol.rb +0 -3
  69. data/lib/mutant/mutator/node/masgn.rb +0 -3
  70. data/lib/mutant/mutator/node/match_current_line.rb +0 -3
  71. data/lib/mutant/mutator/node/mlhs.rb +0 -3
  72. data/lib/mutant/mutator/node/named_value/access.rb +2 -14
  73. data/lib/mutant/mutator/node/named_value/constant_assignment.rb +0 -9
  74. data/lib/mutant/mutator/node/named_value/variable_assignment.rb +0 -6
  75. data/lib/mutant/mutator/node/next.rb +0 -3
  76. data/lib/mutant/mutator/node/noop.rb +0 -3
  77. data/lib/mutant/mutator/node/nthref.rb +0 -3
  78. data/lib/mutant/mutator/node/op_asgn.rb +0 -3
  79. data/lib/mutant/mutator/node/or_asgn.rb +0 -3
  80. data/lib/mutant/mutator/node/procarg_zero.rb +0 -3
  81. data/lib/mutant/mutator/node/regopt.rb +0 -6
  82. data/lib/mutant/mutator/node/resbody.rb +0 -6
  83. data/lib/mutant/mutator/node/rescue.rb +2 -19
  84. data/lib/mutant/mutator/node/return.rb +0 -3
  85. data/lib/mutant/mutator/node/sclass.rb +20 -0
  86. data/lib/mutant/mutator/node/send.rb +2 -61
  87. data/lib/mutant/mutator/node/send/attribute_assignment.rb +0 -9
  88. data/lib/mutant/mutator/node/send/binary.rb +0 -11
  89. data/lib/mutant/mutator/node/send/conditional.rb +0 -3
  90. data/lib/mutant/mutator/node/splat.rb +0 -3
  91. data/lib/mutant/mutator/node/super.rb +0 -3
  92. data/lib/mutant/mutator/node/when.rb +0 -19
  93. data/lib/mutant/mutator/node/yield.rb +0 -3
  94. data/lib/mutant/mutator/node/zsuper.rb +0 -3
  95. data/lib/mutant/mutator/util/array.rb +0 -6
  96. data/lib/mutant/mutator/util/symbol.rb +0 -3
  97. data/lib/mutant/parallel.rb +0 -13
  98. data/lib/mutant/parallel/driver.rb +0 -10
  99. data/lib/mutant/parallel/worker.rb +0 -22
  100. data/lib/mutant/registry.rb +2 -7
  101. data/lib/mutant/reporter/cli.rb +0 -5
  102. data/lib/mutant/reporter/cli/format.rb +0 -9
  103. data/lib/mutant/reporter/cli/printer.rb +2 -42
  104. data/lib/mutant/reporter/cli/printer/env_progress.rb +0 -15
  105. data/lib/mutant/reporter/cli/printer/isolation_result.rb +0 -18
  106. data/lib/mutant/reporter/cli/printer/mutation_progress_result.rb +0 -5
  107. data/lib/mutant/reporter/cli/printer/mutation_result.rb +1 -22
  108. data/lib/mutant/reporter/cli/printer/status_progressive.rb +0 -8
  109. data/lib/mutant/reporter/cli/printer/subject_progress.rb +0 -9
  110. data/lib/mutant/repository/diff.rb +1 -13
  111. data/lib/mutant/repository/diff/ranges.rb +0 -11
  112. data/lib/mutant/result.rb +0 -3
  113. data/lib/mutant/runner.rb +0 -18
  114. data/lib/mutant/runner/sink.rb +0 -5
  115. data/lib/mutant/subject.rb +0 -8
  116. data/lib/mutant/subject/method.rb +0 -3
  117. data/lib/mutant/subject/method/instance.rb +40 -6
  118. data/lib/mutant/subject/method/metaclass.rb +30 -0
  119. data/lib/mutant/transform.rb +0 -92
  120. data/lib/mutant/version.rb +1 -1
  121. data/lib/mutant/warnings.rb +0 -6
  122. data/lib/mutant/zombifier.rb +2 -34
  123. data/meta/and.rb +0 -2
  124. data/meta/array.rb +0 -3
  125. data/meta/begin.rb +0 -3
  126. data/meta/block.rb +0 -3
  127. data/meta/break.rb +0 -1
  128. data/meta/case.rb +0 -6
  129. data/meta/casgn.rb +0 -3
  130. data/meta/cvasgn.rb +0 -1
  131. data/meta/def.rb +0 -7
  132. data/meta/ensure.rb +0 -1
  133. data/meta/false.rb +0 -1
  134. data/meta/gvasgn.rb +0 -1
  135. data/meta/hash.rb +0 -4
  136. data/meta/if.rb +0 -5
  137. data/meta/ivasgn.rb +0 -1
  138. data/meta/kwbegin.rb +0 -1
  139. data/meta/lvasgn.rb +0 -1
  140. data/meta/match_current_line.rb +0 -1
  141. data/meta/next.rb +0 -1
  142. data/meta/or.rb +0 -2
  143. data/meta/range.rb +24 -0
  144. data/meta/regexp.rb +0 -1
  145. data/meta/rescue.rb +0 -6
  146. data/meta/sclass.rb +12 -0
  147. data/meta/send.rb +0 -4
  148. data/meta/true.rb +0 -1
  149. data/meta/until.rb +0 -1
  150. data/meta/while.rb +0 -2
  151. data/meta/yield.rb +0 -1
  152. data/mutant.gemspec +7 -4
  153. data/mutant.sh +12 -0
  154. data/spec/spec_helper.rb +37 -22
  155. data/spec/unit/mutant/ast/find_metaclass_containing_spec.rb +64 -0
  156. data/spec/unit/mutant/expression/methods_spec.rb +7 -2
  157. data/spec/unit/mutant/license_spec.rb +15 -3
  158. data/spec/unit/mutant/matcher/method/metaclass_spec.rb +108 -0
  159. data/spec/unit/mutant/matcher/methods/metaclass_spec.rb +62 -0
  160. data/spec/unit/mutant/matcher/namespace_spec.rb +3 -1
  161. data/spec/unit/mutant/matcher/scope_spec.rb +11 -1
  162. data/spec/unit/mutant/meta/example_spec.rb +3 -3
  163. data/spec/unit/mutant/mutator/node_spec.rb +1 -6
  164. data/spec/unit/mutant/registry_spec.rb +52 -25
  165. data/spec/unit/mutant/reporter/cli/printer/env_result_spec.rb +1 -1
  166. data/spec/unit/mutant/reporter/cli/printer/mutation_progress_result_spec.rb +2 -2
  167. data/spec/unit/mutant/reporter/cli/printer/mutation_result_spec.rb +12 -12
  168. data/spec/unit/mutant/reporter/cli/printer/subject_result_spec.rb +1 -1
  169. data/spec/unit/mutant/reporter/cli/printer_spec.rb +4 -4
  170. data/spec/unit/mutant/reporter/cli_spec.rb +1 -1
  171. data/spec/unit/mutant/subject/method/instance_spec.rb +117 -22
  172. data/spec/unit/mutant/subject/method/metaclass_spec.rb +63 -0
  173. data/test_app/Gemfile.minitest +2 -0
  174. data/test_app/lib/test_app.rb +5 -0
  175. data/test_app/lib/test_app/metaclasses.rb +108 -0
  176. metadata +74 -25
  177. data/.circleci/config.yml +0 -53
  178. data/config/rubocop.yml +0 -205
  179. data/lib/mutant/color.rb +0 -43
  180. data/lib/mutant/diff.rb +0 -114
  181. data/spec/shared/base_behavior.rb +0 -45
  182. data/spec/support/test_app.rb +0 -7
  183. data/spec/support/warnings.yml +0 -6
  184. data/spec/unit/mutant/diff_spec.rb +0 -189
@@ -1,7 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module TestApp
4
- def self.root
5
- File.expand_path('../../test_app', __dir__)
6
- end
7
- end # TestApp
@@ -1,6 +0,0 @@
1
- ---
2
- - "lib/mutant/subject/method/instance.rb:9: warning: undefining `initialize' may cause serious problems"
3
- - 'lib/parallel.rb:222: warning: shadowing outer local variable - args'
4
- - 'lib/parallel.rb:227: warning: shadowing outer local variable - args'
5
- - 'lib/parser/lexer.rb:10836: warning: assigned but unused variable - testEof'
6
- - 'lib/regexp_parser/scanner.rb:1146: warning: assigned but unused variable - testEof'
@@ -1,189 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::Diff do
4
- let(:object) { described_class }
5
-
6
- describe '.build' do
7
-
8
- subject { object.build(old_string, new_string) }
9
-
10
- let(:old_string) { "foo\nbar" }
11
- let(:new_string) { "bar\nbaz" }
12
-
13
- it { should eql(Mutant::Diff.new(%w[foo bar], %w[bar baz])) }
14
-
15
- end
16
-
17
- describe '#colorized_diff' do
18
- let(:object) { described_class.new(old, new) }
19
-
20
- subject { object.colorized_diff }
21
-
22
- context 'when there is a diff at begin of hunk' do
23
- let(:old) { %w[foo bar] }
24
- let(:new) { %w[baz bar] }
25
-
26
- let(:expectation) do
27
- [
28
- "@@ -1,3 +1,3 @@\n",
29
- Mutant::Color::RED.format("-foo\n"),
30
- Mutant::Color::GREEN.format("+baz\n"),
31
- " bar\n"
32
- ].join
33
- end
34
-
35
- it { should eql(expectation) }
36
-
37
- it_should_behave_like 'an idempotent method'
38
- end
39
-
40
- context 'when there is no diff' do
41
- let(:old) { '' }
42
- let(:new) { '' }
43
-
44
- it { should be(nil) }
45
-
46
- it_should_behave_like 'an idempotent method'
47
- end
48
- end
49
-
50
- describe '#diff' do
51
- let(:object) { described_class.new(old, new) }
52
-
53
- subject { object.diff }
54
-
55
- context 'when there is a diff at begin and end' do
56
- let(:old) { %w[foo bar foo] }
57
- let(:new) { %w[baz bar baz] }
58
-
59
- let(:expectation) do
60
- <<~STR
61
- @@ -1,4 +1,4 @@
62
- -foo
63
- +baz
64
- bar
65
- -foo
66
- +baz
67
- STR
68
- end
69
-
70
- it { should eql(expectation) }
71
-
72
- it_should_behave_like 'an idempotent method'
73
- end
74
-
75
- context 'when there is a diff at begin of hunk' do
76
- let(:old) { %w[foo bar] }
77
- let(:new) { %w[baz bar] }
78
-
79
- let(:expectation) do
80
- <<~STR
81
- @@ -1,3 +1,3 @@
82
- -foo
83
- +baz
84
- bar
85
- STR
86
- end
87
-
88
- it { should eql(expectation) }
89
-
90
- it_should_behave_like 'an idempotent method'
91
- end
92
-
93
- context 'when there is a diff NOT at begin of hunk' do
94
- let(:old) { %w[foo bar] }
95
- let(:new) { %w[foo baz bar] }
96
-
97
- let(:expectation) do
98
- <<~STR
99
- @@ -1,3 +1,4 @@
100
- foo
101
- +baz
102
- bar
103
- STR
104
- end
105
-
106
- it { should eql(expectation) }
107
-
108
- it_should_behave_like 'an idempotent method'
109
- end
110
-
111
- context 'when the diff has a long context at begin' do
112
- let(:old) { %w[foo bar baz boz a b c] }
113
- let(:new) { %w[foo bar baz boz a b c other] }
114
-
115
- let(:expectation) do
116
- <<~STR
117
- @@ -1,8 +1,9 @@
118
- foo
119
- bar
120
- baz
121
- boz
122
- a
123
- b
124
- c
125
- +other
126
- STR
127
- end
128
-
129
- it { should eql(expectation) }
130
-
131
- it_should_behave_like 'an idempotent method'
132
- end
133
-
134
- context 'when the diff has a long context at end, deleting' do
135
- let(:old) { %w[other foo bar baz boz a b c] }
136
- let(:new) { %w[foo bar baz boz a b c] }
137
-
138
- let(:expectation) do
139
- <<~STR
140
- @@ -1,9 +1,8 @@
141
- -other
142
- foo
143
- bar
144
- baz
145
- boz
146
- a
147
- b
148
- c
149
- STR
150
- end
151
-
152
- it { should eql(expectation) }
153
-
154
- it_should_behave_like 'an idempotent method'
155
- end
156
-
157
- context 'when the diff has a long context at end, inserting' do
158
- let(:old) { %w[foo bar baz boz a b c] }
159
- let(:new) { %w[other foo bar baz boz a b c] }
160
-
161
- let(:expectation) do
162
- <<~STR
163
- @@ -1,8 +1,9 @@
164
- +other
165
- foo
166
- bar
167
- baz
168
- boz
169
- a
170
- b
171
- c
172
- STR
173
- end
174
-
175
- it { should eql(expectation) }
176
-
177
- it_should_behave_like 'an idempotent method'
178
- end
179
-
180
- context 'when there is no diff' do
181
- let(:old) { '' }
182
- let(:new) { '' }
183
-
184
- it { should be(nil) }
185
-
186
- it_should_behave_like 'an idempotent method'
187
- end
188
- end
189
- end