synvert-core 0.38.0 → 0.41.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 02bb61b261f5a4b8a3f528736987402add733b18c98228b0e2345559d2694d63
4
- data.tar.gz: 6dd428e975dcbcadbdc4b03dd3ed2b7a846ce37c1d9e13303a68ba33a6d4e6fa
3
+ metadata.gz: 9e9e29097976ca69f755a698d9a3a78769105c4043b07c96a7ac1e714ae659a0
4
+ data.tar.gz: 12d45e30a5de2ffc03bb440b503ff1a230e7baa55eb6a69e43518023e7d24f08
5
5
  SHA512:
6
- metadata.gz: 7b374648741dc853387ff5c2f4bb5ad9518bee56a1646377e8cac22e7c208285f9c9db52882c05de823cf53cb3bdc6dbd365b9a1c505c88726eb3358651c1dc6
7
- data.tar.gz: 8097ef7ad23287c35bf9d40a258a4d7c0b5d63ab0e99ab3667dc52d46cd7a51fa0e7f8d0cddee07054e87019bbf449704f3c01ba4cafcda425a30161894a5130
6
+ metadata.gz: 28802dbdd2f53b267c621f811b959a0041064f97ff4f54ee009f75d230eeb2a1ff3fbb9b1c3cee524d990f53b8e7447105fa57e86cb4ee2b042cd4e17ef63c9e
7
+ data.tar.gz: 8c0f5604e24d9ea0034214aa2b4d36f26d6c5f181d7d0d70f75a78fe71b0cab1868379953b2d071ea3ab922e62855a51ee5a0cb14ed7b4e26ebb8cc57adcb396
data/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## 0.41.0 (2021-06-24)
4
+
5
+ * Remove unused autoindent option
6
+ * Add `insert 'xxx', at: 'beginning'`
7
+
8
+ ## 0.40.0 (2021-06-23)
9
+
10
+ * Rewrite `insert` action
11
+
12
+ ## 0.39.0 (2021-06-23)
13
+
14
+ * Add `prepend` action instead of `insert`
15
+
3
16
  ## 0.38.0 (2021-06-21)
4
17
 
5
18
  * Add `xxx_source` for `hash` node
@@ -388,7 +388,7 @@ module Parser::AST
388
388
  end
389
389
 
390
390
  raise Synvert::Core::MethodNotSupported,
391
- "child_node_range is not handled for #{evaluated.inspect}, child_name: #{child_name}"
391
+ "child_node_range is not handled for #{debug_info}, child_name: #{child_name}"
392
392
  end
393
393
  end
394
394
 
@@ -493,6 +493,8 @@ module Parser::AST
493
493
  # @return [Integer] -1, 0 or 1.
494
494
  # @raise [Synvert::Core::MethodNotSupported] if expected class is not supported.
495
495
  def match_value?(actual, expected)
496
+ return true if actual == expected
497
+
496
498
  case expected
497
499
  when Symbol
498
500
  if actual.is_a?(Parser::AST::Node)
@@ -18,6 +18,7 @@ module Synvert::Core
18
18
  class Rewriter
19
19
  autoload :Action, 'synvert/core/rewriter/action'
20
20
  autoload :AppendAction, 'synvert/core/rewriter/action/append_action'
21
+ autoload :PrependAction, 'synvert/core/rewriter/action/prepend_action'
21
22
  autoload :InsertAction, 'synvert/core/rewriter/action/insert_action'
22
23
  autoload :InsertAfterAction, 'synvert/core/rewriter/action/insert_after_action'
23
24
  autoload :ReplaceWithAction, 'synvert/core/rewriter/action/replace_with_action'
@@ -3,18 +3,15 @@
3
3
  module Synvert::Core
4
4
  # Action defines rewriter action, add, replace or remove code.
5
5
  class Rewriter::Action
6
- DEFAULT_OPTIONS = { autoindent: true }.freeze
7
6
  DEFAULT_INDENT = 2
8
7
 
9
8
  # Initialize an action.
10
9
  #
11
10
  # @param instance [Synvert::Core::Rewriter::Instance]
12
11
  # @param code [String] new code to add, replace or remove.
