synvert-core 0.15.1 → 0.18.0

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 (58) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +12 -2
  3. data/Gemfile +2 -0
  4. data/Guardfile +2 -0
  5. data/Rakefile +2 -0
  6. data/lib/synvert/core.rb +2 -3
  7. data/lib/synvert/core/configuration.rb +2 -1
  8. data/lib/synvert/core/engine.rb +1 -1
  9. data/lib/synvert/core/engine/erb.rb +31 -23
  10. data/lib/synvert/core/exceptions.rb +5 -3
  11. data/lib/synvert/core/node_ext.rb +107 -101
  12. data/lib/synvert/core/rewriter.rb +20 -14
  13. data/lib/synvert/core/rewriter/action.rb +5 -7
  14. data/lib/synvert/core/rewriter/action/append_action.rb +8 -6
  15. data/lib/synvert/core/rewriter/action/insert_action.rb +18 -19
  16. data/lib/synvert/core/rewriter/action/insert_after_action.rb +2 -2
  17. data/lib/synvert/core/rewriter/action/remove_action.rb +2 -2
  18. data/lib/synvert/core/rewriter/action/replace_erb_stmt_with_expr_action.rb +5 -4
  19. data/lib/synvert/core/rewriter/action/replace_with_action.rb +7 -5
  20. data/lib/synvert/core/rewriter/condition.rb +1 -1
  21. data/lib/synvert/core/rewriter/condition/if_exist_condition.rb +2 -2
  22. data/lib/synvert/core/rewriter/condition/if_only_exist_condition.rb +2 -3
  23. data/lib/synvert/core/rewriter/condition/unless_exist_condition.rb +2 -2
  24. data/lib/synvert/core/rewriter/gem_spec.rb +10 -10
  25. data/lib/synvert/core/rewriter/helper.rb +4 -6
  26. data/lib/synvert/core/rewriter/instance.rb +36 -22
  27. data/lib/synvert/core/rewriter/ruby_version.rb +1 -1
  28. data/lib/synvert/core/rewriter/scope.rb +1 -1
  29. data/lib/synvert/core/rewriter/scope/goto_scope.rb +2 -1
  30. data/lib/synvert/core/rewriter/scope/within_scope.rb +23 -7
  31. data/lib/synvert/core/rewriter/warning.rb +1 -1
  32. data/lib/synvert/core/version.rb +2 -2
  33. data/spec/spec_helper.rb +3 -1
  34. data/spec/support/parser_helper.rb +2 -0
  35. data/spec/synvert/core/configuration_spec.rb +3 -1
  36. data/spec/synvert/core/engine/erb_spec.rb +32 -30
  37. data/spec/synvert/core/node_ext_spec.rb +57 -54
  38. data/spec/synvert/core/rewriter/action/append_action_spec.rb +2 -0
  39. data/spec/synvert/core/rewriter/action/insert_action_spec.rb +10 -8
  40. data/spec/synvert/core/rewriter/action/insert_after_action_spec.rb +5 -3
  41. data/spec/synvert/core/rewriter/action/remove_action_spec.rb +3 -1
  42. data/spec/synvert/core/rewriter/action/replace_erb_stmt_with_expr_action_spec.rb +2 -0
  43. data/spec/synvert/core/rewriter/action/replace_with_action_spec.rb +17 -11
  44. data/spec/synvert/core/rewriter/action_spec.rb +2 -0
  45. data/spec/synvert/core/rewriter/condition/if_exist_condition_spec.rb +19 -9
  46. data/spec/synvert/core/rewriter/condition/if_only_exist_condition_spec.rb +23 -12
  47. data/spec/synvert/core/rewriter/condition/unless_exist_condition_spec.rb +19 -9
  48. data/spec/synvert/core/rewriter/condition_spec.rb +2 -0
  49. data/spec/synvert/core/rewriter/gem_spec_spec.rb +13 -10
  50. data/spec/synvert/core/rewriter/helper_spec.rb +36 -31
  51. data/spec/synvert/core/rewriter/instance_spec.rb +118 -66
  52. data/spec/synvert/core/rewriter/scope/goto_scope_spec.rb +10 -6
  53. data/spec/synvert/core/rewriter/scope/within_scope.rb +18 -9
  54. data/spec/synvert/core/rewriter/scope_spec.rb +2 -0
  55. data/spec/synvert/core/rewriter/warning_spec.rb +2 -0
  56. data/spec/synvert/core/rewriter_spec.rb +106 -73
  57. data/synvert-core.gemspec +2 -2
  58. metadata +12 -12
