synvert-core 0.17.0 → 0.18.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -0
  3. data/lib/synvert/core.rb +1 -1
  4. data/lib/synvert/core/engine/erb.rb +29 -22
  5. data/lib/synvert/core/node_ext.rb +102 -101
  6. data/lib/synvert/core/rewriter.rb +19 -13
  7. data/lib/synvert/core/rewriter/action.rb +3 -5
  8. data/lib/synvert/core/rewriter/action/append_action.rb +1 -1
  9. data/lib/synvert/core/rewriter/action/insert_action.rb +7 -3
  10. data/lib/synvert/core/rewriter/action/insert_after_action.rb +1 -1
  11. data/lib/synvert/core/rewriter/action/remove_action.rb +1 -1
  12. data/lib/synvert/core/rewriter/action/replace_erb_stmt_with_expr_action.rb +4 -3
  13. data/lib/synvert/core/rewriter/action/replace_with_action.rb +6 -4
  14. data/lib/synvert/core/rewriter/condition/if_exist_condition.rb +1 -1
  15. data/lib/synvert/core/rewriter/condition/if_only_exist_condition.rb +1 -2
  16. data/lib/synvert/core/rewriter/condition/unless_exist_condition.rb +1 -1
  17. data/lib/synvert/core/rewriter/gem_spec.rb +2 -1
  18. data/lib/synvert/core/rewriter/helper.rb +3 -5
  19. data/lib/synvert/core/rewriter/instance.rb +20 -17
  20. data/lib/synvert/core/version.rb +1 -1
  21. data/spec/spec_helper.rb +1 -1
  22. data/spec/synvert/core/engine/erb_spec.rb +30 -30
  23. data/spec/synvert/core/node_ext_spec.rb +53 -52
  24. data/spec/synvert/core/rewriter/action/insert_action_spec.rb +8 -8
  25. data/spec/synvert/core/rewriter/action/insert_after_action_spec.rb +3 -3
  26. data/spec/synvert/core/rewriter/action/remove_action_spec.rb +1 -1
  27. data/spec/synvert/core/rewriter/action/replace_with_action_spec.rb +13 -9
  28. data/spec/synvert/core/rewriter/condition/if_exist_condition_spec.rb +17 -9
  29. data/spec/synvert/core/rewriter/condition/if_only_exist_condition_spec.rb +21 -12
  30. data/spec/synvert/core/rewriter/condition/unless_exist_condition_spec.rb +17 -9
  31. data/spec/synvert/core/rewriter/gem_spec_spec.rb +6 -4
  32. data/spec/synvert/core/rewriter/helper_spec.rb +34 -31
  33. data/spec/synvert/core/rewriter/instance_spec.rb +100 -66
  34. data/spec/synvert/core/rewriter/scope/goto_scope_spec.rb +8 -6
  35. data/spec/synvert/core/rewriter/scope/within_scope.rb +15 -8
  36. data/spec/synvert/core/rewriter_spec.rb +99 -68
  37. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b73d8898436945c3266c9d0e4eec002491c3b031e1d571f94b3a59443142a9dd
4
- data.tar.gz: c8afb1ce36ef5d3e826ebbc7ca10103175661e14f8ea1af1ae5a1a83b8714dbf
3
+ metadata.gz: a30d3e6c2241ca3fb2d35ead568fb24dc04db2d38a8faebb99eda33b0da7a354
4
+ data.tar.gz: f5d6ecdbcecbceabdf95ee474253b6e4ed0fc5cc5c52d25a7408d53ab54ccff0
5
5
  SHA512:
6
- metadata.gz: b7198c44b3696f0c0f640fe378ff3b9923799517998d6be38177096a552b33885bf5df6113d1aa1a0b68432bff79d0322587648d221bd6fbaebcf75ab8b2d32d
7
- data.tar.gz: 39b8bf09735971e108b112b96b3377df988b82e891c76d5050fef978aec81bf340ff096463ac9416848fd9b8e412b95537377d0647d11a6028d5ab909cac4fa4
6
+ metadata.gz: b7a9a026022ba96e5140d3aa6976bdbc8448dffdc8539b946df41016daf5847bf2c75a1458c2b8184d73e2a50a40741be67e8c382b49b1c1df5adf9e7c2e29dd
7
+ data.tar.gz: 42d7d7249ba0047709013c61a14c3428728967ff701b738eaa261683dfdf44ea899a3235cf1a2adb034034bb0bd006d7ec6ce59c415abfaef263647d15cbeb21
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## 0.18.0 (2021-02-07)
4
+
5
+ * Add `Rewriter.execute`
6
+
3
7
  ## 0.17.0 (2021-01-29)