13
- # @param options [Hash] action options, it includes :autoindent.
14
- def initialize(instance, code, options = {})
12
+ def initialize(instance, code)
15
13
  @instance = instance
16
14
  @code = code
17
- @options = DEFAULT_OPTIONS.merge(options)
18
15
  @node = @instance.current_node
19
16
  end
20
17
 
@@ -1,25 +1,23 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Synvert::Core
4
- # InsertAction to insert code to the top of node body.
4
+ # AddAction to add code to the node.
5
5
  class Rewriter::InsertAction < Rewriter::Action
6
- DO_LENGTH = ' do'.length
6
+ def initialize(instance, code, at:)
7
+ @instance = instance
8
+ @code = code
9
+ @at = at
10
+ @node = @instance.current_node
11
+ end
7
12
 
8
13
  # Begin position to insert code.
9
14
  #
10
15
  # @return [Integer] begin position.
11
16
  def begin_pos
12
- case @node.type
13
- when :block
14
- if @node.children[1].children.empty?
15
- @node.children[0].loc.expression.end_pos + DO_LENGTH
16
- else
17
- @node.children[1].loc.expression.end_pos
18
- end
19
- when :class
20
- @node.children[1] ? @node.children[1].loc.expression.end_pos : @node.children[0].loc.expression.end_pos
17
+ if @at == 'end'
18
+ @node.loc.expression.end_pos
21
19
  else
22
- @node.children.last.loc.expression.end_pos
20
+ @node.loc.expression.begin_pos
23
21
  end
24
22
  end
25
23
 
@@ -30,18 +28,11 @@ module Synvert::Core
30
28
  begin_pos
31
29
  end
32
30
 
33
- private
34
-
35
- # Indent of the node.
31
+ # The rewritten source code.
36
32
  #
37
- # @param node [Parser::AST::Node]
38
- # @return [String] n times whitesphace
39
- def indent(node)
40
- if %i[block class].include? node.type
41
- ' ' * (node.indent + DEFAULT_INDENT)
42
- else
43
- ' ' * node.indent
44
- end
33
+ # @return [String] rewritten code.
34
+ def rewritten_code
35
+ rewritten_source
45
36
  end
46
37
  end
47
38
  end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Synvert::Core
4
+ # PrependAction to prepend code to the top of node body.
5
+ class Rewriter::PrependAction < Rewriter::Action
6
+ DO_LENGTH = ' do'.length
7
+
8
+ # Begin position to prepend code.
9
+ #
10
+ # @return [Integer] begin position.
11
+ def begin_pos
12
+ case @node.type
13
+ when :block
14
+ if @node.children[1].children.empty?
15
+ @node.children[0].loc.expression.end_pos + DO_LENGTH
16
+ else
17
+ @node.children[1].loc.expression.end_pos
18
+ end
19
+ when :class
20
+ @node.children[1] ? @node.children[1].loc.expression.end_pos : @node.children[0].loc.expression.end_pos
21
+ else
22
+ @node.children.last.loc.expression.end_pos
23
+ end
24
+ end
25
+
26
+ # End position, always same to begin position.
27
+ #
28
+ # @return [Integer] end position.
29
+ def end_pos
30
+ begin_pos
31
+ end
32
+
33
+ private
34
+
35
+ # Indent of the node.
36
+ #
37
+ # @param node [Parser::AST::Node]
38
+ # @return [String] n times whitesphace
39
+ def indent(node)
40
+ if %i[block class].include? node.type
41
+ ' ' * (node.indent + DEFAULT_INDENT)
42
+ else
43
+ ' ' * node.indent
44
+ end
45
+ end
46
+ end
47
+ end
@@ -21,11 +21,11 @@ module Synvert::Core
21
21
  #
22
22
  # @return [String] rewritten code.
23
23
  def rewritten_code
24
- if rewritten_source.split("\n").length > 1
24
+ if rewritten_source.include?("\n")
25
25
  new_code = []
26
- rewritten_source.split("\n").each_with_index { |line, index|
27
- new_code << (index == 0 || !@options[:autoindent] ? line : indent(@node) + line)
28
- }
26
+ rewritten_source.split("\n").each_with_index do |line, index|
27
+ new_code << (index == 0 ? line : indent(@node) + line)
28
+ end
29
29
  new_code.join("\n")