@@ -1,4 +1,4 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Synvert::Core
4
4
  # Instance is an execution unit, it finds specified ast nodes,
@@ -8,7 +8,7 @@ module Synvert::Core
8
8
  class Rewriter::Instance
9
9
  include Rewriter::Helper
10
10
 
11
- class <<self
11
+ class << self
12
12
  # Cached file source.
13
13
  #
14
14
  # @param file_path [String] file path
@@ -64,7 +64,7 @@ module Synvert::Core
64
64
  # @return current filename
65
65
  attr_accessor :current_node, :current_file
66
66
 
67
- DEFAULT_OPTIONS = { sort_by: 'begin_pos' }
67
+ DEFAULT_OPTIONS = { sort_by: 'begin_pos' }.freeze
68
68
 
69
69
  # Initialize an instance.
70
70
  #
@@ -73,13 +73,13 @@ module Synvert::Core
73
73
  # @param options [Hash] instance options, it includes :sort_by.
74
74
  # @param block [Block] block code to find nodes, match conditions and rewrite code.
75
75
  # @return [Synvert::Core::Rewriter::Instance]
76
- def initialize(rewriter, file_pattern, options={}, &block)
76
+ def initialize(rewriter, file_pattern, options = {}, &block)
77
77
  @rewriter = rewriter
78
78
  @actions = []
79
79
  @file_pattern = file_pattern
80
80
  @options = DEFAULT_OPTIONS.merge(options)
81
81
  @block = block
82
- rewriter.helpers.each { |helper| self.singleton_class.send(:define_method, helper[:name], &helper[:block]) }
82
+ rewriter.helpers.each { |helper| singleton_class.send(:define_method, helper[:name], &helper[:block]) }
83
83
  end
84
84
 
85
85
  # Process the instance.
@@ -87,16 +87,19 @@ module Synvert::Core
87
87
  # and rewrite source code back to original file.
88
88
  def process
89
89
  file_pattern = File.join(Configuration.instance.get(:path), @file_pattern)
90
- Dir.glob(file_pattern).each do |file_path|
91
- unless Configuration.instance.get(:skip_files).include? file_path
90
+ Dir
91
+ .glob(file_pattern)
92
+ .each do |file_path|
93
+ next if Configuration.instance.get(:skip_files).include? file_path
94
+
92
95
  begin
93
96
  conflict_actions = []
94
- source = self.class.file_source(file_path)
97
+ source = +self.class.file_source(file_path)
95
98
  ast = self.class.file_ast(file_path)
96
99
 
97
100
  @current_file = file_path
98
101
 
99
- self.process_with_node ast do
102
+ process_with_node ast do
100
103
  begin
101
104
  instance_eval &@block
102
105
  rescue NoMethodError
@@ -108,7 +111,7 @@ module Synvert::Core
108
111
  if @actions.length > 0
109
112
  @actions.sort_by! { |action| action.send(@options[:sort_by]) }
110
113
  conflict_actions = get_conflict_actions
111
- @actions.reverse.each do |action|
114
+ @actions.reverse_each do |action|
112
115
  source[action.begin_pos...action.end_pos] = action.rewritten_code
113
116
  source = remove_code_or_whole_line(source, action.line)
114
117
  end
@@ -121,7 +124,6 @@ module Synvert::Core
121
124
  # do nothing, iterate next file
122
125
  end while !conflict_actions.empty?
123
126
  end
124
- end
125
127
  end
126
128
 
127
129
  # Gets current node, it allows to get current node in block code.