4
8
 
5
9
  * Ignore `gem_spec` check if `Gemfile.lock` does not eixst
data/lib/synvert/core.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "synvert/core/version"
3
+ require 'synvert/core/version'
4
4
  require 'bundler'
5
5
  require 'parser'
6
6
  require 'parser/current'
@@ -4,17 +4,17 @@ require 'erubis'
4
4
 
5
5
  module Synvert::Core
6
6
  module Engine
7
- ERUBY_EXPR_SPLITTER = "; ;"
8
- ERUBY_STMT_SPLITTER = "; ;"
7
+ ERUBY_EXPR_SPLITTER = '; ;'
8
+ ERUBY_STMT_SPLITTER = '; ;'
9
9
 
10
10
  class ERB
11
- class <<self
11
+ class << self
12
12
  # convert erb to ruby code.
13
13
  #
14
14
  # @param source [String] erb source code.
15
15
  # @return [String] ruby source code.
16
16
  def encode(source)
17
- Erubis.new(source.gsub("-%>", "%>"), :escape => false, :trim => false).src
17
+ Erubis.new(source.gsub('-%>', '%>'), escape: false, trim: false).src
18
18
  end
19
19
 
20
20
  # convert ruby code to erb.
@@ -28,25 +28,30 @@ module Synvert::Core
28
28
  source = remove_erubis_buf(source)
29
29
  end
30
30
 
31
- private
31
+ private
32
32
 
33
33
  def decode_ruby_stmt(source)