30
30
  else
31
31
  rewritten_source
@@ -219,36 +219,41 @@ module Synvert::Core
219
219
  # append the code to the bottom of current node body.
220
220
  #
221
221
  # @param code [String] code need to be appended.
222
- # @param options [Hash] action options.
223
- def append(code, options = {})
224
- @actions << Rewriter::AppendAction.new(self, code, options)
222
+ def append(code)
223
+ @actions << Rewriter::AppendAction.new(self, code)
224
+ end
225
+
226
+ # Parse prepend dsl, it creates a [Synvert::Core::Rewriter::PrependAction] to
227
+ # prepend the code to the top of current node body.
228
+ #
229
+ # @param code [String] code need to be prepended.
230
+ def prepend(code)
231
+ @actions << Rewriter::PrependAction.new(self, code)
225
232
  end
226
233
 
227
234
  # Parse insert dsl, it creates a [Synvert::Core::Rewriter::InsertAction] to
228
235
  # insert the code to the top of current node body.
229
236
  #
230
237
  # @param code [String] code need to be inserted.
231
- # @param options [Hash] action options.
232
- def insert(code, options = {})
233
- @actions << Rewriter::InsertAction.new(self, code, options)
238
+ # @param at [String] insert position, beginning or end, end is the default.
239
+ def insert(code, at: 'end')
240
+ @actions << Rewriter::InsertAction.new(self, code, at: at)
234
241
  end
235
242
 
236
243
  # Parse insert_after dsl, it creates a [Synvert::Core::Rewriter::InsertAfterAction] to
237
244
  # insert the code next to the current node.
238
245
  #
239
246
  # @param code [String] code need to be inserted.
240
- # @param options [Hash] action options.
241
- def insert_after(node, options = {})
242
- @actions << Rewriter::InsertAfterAction.new(self, node, options)
247
+ def insert_after(node)
248
+ @actions << Rewriter::InsertAfterAction.new(self, node)
243
249
  end
244
250
 
245
251
  # Parse replace_with dsl, it creates a [Synvert::Core::Rewriter::ReplaceWithAction] to
246
252
  # replace current node with code.
247
253
  #
248
254
  # @param code [String] code need to be replaced with.
249
- # @param options [Hash] action options.
250
- def replace_with(code, options = {})
251
- @actions << Rewriter::ReplaceWithAction.new(self, code, options)
255
+ def replace_with(code)
256
+ @actions << Rewriter::ReplaceWithAction.new(self, code)
252
257
  end
253
258
 
254
259
  # Parse replace with dsl, it creates a [Synvert::Core::Rewriter::ReplaceAction] to
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Synvert
4
4
  module Core
5
- VERSION = '0.38.0'
5
+ VERSION = '0.41.2'
6
6
  end
7
7
  end
@@ -4,87 +4,45 @@ require 'spec_helper'
4
4
 
5
5
  module Synvert::Core
6
6
  describe Rewriter::InsertAction do
7
- describe 'block node without args' do
7
+ context 'at end' do
8
8
  subject {
9
- source = "Synvert::Application.configure do\nend"
10
- block_node = Parser::CurrentRuby.parse(source)
11
- instance = double(current_node: block_node)
12
- Rewriter::InsertAction.new(instance, 'config.eager_load = true')
9
+ source = " User.where(username: 'Richard')"
10
+ node = Parser::CurrentRuby.parse(source)
11
+ instance = double(current_node: node)
12
+ Rewriter::InsertAction.new(instance, '.first', at: 'end')
13
13
  }
14
14
 
15
15
  it 'gets begin_pos' do
16
- expect(subject.begin_pos).to eq 'Synvert::Application.configure do'.length
16
+ expect(subject.begin_pos).to eq " User.where(username: 'Richard')".length
17
17
  end
18
18
 
19
19
  it 'gets end_pos' do
20
- expect(subject.end_pos).to eq 'Synvert::Application.configure do'.length
20
+ expect(subject.end_pos).to eq " User.where(username: 'Richard')".length
21
21
  end