@@ -146,7 +148,7 @@ module Synvert::Core
146
148
  # @param node [Parser::AST::Node] node set to current_node
147
149
  # @yield process
148
150
  def process_with_other_node(node)
149
- original_node = self.current_node
151
+ original_node = current_node
150
152
  self.current_node = node
151
153
  yield
152
154
  self.current_node = original_node
@@ -156,15 +158,28 @@ module Synvert::Core
156
158
  # DSL #
157
159
  #######
158
160
 
159
- # Parse within_node dsl, it creates a [Synvert::Core::Rewriter::WithinScope] to find matching ast nodes,
161
+ # Parse within_node dsl, it creates a [Synvert::Core::Rewriter::WithinScope] to find recursive matching ast nodes,
160
162
  # then continue operating on each matching ast node.
161
163
  #
162
164
  # @param rules [Hash] rules to find mathing ast nodes.
163
165
  # @param block [Block] block code to continue operating on the matching nodes.
164
166
  def within_node(rules, &block)
165
- Rewriter::WithinScope.new(self, rules, &block).process
167
+ Rewriter::WithinScope.new(self, rules, { recursive: true }, &block).process
166
168
  end
167
169
 
170
+ alias with_node within_node
171
+
172
+ # Parse within_direct_node dsl, it creates a [Synvert::Core::Rewriter::WithinScope] to find direct matching ast nodes,
173
+ # then continue operating on each matching ast node.
174
+ #
175
+ # @param rules [Hash] rules to find mathing ast nodes.
176
+ # @param block [Block] block code to continue operating on the matching nodes.
177
+ def within_direct_node(rules, &block)
178
+ Rewriter::WithinScope.new(self, rules, { recursive: false }, &block).process
179
+ end
180
+
181
+ alias with_direct_node within_direct_node
182
+
168
183
  # Parse goto_node dsl, it creates a [Synvert::Core::Rewriter::GotoScope] to go to a child node,
169
184
  # then continue operating on the child node.
170
185
  #
@@ -174,8 +189,6 @@ module Synvert::Core
174
189
  Rewriter::GotoScope.new(self, child_node_name, &block).process
175
190
  end
176
191
 
177
- alias_method :with_node, :within_node
178
-
179
192
  # Parse if_exist_node dsl, it creates a [Synvert::Core::Rewriter::IfExistCondition] to check
180
193
  # if matching nodes exist in the child nodes, if so, then continue operating on each matching ast node.
181
194
  #
@@ -209,7 +222,7 @@ module Synvert::Core
209
222
  #
210
223
  # @param code [String] code need to be appended.
211
224
  # @param options [Hash] action options.
212
- def append(code, options={})
225
+ def append(code, options = {})
213
226
  @actions << Rewriter::AppendAction.new(self, code, options)
214
227
  end
215
228
 
@@ -218,7 +231,7 @@ module Synvert::Core
218
231
  #
219
232
  # @param code [String] code need to be inserted.
220
233
  # @param options [Hash] action options.
221
- def insert(code, options={})
234
+ def insert(code, options = {})
222
235
  @actions << Rewriter::InsertAction.new(self, code, options)
223
236
  end
224
237
 
@@ -227,7 +240,7 @@ module Synvert::Core
227
240
  #
228
241
  # @param code [String] code need to be inserted.
229
242
  # @param options [Hash] action options.
230
- def insert_after(node, options={})
243
+ def insert_after(node, options = {})
231
244
  @actions << Rewriter::InsertAfterAction.new(self, node, options)
232
245
  end
233
246
 
@@ -236,7 +249,7 @@ module Synvert::Core
236
249
  #
237
250
  # @param code [String] code need to be replaced with.
238
251
  # @param options [Hash] action options.
239
- def replace_with(code, options={})
252
+ def replace_with(code, options = {})
240
253
  @actions << Rewriter::ReplaceWithAction.new(self, code, options)
241
254
  end
242
255
 
@@ -258,7 +271,7 @@ module Synvert::Core
258
271
  @rewriter.add_warning Rewriter::Warning.new(self, message)
