synvert-core 0.15.1 → 0.18.0

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