22
22
 
23
23
  it 'gets rewritten_code' do
24
- expect(subject.rewritten_code).to eq "\n config.eager_load = true"
24
+ expect(subject.rewritten_code).to eq '.first'
25
25
  end
26
26
  end
27
27
 
28
- describe 'block node with args' do
28
+ context 'at beginning' do
29
29
  subject {
30
- source = "RSpec.configure do |config|\nend"
31
- block_node = Parser::CurrentRuby.parse(source)
32
- instance = double(current_node: block_node)
33
- Rewriter::InsertAction.new(instance, '{{arguments.first}}.include FactoryGirl::Syntax::Methods')
30
+ source = " open('http://test.com')"
31
+ node = Parser::CurrentRuby.parse(source)
32
+ instance = double(current_node: node)
33
+ Rewriter::InsertAction.new(instance, 'URI.', at: 'beginning')
34
34
  }
35
35
 
36
36
  it 'gets begin_pos' do
37
- expect(subject.begin_pos).to eq 'RSpec.configure do |config|'.length
37
+ expect(subject.begin_pos).to eq 2
38
38
  end
39
39
 
40
40
  it 'gets end_pos' do
41
- expect(subject.end_pos).to eq 'RSpec.configure do |config|'.length
41
+ expect(subject.end_pos).to eq 2
42
42
  end
43
43
 
44
44
  it 'gets rewritten_code' do
45
- expect(subject.rewritten_code).to eq "\n config.include FactoryGirl::Syntax::Methods"
46
- end
47
- end
48
-
49
- describe 'class node without superclass' do
50
- subject {
51
- source = "class User\n has_many :posts\nend"
52
- class_node = Parser::CurrentRuby.parse(source)
53
- instance = double(current_node: class_node)
54
- Rewriter::InsertAction.new(instance, 'include Deletable')
55
- }
56
-
57
- it 'gets begin_pos' do
58
- expect(subject.begin_pos).to eq 'class User'.length
59
- end
60
-
61
- it 'gets end_pos' do
62
- expect(subject.end_pos).to eq 'class User'.length
63
- end
64
-
65
- it 'gets rewritten_code' do
66
- expect(subject.rewritten_code).to eq "\n include Deletable"
67
- end
68
- end
69
-
70
- describe 'class node with superclass' do
71
- subject {
72
- source = "class User < ActiveRecord::Base\n has_many :posts\nend"
73
- class_node = Parser::CurrentRuby.parse(source)
74
- instance = double(current_node: class_node)
75
- Rewriter::InsertAction.new(instance, 'include Deletable')
76
- }
77
-
78
- it 'gets begin_pos' do
79
- expect(subject.begin_pos).to eq 'class User < ActionRecord::Base'.length
80
- end
81
-
82
- it 'gets end_pos' do
83
- expect(subject.end_pos).to eq 'class User < ActionRecord::Base'.length
84
- end
85
-
86
- it 'gets rewritten_code' do
87
- expect(subject.rewritten_code).to eq "\n include Deletable"
45
+ expect(subject.rewritten_code).to eq 'URI.'
88
46
  end
89
47
  end
90
48
  end