259
272
  end
260
273
 
261
- private
274
+ private
262
275
 
263
276
  # It changes source code from bottom to top, and it can change source code twice at the same time,
264
277
  # So if there is an overlap between two actions, it removes the conflict actions and operate them in the next loop.
@@ -290,7 +303,8 @@ module Synvert::Core
290
303
  source_arr = source.split("\n")
291
304
  if source_arr[line - 1] && source_arr[line - 1].strip.empty?
292
305
  source_arr.delete_at(line - 1)
293
- if source_arr[line - 2] && source_arr[line - 2].strip.empty? && source_arr[line - 1] && source_arr[line - 1].strip.empty?
306
+ if source_arr[line - 2] && source_arr[line - 2].strip.empty? && source_arr[line - 1] &&
307
+ source_arr[line - 1].strip.empty?
294
308
  source_arr.delete_at(line - 1)
295
309
  end
296
310
  source_arr.join("\n") + (newline_at_end_of_line ? "\n" : '')
@@ -1,4 +1,4 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Synvert::Core
4
4
  # GemSpec checks and compares gem version.
@@ -1,4 +1,4 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Synvert::Core
4
4
  # Scope finds out nodes which match rules.
@@ -1,4 +1,4 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Synvert::Core
4
4
  # Go to and change its scope to a child node.
@@ -18,6 +18,7 @@ module Synvert::Core
18
18
  def process
19
19
  current_node = @instance.current_node
20
20
  return unless current_node
21
+
21
22
  child_node = current_node.send @child_node_name
22
23
  @instance.process_with_other_node child_node do
23
24
  @instance.instance_eval &@block
@@ -1,4 +1,4 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Synvert::Core
4
4
  # WithinScope finds out nodes which match rules, then change its scope to matching node.
@@ -7,10 +7,12 @@ module Synvert::Core
7
7
  #
8
8
  # @param instance [Synvert::Core::Rewriter::Instance]
9
9
  # @param rules [Hash]
10
+ # @param options [Hash]
10
11
  # @param block [Block]
11
- def initialize(instance, rules, &block)
12
+ def initialize(instance, rules, options = { recursive: true }, &block)
12
13
  @instance = instance
13
14
  @rules = rules
15
+ @options = options
14
16
  @block = block
15
17
  end
16
18
 
@@ -19,12 +21,9 @@ module Synvert::Core
19
21
  def process
20
22
  current_node = @instance.current_node
21
23
  return unless current_node
24
+
25
+ matching_nodes = find_matching_nodes(current_node)
22
26
  @instance.process_with_node current_node do
23
- matching_nodes = []
24
- matching_nodes << current_node if current_node.match? @rules
25
- current_node.recursive_children do |child_node|
26
- matching_nodes << child_node if child_node.match? @rules
27
- end
28
27
  matching_nodes.each do |matching_node|
29
28
  @instance.process_with_node matching_node do
30
29
  @instance.instance_eval &@block
@@ -32,5 +31,22 @@ module Synvert::Core
32
31
  end
33
32
  end
34
33
  end
34
+
35
+ private
36
+
37
+ def find_matching_nodes(current_node)
38
+ matching_nodes = []
39
+ if @options[:recursive]
40
+ matching_nodes << current_node if current_node.match? @rules
41
+ current_node.recursive_children do |child_node|
42
+ matching_nodes << child_node if child_node.match? @rules
43
+ end
44
+ else
45
+ current_node.each do |child_node|
46
+ matching_nodes << child_node if child_node.match? @rules
47
+ end
48
+ end
49
+ matching_nodes
50
+ end
35
51
  end
36
52
  end
@@ -1,4 +1,4 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Synvert::Core
4
4
  # Warning is used to save warning message.
@@ -1,7 +1,7 @@
1
- # coding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Synvert
4
4
  module Core
5
- VERSION = "0.15.1"
5
+ VERSION = '0.18.0'
6
6
  end
7
7
  end