34
34
  source.gsub(/#{ERUBY_STMT_SPLITTER}(.+?)#{ERUBY_STMT_SPLITTER}/m) { "<%#{$1}%>" }
35
35
  end
36
36
 
37
37
  def decode_ruby_output(source)
38
- source.gsub(/@output_buffer.append=\((.+?)\);#{ERUBY_EXPR_SPLITTER}/m) { "<%=#{$1}%>" }
39
- .gsub(/@output_buffer.append= (.+?)\s+(do|\{)(\s*\|[^|]*\|)?\s*#{ERUBY_EXPR_SPLITTER}/m) { |m| "<%=#{m.sub("@output_buffer.append= ", "").sub(ERUBY_EXPR_SPLITTER, "")}%>" }
38
+ source.gsub(/@output_buffer.append=\((.+?)\);#{ERUBY_EXPR_SPLITTER}/m) { "<%=#{$1}%>" }.gsub(
39
+ /@output_buffer.append= (.+?)\s+(do|\{)(\s*\|[^|]*\|)?\s*#{ERUBY_EXPR_SPLITTER}/m
40
+ ) { |m| "<%=#{m.sub('@output_buffer.append= ', '').sub(ERUBY_EXPR_SPLITTER, '')}%>" }
40
41
  end
41
42
 
42
43
  def decode_html_output(source)
43
- source.gsub(/@output_buffer.safe_append='(.+?)'.freeze;/m) { reverse_escape_text($1) }
44
- .gsub(/@output_buffer.safe_append=\((.+?)\);#{ERUBY_EXPR_SPLITTER}/m) { reverse_escape_text($1) }
45
- .gsub(/@output_buffer.safe_append=(.+?)\s+(do|\{)(\s*\|[^|]*\|)?\s*#{ERUBY_EXPR_SPLITTER}/m) { reverse_escape_text($1) }
44
+ source.gsub(/@output_buffer.safe_append='(.+?)'.freeze;/m) { reverse_escape_text($1) }.gsub(
45
+ /@output_buffer.safe_append=\((.+?)\);#{ERUBY_EXPR_SPLITTER}/m
46
+ ) { reverse_escape_text($1) }.gsub(
47
+ /@output_buffer.safe_append=(.+?)\s+(do|\{)(\s*\|[^|]*\|)?\s*#{ERUBY_EXPR_SPLITTER}/m
48
+ ) { reverse_escape_text($1) }
46
49
  end
47
50
 
48
51
  def remove_erubis_buf(source)
49
- source.sub("@output_buffer = output_buffer || ActionView::OutputBuffer.new;", "").sub("@output_buffer.to_s", "")
52
+ source
53
+ .sub('@output_buffer = output_buffer || ActionView::OutputBuffer.new;', '')
54
+ .sub('@output_buffer.to_s', '')
50
55
  end
51
56
 
52
57
  def reverse_escape_text(source)
@@ -59,7 +64,7 @@ module Synvert::Core
59
64
  class Erubis < ::Erubis::Eruby
60
65
  def add_preamble(src)
61
66
  @newline_pending = 0
62
- src << "@output_buffer = output_buffer || ActionView::OutputBuffer.new;"
67
+ src << '@output_buffer = output_buffer || ActionView::OutputBuffer.new;'
63
68
  end
64
69
 
65
70
  def add_text(src, text)
@@ -102,22 +107,24 @@ module Synvert::Core
102
107
  def add_expr_escaped(src, code)
103
108
  flush_newline_if_pending(src)
104
109
  if code =~ BLOCK_EXPR
105
- src << "@output_buffer.safe_append= " << code << ERUBY_EXPR_SPLITTER
110
+ src << '@output_buffer.safe_append= ' << code << ERUBY_EXPR_SPLITTER
106
111
  else
107
- src << "@output_buffer.safe_append=(" << code << ");" << ERUBY_EXPR_SPLITTER
112
+ src << '@output_buffer.safe_append=(' << code << ');' << ERUBY_EXPR_SPLITTER
108
113
  end
109
114
  end
110
115
 
111
116
  def add_stmt(src, code)
112
117
  flush_newline_if_pending(src)
113
- if code != "\n" && code != ""
114
- index = if code =~ /\A(\s*)\r?\n/
115
- $1.length
116
- elsif code =~ /\A(\s+)/
117
- $1.end_with?(' ') ? $1.length - 1 : $1.length
118
- else
119
- 0
120
- end
118
+ if code != "\n" && code != ''
119
+ index =
120
+ case code
121
+ when /\A(\s*)\r?\n/
122
+ $1.length
123
+ when /\A(\s+)/
124
+ $1.end_with?(' ') ? $1.length - 1 : $1.length
125
+ else
126
+ 0
127
+ end
121
128
  code.insert(index, ERUBY_STMT_SPLITTER)
122
129
  code.insert(-1, ERUBY_STMT_SPLITTER[0...-1])
123
130
  end
@@ -31,15 +31,15 @@ module Parser::AST
31
31
  # @return [Parser::AST::Node] name node.
32
32
  # @raise [Synvert::Core::MethodNotSupported] if calls on other node.
33
33
  def name
34
- case self.type
34
+ case type
35
35
  when :class, :module, :def, :arg, :blockarg, :restarg
36
- self.children[0]
36
+ children[0]
37
37
  when :defs, :const
38
- self.children[1]
38
+ children[1]
39
39
  when :mlhs
40
40
  self
41
41
  else
42
- raise Synvert::Core::MethodNotSupported.new "name is not handled for #{self.debug_info}"
42
+ raise Synvert::Core::MethodNotSupported, "name is not handled for #{debug_info}"
43
43
  end
44
44
  end
45
45
 
@@ -48,10 +48,10 @@ module Parser::AST
48
48
  # @return [Parser::AST::Node] parent_class node.
49
49
  # @raise [Synvert::Core::MethodNotSupported] if calls on other node.
50
50
  def parent_class
51
- if :class == self.type
52
- self.children[1]
51
+ if :class == type
52
+ children[1]
53
53
  else
54
- raise Synvert::Core::MethodNotSupported.new "parent_class is not handled for #{self.debug_info}"
54
+ raise Synvert::Core::MethodNotSupported, "parent_class is not handled for #{debug_info}"
55
55
  end
56
56
  end
57
57
 
@@ -60,10 +60,10 @@ module Parser::AST
60
60
  # @return [Parser::AST::Node] parent const node.
61
61
  # @raise [Synvert::Core::MethodNotSupported] if calls on other node.
62
62
  def parent_const
63
- if :const == self.type
64
- self.children[0]
63
+ if :const == type
64
+ children[0]
65
65
  else
66
- raise Synvert::Core::MethodNotSupported.new "parent_const is not handled for #{self.debug_info}"
66
+ raise Synvert::Core::MethodNotSupported, "parent_const is not handled for #{debug_info}"
67
67
  end
68
68
  end
69
69
 
@@ -72,10 +72,10 @@ module Parser::AST
72
72
  # @return [Parser::AST::Node] receiver node.
73
73
  # @raise [Synvert::Core::MethodNotSupported] if calls on other node.
74
74
  def receiver
75
- if :send == self.type
76
- self.children[0]
75
+ if :send == type
76
+ children[0]
77
77
  else
78
- raise Synvert::Core::MethodNotSupported.new "receiver is not handled for #{self.debug_info}"
78
+ raise Synvert::Core::MethodNotSupported, "receiver is not handled for #{debug_info}"
79
79
  end
80
80
  end
81
81
 
@@ -84,13 +84,13 @@ module Parser::AST
84
84
  # @return [Parser::AST::Node] mesage node.
85
85
  # @raise [Synvert::Core::MethodNotSupported] if calls on other node.
86
86
  def message
87
- case self.type
87
+ case type
88
88
  when :super, :zsuper
89
89
  :super
90
90
  when :send
91
- self.children[1]
91
+ children[1]
92
92
  else
93
- raise Synvert::Core::MethodNotSupported.new "message is not handled for #{self.debug_info}"
93
+ raise Synvert::Core::MethodNotSupported, "message is not handled for #{debug_info}"
94
94
  end
95
95
  end
96
96
 
@@ -99,17 +99,17 @@ module Parser::AST
99
99
  # @return [Array<Parser::AST::Node>] arguments node.
100
100
  # @raise [Synvert::Core::MethodNotSupported] if calls on other node.
101
101
  def arguments
102
- case self.type
102
+ case type
103
103
  when :def, :block
104
- ArgumentsNode.new self.children[1]
104
+ ArgumentsNode.new children[1]
105
105
  when :defs
106
- ArgumentsNode.new self.children[2]
106
+ ArgumentsNode.new children[2]
107
107
  when :send
108
- self.children[2..-1]
108
+ children[2..-1]
109
109
  when :defined?
110
- self.children
110
+ children
111
111
  else
112
- raise Synvert::Core::MethodNotSupported.new "arguments is not handled for #{self.debug_info}"
112
+ raise Synvert::Core::MethodNotSupported, "arguments is not handled for #{debug_info}"
113
113
  end
114
114
  end
115
115
 
@@ -118,10 +118,10 @@ module Parser::AST
118
118
  # @return [Parser::AST::Node] caller node.
119
119
  # @raise [Synvert::Core::MethodNotSupported] if calls on other node.
120
120
  def caller
121
- if :block == self.type
122
- self.children[0]
121
+ if :block == type
122
+ children[0]
123
123
  else
124
- raise Synvert::Core::MethodNotSupported.new "caller is not handled for #{self.debug_info}"
124
+ raise Synvert::Core::MethodNotSupported, "caller is not handled for #{debug_info}"
125
125
  end
126
126
  end
127
127
 
@@ -130,19 +130,19 @@ module Parser::AST
130
130
  # @return [Array<Parser::AST::Node>] body node.
131
131
  # @raise [Synvert::Core::MethodNotSupported] if calls on other node.
132
132
  def body
133
- case self.type
133
+ case type
134
134
  when :begin
135
- self.children
135
+ children
136
136
  when :def, :block
137
- return [] if self.children[2].nil?
137
+ return [] if children[2].nil?
138
138
 
139
- :begin == self.children[2].type ? self.children[2].body : self.children[2..-1]
139
+ :begin == children[2].type ? children[2].body : children[2..-1]
140
140
  when :defs
141
- return [] if self.children[3].nil?
141
+ return [] if children[3].nil?
142
142
 
143
- :begin == self.children[3].type ? self.children[3].body : self.children[3..-1]
143
+ :begin == children[3].type ? children[3].body : children[3..-1]
144
144
  else
145
- raise Synvert::Core::MethodNotSupported.new "body is not handled for #{self.debug_info}"
145
+ raise Synvert::Core::MethodNotSupported, "body is not handled for #{debug_info}"
146
146
  end
147
147
  end
148
148
 
@@ -151,10 +151,10 @@ module Parser::AST
151
151
  # @return [Parser::AST::Node] condition node.
152
152
  # @raise [Synvert::Core::MethodNotSupported] if calls on other node.
153
153
  def condition
154
- if :if == self.type
155
- self.children[0]
154
+ if :if == type
155
+ children[0]
156
156
  else
157
- raise Synvert::Core::MethodNotSupported.new "condition is not handled for #{self.debug_info}"
157
+ raise Synvert::Core::MethodNotSupported, "condition is not handled for #{debug_info}"
158
158
  end
159
159
  end
160
160
 
@@ -163,10 +163,10 @@ module Parser::AST
163
163
  # @return [Array<Parser::AST::Node>] keys node.
164
164
  # @raise [Synvert::Core::MethodNotSupported] if calls on other node.
165
165
  def keys
166
- if :hash == self.type
167
- self.children.map { |child| child.children[0] }
166
+ if :hash == type
167
+ children.map { |child| child.children[0] }
168
168
  else
169
- raise Synvert::Core::MethodNotSupported.new "keys is not handled for #{self.debug_info}"
169
+ raise Synvert::Core::MethodNotSupported, "keys is not handled for #{debug_info}"
170
170
  end
171
171
  end
172
172
 
@@ -175,10 +175,10 @@ module Parser::AST
175
175
  # @return [Array<Parser::AST::Node>] values node.
176
176
  # @raise [Synvert::Core::MethodNotSupported] if calls on other node.
177
177
  def values
178
- if :hash == self.type
179
- self.children.map { |child| child.children[1] }
178
+ if :hash == type
179
+ children.map { |child| child.children[1] }
180
180
  else
181
- raise Synvert::Core::MethodNotSupported.new "keys is not handled for #{self.debug_info}"
181
+ raise Synvert::Core::MethodNotSupported, "keys is not handled for #{debug_info}"
182
182
  end
183
183
  end
184
184
 
@@ -188,10 +188,10 @@ module Parser::AST
188
188
  # @return [Boolean] true if specified key exists.
189
189
  # @raise [Synvert::Core::MethodNotSupported] if calls on other node.
190
190
  def has_key?(key)
191
- if :hash == self.type
192
- self.children.any? { |pair_node| pair_node.key.to_value == key }
191
+ if :hash == type
192
+ children.any? { |pair_node| pair_node.key.to_value == key }
193
193
  else
194
- raise Synvert::Core::MethodNotSupported.new "has_key? is not handled for #{self.debug_info}"
194
+ raise Synvert::Core::MethodNotSupported, "has_key? is not handled for #{debug_info}"
195
195
  end
196
196
  end
197
197
 
@@ -201,11 +201,11 @@ module Parser::AST
201
201
  # @return [Parser::AST::Node] value node.
202
202
  # @raise [Synvert::Core::MethodNotSupported] if calls on other node.
203
203
  def hash_value(key)
204
- if :hash == self.type
205
- value_node = self.children.find { |pair_node| pair_node.key.to_value == key }
204
+ if :hash == type
205
+ value_node = children.find { |pair_node| pair_node.key.to_value == key }
206
206
  value_node ? value_node.value : nil
207
207
  else
208
- raise Synvert::Core::MethodNotSupported.new "has_key? is not handled for #{self.debug_info}"
208
+ raise Synvert::Core::MethodNotSupported, "has_key? is not handled for #{debug_info}"
209
209
  end
210
210
  end
211
211
 
@@ -214,10 +214,10 @@ module Parser::AST
214
214
  # @return [Parser::AST::Node] key node.
215
215
  # @raise [Synvert::Core::MethodNotSupported] if calls on other node.
216
216
  def key
217
- if :pair == self.type
218
- self.children.first
217
+ if :pair == type
218
+ children.first
219
219
  else
220
- raise Synvert::Core::MethodNotSupported.new "key is not handled for #{self.debug_info}"
220
+ raise Synvert::Core::MethodNotSupported, "key is not handled for #{debug_info}"
221
221
  end
222
222
  end
223
223
 
@@ -226,10 +226,10 @@ module Parser::AST
226
226
  # @return [Parser::AST::Node] value node.
227
227
  # @raise [Synvert::Core::MethodNotSupported] if calls on other node.
228
228
  def value
229
- if :pair == self.type
230
- self.children.last
229
+ if :pair == type
230
+ children.last
231
231
  else
232
- raise Synvert::Core::MethodNotSupported.new "value is not handled for #{self.debug_info}"
232
+ raise Synvert::Core::MethodNotSupported, "value is not handled for #{debug_info}"
233
233
  end
234
234
  end
235
235
 
@@ -238,10 +238,10 @@ module Parser::AST
238
238
  # @return [Parser::AST::Node] variable nodes.
239
239
  # @raise [Synvert::Core::MethodNotSupported] if calls on other node.
240
240
  def left_value
241
- if %i[masgn lvasgn ivasgn].include? self.type
242
- self.children[0]
241
+ if %i[masgn lvasgn ivasgn].include? type
242
+ children[0]
243
243
  else
244
- raise Synvert::Core::MethodNotSupported.new "left_value is not handled for #{self.debug_info}"
244
+ raise Synvert::Core::MethodNotSupported, "left_value is not handled for #{debug_info}"
245
245
  end
246
246
  end
247
247
 
@@ -250,10 +250,10 @@ module Parser::AST
250
250
  # @return [Array<Parser::AST::Node>] variable nodes.
251
251
  # @raise [Synvert::Core::MethodNotSupported] if calls on other node.
252
252
  def right_value
253
- if %i[masgn lvasgn ivasgn].include? self.type
254
- self.children[1]
253
+ if %i[masgn lvasgn ivasgn].include? type
254
+ children[1]
255
255
  else
256
- raise Synvert::Core::MethodNotSupported.new "right_value is not handled for #{self.debug_info}"
256
+ raise Synvert::Core::MethodNotSupported, "right_value is not handled for #{debug_info}"
257
257
  end
258
258
  end
259
259
 
@@ -262,60 +262,59 @@ module Parser::AST
262
262
  # @return [Object] exact value.
263
263
  # @raise [Synvert::Core::MethodNotSupported] if calls on other node.
264
264
  def to_value
265
- case self.type
265
+ case type
266
266
  when :int, :str, :sym
267
- self.children.last
267
+ children.last
268
268
  when :true
269
269
  true
270
270
  when :false
271
271
  false
272
272
  when :array
273
- self.children.map(&:to_value)
273
+ children.map(&:to_value)
274
274
  when :irange
275
- (self.children.first.to_value..self.children.last.to_value)
275
+ (children.first.to_value..children.last.to_value)
276
276
  when :begin
277
- self.children.first.to_value
277
+ children.first.to_value
278
278
  else
279
- raise Synvert::Core::MethodNotSupported.new "to_value is not handled for #{self.debug_info}"
279
+ raise Synvert::Core::MethodNotSupported, "to_value is not handled for #{debug_info}"
280
280
  end
281
281
  end
282
282
 
283
283
  def to_s
284
- if :mlhs == self.type
285
- "(#{self.children.map(&:name).join(', ')})"
284
+ if :mlhs == type
285
+ "(#{children.map(&:name).join(', ')})"
286
286
  end
287
287
  end
288
288
 
289
289
  def debug_info
290
- "\n" + [
291
- "file: #{self.loc.expression.source_buffer.name}",
292
- "line: #{self.loc.expression.line}",
293
- "source: #{self.to_source}",
294
- "node: #{self.inspect}"
295
- ].join("\n")
290
+ "\n" +
291
+ [
292
+ "file: #{loc.expression.source_buffer.name}",
293
+ "line: #{loc.expression.line}",
294
+ "source: #{to_source}",
295
+ "node: #{inspect}"
296
+ ].join("\n")
296
297
  end
297
298
 
298
299
  # Get the source code of current node.
299
300
  #
300
301
  # @return [String] source code.
301
302
  def to_source
302
- if self.loc.expression
303
- self.loc.expression.source
304
- end
303
+ loc.expression&.source
305
304
  end
306
305
 
307
306
  # Get the indent of current node.
308
307
  #
309
308
  # @return [Integer] indent.
310
309
  def indent
311
- self.loc.expression.column
310
+ loc.expression.column
312
311
  end
313
312
 
314
313
  # Get the line of current node.
315
314
  #
316
315
  # @return [Integer] line.
317
316
  def line
318
- self.loc.expression.line
317
+ loc.expression.line
319
318
  end
320
319
 
321
320
  # Recursively iterate all child nodes of current node.
@@ -323,7 +322,7 @@ module Parser::AST
323
322
  # @yield [child] Gives a child node.
324
323
  # @yieldparam child [Parser::AST::Node] child node
325
324
  def recursive_children
326
- self.children.each do |child|
325
+ children.each do |child|
327
326
  if Parser::AST::Node === child
328
327
  yield child
329
328
  child.recursive_children { |c| yield c }
@@ -336,21 +335,24 @@ module Parser::AST
336
335
  # @param rules [Hash] rules to match.
337
336
  # @return true if matches.
338
337
  def match?(rules)
339
- flat_hash(rules).keys.all? do |multi_keys|
340
- if multi_keys.last == :any
341
- actual_values = actual_value(self, multi_keys[0...-1])
342
- expected = expected_value(rules, multi_keys)
343
- actual_values.any? { |actual| match_value?(actual, expected) }
344
- elsif multi_keys.last == :not
345
- actual = actual_value(self, multi_keys[0...-1])
346
- expected = expected_value(rules, multi_keys)
347
- !match_value?(actual, expected)
348
- else
349
- actual = actual_value(self, multi_keys)
350
- expected = expected_value(rules, multi_keys)
351
- match_value?(actual, expected)
338
+ flat_hash(rules)
339
+ .keys
340
+ .all? do |multi_keys|
341
+ case multi_keys.last
342
+ when :any
343
+ actual_values = actual_value(self, multi_keys[0...-1])
344
+ expected = expected_value(rules, multi_keys)
345
+ actual_values.any? { |actual| match_value?(actual, expected) }
346
+ when :not
347
+ actual = actual_value(self, multi_keys[0...-1])
348
+ expected = expected_value(rules, multi_keys)
349
+ !match_value?(actual, expected)
350
+ else
351
+ actual = actual_value(self, multi_keys)
352
+ expected = expected_value(rules, multi_keys)
353
+ match_value?(actual, expected)
354
+ end
352
355
  end
353
- end
354
356
  end
355
357
 
356
358
  # Get rewritten source code.
@@ -363,8 +365,8 @@ module Parser::AST
363
365
  def rewritten_source(code)
364
366
  code.gsub(/{{(.*?)}}/m) do
365
367
  old_code = $1
366
- if self.respond_to? old_code.split(/\.|\[/).first
367
- evaluated = self.instance_eval old_code
368
+ if respond_to? old_code.split(/\.|\[/).first
369
+ evaluated = instance_eval old_code
368
370
  case evaluated
369
371
  when Parser::AST::Node
370
372
  evaluated.loc.expression.source
@@ -377,7 +379,7 @@ module Parser::AST
377
379
  if lines_count > 1 && lines_count == evaluated.size
378
380
  new_code = []
379
381
  lines.each_with_index { |line, index|
380
- new_code << (index == 0 ? line : line[evaluated.first.indent-2..-1])
382
+ new_code << (index == 0 ? line : line[evaluated.first.indent - 2..-1])
381
383
  }
382
384
  new_code.join("\n")
383
385
  else
@@ -389,7 +391,7 @@ module Parser::AST
389
391
  when NilClass
390
392
  'nil'
391
393
  else
392
- raise Synvert::Core::MethodNotSupported.new "rewritten_source is not handled for #{evaluated.inspect}"
394
+ raise Synvert::Core::MethodNotSupported, "rewritten_source is not handled for #{evaluated.inspect}"
393
395
  end
394
396
  else
395
397
  "{{#{old_code}}}"
@@ -397,7 +399,7 @@ module Parser::AST
397
399
  end
398
400
  end
399
401
 
400
- private
402
+ private
401
403
 
402
404
  # Compare actual value with expected value.
403
405
  #
@@ -415,8 +417,7 @@ module Parser::AST
415
417
  end
416
418
  when String
417
419
  if Parser::AST::Node === actual
418
- actual.to_source == expected ||
419
- (actual.to_source[0] == ':' && actual.to_source[1..-1] == expected) ||
420
+ actual.to_source == expected || (actual.to_source[0] == ':' && actual.to_source[1..-1] == expected) ||
420
421
  actual.to_source[1...-1] == expected
421
422
  else
422
423
  actual.to_s == expected
@@ -446,7 +447,7 @@ module Parser::AST
446
447
  when Parser::AST::Node
447
448
  actual == expected
448
449
  else
449
- raise Synvert::Core::MethodNotSupported.new "#{expected.class} is not handled for match_value?"
450
+ raise Synvert::Core::MethodNotSupported, "#{expected.class} is not handled for match_value?"
450
451
  end
451
452
  end
452
453