@@ -0,0 +1,91 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ module Synvert::Core
6
+ describe Rewriter::PrependAction do
7
+ describe 'block node without args' do
8
+ subject {
9
+ source = "Synvert::Application.configure do\nend"
10
+ block_node = Parser::CurrentRuby.parse(source)
11
+ instance = double(current_node: block_node)
12
+ Rewriter::PrependAction.new(instance, 'config.eager_load = true')
13
+ }
14
+
15
+ it 'gets begin_pos' do
16
+ expect(subject.begin_pos).to eq 'Synvert::Application.configure do'.length
17
+ end
18
+
19
+ it 'gets end_pos' do
20
+ expect(subject.end_pos).to eq 'Synvert::Application.configure do'.length
21
+ end
22
+
23
+ it 'gets rewritten_code' do
24
+ expect(subject.rewritten_code).to eq "\n config.eager_load = true"
25
+ end
26
+ end
27
+
28
+ describe 'block node with args' do
29
+ subject {
30
+ source = "RSpec.configure do |config|\nend"
31
+ block_node = Parser::CurrentRuby.parse(source)
32
+ instance = double(current_node: block_node)
33
+ Rewriter::PrependAction.new(instance, '{{arguments.first}}.include FactoryGirl::Syntax::Methods')
34
+ }
35
+
36
+ it 'gets begin_pos' do
37
+ expect(subject.begin_pos).to eq 'RSpec.configure do |config|'.length
38
+ end
39
+
40
+ it 'gets end_pos' do
41
+ expect(subject.end_pos).to eq 'RSpec.configure do |config|'.length
42
+ end
43
+
44
+ it 'gets rewritten_code' do
45
+ expect(subject.rewritten_code).to eq "\n config.include FactoryGirl::Syntax::Methods"
46
+ end
47
+ end
48
+
49
+ describe 'class node without superclass' do
50
+ subject {
51
+ source = "class User\n has_many :posts\nend"
52
+ class_node = Parser::CurrentRuby.parse(source)
53
+ instance = double(current_node: class_node)
54
+ Rewriter::PrependAction.new(instance, 'include Deletable')
55
+ }
56
+
57
+ it 'gets begin_pos' do
58
+ expect(subject.begin_pos).to eq 'class User'.length
59
+ end
60
+
61
+ it 'gets end_pos' do
62
+ expect(subject.end_pos).to eq 'class User'.length
63
+ end
64
+
65
+ it 'gets rewritten_code' do
66
+ expect(subject.rewritten_code).to eq "\n include Deletable"
67
+ end
68
+ end
69
+
70
+ describe 'class node with superclass' do
71
+ subject {
72
+ source = "class User < ActiveRecord::Base\n has_many :posts\nend"
73
+ class_node = Parser::CurrentRuby.parse(source)
74
+ instance = double(current_node: class_node)
75
+ Rewriter::PrependAction.new(instance, 'include Deletable')
76
+ }
77
+
78
+ it 'gets begin_pos' do
79
+ expect(subject.begin_pos).to eq 'class User < ActionRecord::Base'.length
80
+ end
81
+
82
+ it 'gets end_pos' do
83
+ expect(subject.end_pos).to eq 'class User < ActionRecord::Base'.length
84
+ end
85
+
86
+ it 'gets rewritten_code' do
87
+ expect(subject.rewritten_code).to eq "\n include Deletable"
88
+ end
89
+ end
90
+ end
91
+ end
@@ -30,14 +30,12 @@ module Synvert::Core
30
30
  source = ' its(:size) { should == 1 }'
31
31
  send_node = Parser::CurrentRuby.parse(source)
32
32
  instance = double(current_node: send_node)
33
- Rewriter::ReplaceWithAction.new(
34
- instance,
35
- "describe '#size' do
36
- subject { super().size }
37
- it { {{body}} }
38
- end",
39
- autoindent: false
40
- )
33
+ Rewriter::ReplaceWithAction.new(instance, <<~EOS)
34
+ describe '#size' do
35
+ subject { super().size }
36
+ it { {{body}} }
37
+ end
38
+ EOS
41
39
  }
42
40
 
43
41
  it 'gets begin_pos' do
@@ -49,10 +47,12 @@ end",
49
47
  end
50
48
 
51
49
  it 'gets rewritten_code' do
52
- expect(subject.rewritten_code).to eq "describe '#size' do
53
- subject { super().size }
54
- it { should == 1 }
55
- end"
50
+ expect(subject.rewritten_code).to eq <<~EOS.strip
51
+ describe '#size' do
52
+ subject { super().size }
53
+ it { should == 1 }
54
+ end
55
+ EOS
56
56
  end
57
57
  end
58
58
  end
@@ -90,30 +90,38 @@ module Synvert::Core
90
90
  end
91
91
 
92
92
  it 'parses append' do
93
- expect(Rewriter::AppendAction).to receive(:new).with(instance, 'include FactoryGirl::Syntax::Methods', {})
93
+ expect(Rewriter::AppendAction).to receive(:new).with(instance, 'include FactoryGirl::Syntax::Methods')
94
94
  instance.append 'include FactoryGirl::Syntax::Methods'