data/spec/spec_helper.rb CHANGED
@@ -1,4 +1,6 @@
1
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
1
+ # frozen_string_literal: true
2
+
3
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
4
 
3
5
  require 'synvert/core'
4
6
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ParserHelper
2
4
  def parse(code)
3
5
  Parser::CurrentRuby.parse code
@@ -1,10 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  module Synvert::Core
4
6
  describe Configuration do
5
7
  it 'sets / gets' do
6
8
  Configuration.instance.set :key, 'value'
7
- expect(Configuration.instance.get :key).to eq 'value'
9
+ expect(Configuration.instance.get(:key)).to eq 'value'
8
10
  end
9
11
  end
10
12
  end
@@ -1,39 +1,41 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  module Synvert::Core
4
6
  describe Engine::ERB do
5
- it "encodes / decodes" do
6
- source =<<-EOF
7
- <%content_for :head do%>
8
- <style>
9
- body {
10
- background-image: url(<%= asset_path('bg.png') %>);
11
- }
12
- </style>
13
- <%end%>
14
-
15
- <%
16
- foo = 'bar'
17
- post = Post.find(:first)
18
- bar = 'foo'
19
- %>
20
-
21
- <% if User.current &&
22
- User.current.admin %>
23
- <%= rounded_content("page") do %>
24
- <div class='test'>
25
- <% if post %>
26
- <div id="title"><%= foo %></div>
27
- <% form_for post do |f| %>
28
- <label><%= link_to_function 'test', "confirm('test');" %></label>
29
- <%= f.text_field 'bar' %>
30
- <% end %>
31
- <% end %></div>
32
- <% end %>
33
- <% end %>
7
+ it 'encodes / decodes' do
8
+ source = <<~EOF
9
+ <%content_for :head do%>
10
+ <style>
11
+ body {
12
+ background-image: url(<%= asset_path('bg.png') %>);
13
+ }
14
+ </style>
15
+ <%end%>
16
+
17
+ <%
18
+ foo = 'bar'
19
+ post = Post.find(:first)
20
+ bar = 'foo'
21
+ %>
22
+
23
+ <% if User.current &&
24
+ User.current.admin %>
25
+ <%= rounded_content("page") do %>
26
+ <div class='test'>
27
+ <% if post %>
28
+ <div id="title"><%= foo %></div>
29
+ <% form_for post do |f| %>
30
+ <label><%= link_to_function 'test', "confirm('test');" %></label>
31
+ <%= f.text_field 'bar' %>
32
+ <% end %>
33
+ <% end %></div>
34
+ <% end %>
35
+ <% end %>
34
36
  EOF
35
37
  encoded_source = Engine::ERB.encode(source)
36
- buffer = Parser::Source::Buffer.new "(test)"
38
+ buffer = Parser::Source::Buffer.new '(test)'
37
39
  buffer.source = encoded_source
38
40
  parser = Parser::CurrentRuby.new
39
41
  parser.reset
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe Parser::AST::Node do
@@ -101,13 +103,13 @@ describe Parser::AST::Node do
101
103
 
102
104
  describe '#arguments' do
103
105
  it 'gets for def node' do
104
- node = parse("def test(foo, bar); foo + bar; end")
105
- expect(node.arguments.map { |argument| argument.to_source }).to eq ['foo', 'bar']
106
+ node = parse('def test(foo, bar); foo + bar; end')
107
+ expect(node.arguments.map { |argument| argument.to_source }).to eq %w[foo bar]
106
108
  end
107
109
 
108
110
  it 'gets for defs node' do
109
- node = parse("def self.test(foo, bar); foo + bar; end")
110
- expect(node.arguments.map { |argument| argument.to_source }).to eq ['foo', 'bar']
111
+ node = parse('def self.test(foo, bar); foo + bar; end')
112
+ expect(node.arguments.map { |argument| argument.to_source }).to eq %w[foo bar]
111
113
  end
112
114
 
113
115
  it 'gets for block node' do
@@ -170,129 +172,129 @@ describe Parser::AST::Node do
170
172
  end
