synvert-core 0.38.0 → 0.41.2

Sign up to get free protection for your applications and to get access to all the features.
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