95
95
  end
96
96
 
97
- it 'parses insert' do
98
- expect(Rewriter::InsertAction).to receive(:new).with(
97
+ it 'parses prepend' do
98
+ expect(Rewriter::PrependAction).to receive(:new).with(
99
99
  instance,
100
- '{{arguments.first}}.include FactoryGirl::Syntax::Methods',
101
- {}
100
+ '{{arguments.first}}.include FactoryGirl::Syntax::Methods'
102
101
  )
103
- instance.insert '{{arguments.first}}.include FactoryGirl::Syntax::Methods'
102
+ instance.prepend '{{arguments.first}}.include FactoryGirl::Syntax::Methods'
103
+ end
104
+
105
+ it 'parses insert' do
106
+ expect(Rewriter::InsertAction).to receive(:new).with(instance, '.first', at: 'end')
107
+ instance.insert '.first'
108
+ end
109
+
110
+ it 'parses insert' do
111
+ expect(Rewriter::InsertAction).to receive(:new).with(instance, 'URI.', at: 'beginning')
112
+ instance.insert 'URI.', at: 'beginning'
104
113
  end
105
114
 
106
115
  it 'parses insert_after' do
107
116
  expect(Rewriter::InsertAfterAction).to receive(:new).with(
108
117
  instance,
109
- '{{arguments.first}}.include FactoryGirl::Syntax::Methods',
110
- {}
118
+ '{{arguments.first}}.include FactoryGirl::Syntax::Methods'
111
119
  )
112
120
  instance.insert_after '{{arguments.first}}.include FactoryGirl::Syntax::Methods'
113
121
  end
114
122
 
115
123
  it 'parses replace_with' do
116
- expect(Rewriter::ReplaceWithAction).to receive(:new).with(instance, 'create {{arguments}}', {})
124
+ expect(Rewriter::ReplaceWithAction).to receive(:new).with(instance, 'create {{arguments}}')
117
125
  instance.replace_with 'create {{arguments}}'
118
126
  end
119
127
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: synvert-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.38.0
4
+ version: 0.41.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Richard Huang
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-06-21 00:00:00.000000000 Z
11
+ date: 2021-07-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -150,6 +150,7 @@ files:
150
150
  - lib/synvert/core/rewriter/action/delete_action.rb
151
151
  - lib/synvert/core/rewriter/action/insert_action.rb
152
152
  - lib/synvert/core/rewriter/action/insert_after_action.rb
153
+ - lib/synvert/core/rewriter/action/prepend_action.rb
153
154
  - lib/synvert/core/rewriter/action/remove_action.rb
154
155
  - lib/synvert/core/rewriter/action/replace_action.rb
155
156
  - lib/synvert/core/rewriter/action/replace_erb_stmt_with_expr_action.rb
@@ -176,6 +177,7 @@ files:
176
177
  - spec/synvert/core/rewriter/action/delete_action_spec.rb
177
178
  - spec/synvert/core/rewriter/action/insert_action_spec.rb
178
179
  - spec/synvert/core/rewriter/action/insert_after_action_spec.rb
180
+ - spec/synvert/core/rewriter/action/prepend_action_spec.rb
179
181
  - spec/synvert/core/rewriter/action/remove_action_spec.rb
180
182
  - spec/synvert/core/rewriter/action/replace_action_spec.rb
181
183
  - spec/synvert/core/rewriter/action/replace_erb_stmt_with_expr_action_spec.rb
@@ -227,6 +229,7 @@ test_files:
227
229
  - spec/synvert/core/rewriter/action/delete_action_spec.rb
228
230
  - spec/synvert/core/rewriter/action/insert_action_spec.rb
229
231
  - spec/synvert/core/rewriter/action/insert_after_action_spec.rb
232
+ - spec/synvert/core/rewriter/action/prepend_action_spec.rb
230
233
  - spec/synvert/core/rewriter/action/remove_action_spec.rb
231
234
  - spec/synvert/core/rewriter/action/replace_action_spec.rb
232
235
  - spec/synvert/core/rewriter/action/replace_erb_stmt_with_expr_action_spec.rb