171
173
  end
172
174
 
173
- describe "#keys" do
175
+ describe '#keys' do
174
176
  it 'gets for hash node' do
175
177
  node = parse("{:foo => :bar, 'foo' => 'bar'}")
176
178
  expect(node.keys).to eq [parse(':foo'), parse("'foo'")]
177
179
  end
178
180
  end
179
181
 
180
- describe "#values" do
182
+ describe '#values' do
181
183
  it 'gets for hash node' do
182
184
  node = parse("{:foo => :bar, 'foo' => 'bar'}")
183
185
  expect(node.values).to eq [parse(':bar'), parse("'bar'")]
184
186
  end
185
187
  end
186
188
 
187
- describe "#has_key?" do
188
- it "gets true if key exists" do
189
- node = parse("{:foo => :bar}")
189
+ describe '#has_key?' do
190
+ it 'gets true if key exists' do
191
+ node = parse('{:foo => :bar}')
190
192
  expect(node.has_key?(:foo)).to be_truthy
191
193
  end
192
194
 
193
- it "gets false if key does not exist" do
194
- node = parse("{:foo => :bar}")
195
+ it 'gets false if key does not exist' do
196
+ node = parse('{:foo => :bar}')
195
197
  expect(node.has_key?('foo')).to be_falsey
196
198
  end
197
199
  end
198
200
 
199
- describe "#hash_value" do
200
- it "gets value of specified key" do
201
- node = parse("{:foo => :bar}")
201
+ describe '#hash_value' do
202
+ it 'gets value of specified key' do
203
+ node = parse('{:foo => :bar}')
202
204
  expect(node.hash_value(:foo)).to eq parse(':bar')
203
205
  end
204
206
 
205
- it "gets nil if key does not exist" do
206
- node = parse("{:foo => :bar}")
207
+ it 'gets nil if key does not exist' do
208
+ node = parse('{:foo => :bar}')
207
209
  expect(node.hash_value(:bar)).to be_nil
208
210
  end
209
211
  end
210
212
 
211
- describe "#key" do
213
+ describe '#key' do
212
214
  it 'gets for pair node' do
213
215
  node = parse("{:foo => 'bar'}").children[0]
214
216
  expect(node.key).to eq parse(':foo')
215
217
  end
216
218
  end
217
219
 
218
- describe "#value" do
220
+ describe '#value' do
219
221
  it 'gets for hash node' do
220
222
  node = parse("{:foo => 'bar'}").children[0]
221
223
  expect(node.value).to eq parse("'bar'")
222
224
  end
223
225
  end
224
226
 
225
- describe "#condition" do
227
+ describe '#condition' do
226
228
  it 'gets for if node' do
227
229
  node = parse('if defined?(Bundler); end')
228
230
  expect(node.condition).to eq parse('defined?(Bundler)')
229
231
  end
230
232
  end
231
233
 
232
- describe "#left_value" do
234
+ describe '#left_value' do
233
235
  it 'gets for masgn' do
234
- node = parse("a, b = 1, 2")
236
+ node = parse('a, b = 1, 2')
235
237
  expect(node.left_value.to_source).to eq 'a, b'
236
238
  end
237
239
 
238
240
  it 'gets for lvasgn' do
239
- node = parse("a = 1")
241
+ node = parse('a = 1')
240
242
  expect(node.left_value).to eq :a
241
243
  end
242
244
 
243
245
  it 'gets for ivasgn' do
244
- node = parse("@a = 1")
246
+ node = parse('@a = 1')
245
247
  expect(node.left_value).to eq :@a
246
248
  end
247
249
  end
248
250
 
249
- describe "#right_value" do
251
+ describe '#right_value' do
250
252
  it 'gets for masgn' do
251
- node = parse("a, b = 1, 2")
253
+ node = parse('a, b = 1, 2')
252
254
  expect(node.right_value).to eq parse('[1, 2]')
253
255
  end
254
256
 
255
257
  it 'gets for masgn' do
256
- node = parse("a, b = params")
257
- expect(node.right_value).to eq parse("params")
258
+ node = parse('a, b = params')
259
+ expect(node.right_value).to eq parse('params')
258
260
  end
259
261
 
260
262
  it 'gets for lvasgn' do
261
- node = parse("a = 1")
262
- expect(node.right_value).to eq parse("1")
263
+ node = parse('a = 1')
264
+ expect(node.right_value).to eq parse('1')
263
265
  end
264
266
 
265
267
  it 'gets for ivasgn' do
266
- node = parse("@a = 1")
267
- expect(node.right_value).to eq parse("1")
268
+ node = parse('@a = 1')
269
+ expect(node.right_value).to eq parse('1')
268
270
  end
269
271
  end
270
272
 
271
- describe "#to_value" do
273
+ describe '#to_value' do
272
274
  it 'gets for int' do
273
- node = parse("1")
275
+ node = parse('1')
274
276
  expect(node.to_value).to eq 1
275
277
  end
276
278
 
277
279
  it 'gets for string' do
278
280
  node = parse("'str'")
279
- expect(node.to_value).to eq "str"
281
+ expect(node.to_value).to eq 'str'
280
282
  end
281
283
 
282
284
  it 'gets for symbol' do
283
- node = parse(":str")
285
+ node = parse(':str')
284
286
  expect(node.to_value).to eq :str
285
287
  end
286
288
 
287
289
  it 'get for boolean' do
288
- node = parse("true")
290
+ node = parse('true')
289
291
  expect(node.to_value).to be_truthy
290
- node = parse("false")
292
+ node = parse('false')
291
293
  expect(node.to_value).to be_falsey
292
294
  end
293
295
 
294
296
  it 'get for range' do
295
- node = parse("(1..10)")
297
+ node = parse('(1..10)')
296
298
  expect(node.to_value).to eq (1..10)
297
299
  end
298
300
 
@@ -382,13 +384,13 @@ describe Parser::AST::Node do
382
384
  it 'matches arguments any' do
383
385
  source = 'config.middleware.insert_after ActiveRecord::QueryCache, Lifo::Cache, page_cache: false'
384
386
  node = parse(source)
385
- expect(node).to be_match(type: 'send', arguments: {any: 'Lifo::Cache'})
387
+ expect(node).to be_match(type: 'send', arguments: { any: 'Lifo::Cache' })
386
388
  end
387
389
 
388
390
  it 'matches not' do
389
391
  source = 'class Synvert; end'
390
392
  node = parse(source)
391
- expect(node).not_to be_match(type: 'class', name: {not: 'Synvert'})
393
+ expect(node).not_to be_match(type: 'class', name: { not: 'Synvert' })
392
394
  end
393
395
  end
394
396
 
@@ -413,24 +415,25 @@ describe Parser::AST::Node do
413
415
  it 'rewrites for ArgumentsNode' do
414
416
  source = 'test { |a, b| }'
415
417
  node = parse(source)
416
- expect(node.rewritten_source('{{arguments}}')).to eq %(a, b)
418
+ expect(node.rewritten_source('{{arguments}}')).to eq 'a, b'
417
419
  end
418
420
 
419
- it 'rewrites array with multi line given as argument for method'do
420
- source = <<-EOS.strip
421
- long_name_method([
422
- 1,
423
- 2,
424
- 3
425
- ])
421
+ it 'rewrites array with multi line given as argument for method' do
422
+ source = <<~EOS.strip
423
+ long_name_method([
424
+ 1,
425
+ 2,
426
+ 3
427
+ ])
426
428
  EOS
429
+
427
430
  node = parse(source)
428
- expect(node.rewritten_source('{{arguments}}')).to eq <<-EOS.strip
429
- [
430
- 1,
431
- 2,
432
- 3
433
- ]
431
+ expect(node.rewritten_source('{{arguments}}')).to eq <<~EOS.strip
432
+ [
433
+ 1,
434
+ 2,
435
+ 3
436
+ ]
434
437
  EOS
435
438
  end
436
439
  end