synvert-core 1.3.0 → 1.5.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.
- checksums.yaml +4 -4
- data/.gitignore +0 -4
- data/CHANGELOG.md +16 -0
- data/Gemfile +0 -3
- data/Guardfile +0 -9
- data/README.md +30 -12
- data/Rakefile +1 -15
- data/lib/synvert/core/engine/erb.rb +1 -1
- data/lib/synvert/core/engine.rb +1 -1
- data/lib/synvert/core/node_ext.rb +0 -466
- data/lib/synvert/core/rewriter/action/replace_erb_stmt_with_expr_action.rb +20 -17
- data/lib/synvert/core/rewriter/condition/if_exist_condition.rb +1 -1
- data/lib/synvert/core/rewriter/condition/unless_exist_condition.rb +1 -1
- data/lib/synvert/core/rewriter/instance.rb +89 -135
- data/lib/synvert/core/rewriter/scope/query_scope.rb +2 -2
- data/lib/synvert/core/rewriter/scope/within_scope.rb +4 -4
- data/lib/synvert/core/rewriter.rb +0 -10
- data/lib/synvert/core/version.rb +1 -1
- data/lib/synvert/core.rb +4 -6
- data/spec/synvert/core/engine/erb_spec.rb +3 -3
- data/spec/synvert/core/node_ext_spec.rb +0 -795
- data/spec/synvert/core/rewriter/action/replace_erb_stmt_with_expr_action_spec.rb +21 -1
- data/spec/synvert/core/rewriter/instance_spec.rb +49 -112
- data/spec/synvert/core/rewriter/scope/goto_scope_spec.rb +1 -4
- data/spec/synvert/core/rewriter/scope/query_scope_spec.rb +8 -4
- data/spec/synvert/core/rewriter/scope/within_scope_spec.rb +1 -4
- data/synvert-core-ruby.gemspec +4 -2
- metadata +44 -61
- data/lib/synvert/core/array_ext.rb +0 -48
- data/lib/synvert/core/node_query/compiler/array.rb +0 -34
- data/lib/synvert/core/node_query/compiler/attribute.rb +0 -39
- data/lib/synvert/core/node_query/compiler/attribute_list.rb +0 -24
- data/lib/synvert/core/node_query/compiler/boolean.rb +0 -23
- data/lib/synvert/core/node_query/compiler/comparable.rb +0 -86
- data/lib/synvert/core/node_query/compiler/dynamic_attribute.rb +0 -51
- data/lib/synvert/core/node_query/compiler/expression.rb +0 -58
- data/lib/synvert/core/node_query/compiler/float.rb +0 -23
- data/lib/synvert/core/node_query/compiler/identifier.rb +0 -41
- data/lib/synvert/core/node_query/compiler/integer.rb +0 -23
- data/lib/synvert/core/node_query/compiler/invalid_operator_error.rb +0 -7
- data/lib/synvert/core/node_query/compiler/nil.rb +0 -23
- data/lib/synvert/core/node_query/compiler/parse_error.rb +0 -7
- data/lib/synvert/core/node_query/compiler/regexp.rb +0 -37
- data/lib/synvert/core/node_query/compiler/selector.rb +0 -138
- data/lib/synvert/core/node_query/compiler/simple_selector.rb +0 -29
- data/lib/synvert/core/node_query/compiler/string.rb +0 -23
- data/lib/synvert/core/node_query/compiler/symbol.rb +0 -23
- data/lib/synvert/core/node_query/compiler.rb +0 -25
- data/lib/synvert/core/node_query/lexer.rex +0 -108
- data/lib/synvert/core/node_query/lexer.rex.rb +0 -321
- data/lib/synvert/core/node_query/parser.racc.rb +0 -322
- data/lib/synvert/core/node_query/parser.y +0 -62
- data/lib/synvert/core/node_query.rb +0 -37
- data/lib/synvert/core/rewriter/action/append_action.rb +0 -28
- data/lib/synvert/core/rewriter/action/delete_action.rb +0 -32
- data/lib/synvert/core/rewriter/action/insert_action.rb +0 -34
- data/lib/synvert/core/rewriter/action/insert_after_action.rb +0 -22
- data/lib/synvert/core/rewriter/action/prepend_action.rb +0 -44
- data/lib/synvert/core/rewriter/action/remove_action.rb +0 -53
- data/lib/synvert/core/rewriter/action/replace_action.rb +0 -33
- data/lib/synvert/core/rewriter/action/replace_with_action.rb +0 -36
- data/lib/synvert/core/rewriter/action/wrap_action.rb +0 -37
- data/lib/synvert/core/rewriter/action.rb +0 -102
- data/spec/synvert/core/node_query/lexer_spec.rb +0 -640
- data/spec/synvert/core/node_query/parser_spec.rb +0 -382
- data/spec/synvert/core/rewriter/action/append_action_spec.rb +0 -70
- data/spec/synvert/core/rewriter/action/delete_action_spec.rb +0 -26
- data/spec/synvert/core/rewriter/action/insert_action_spec.rb +0 -70
- data/spec/synvert/core/rewriter/action/insert_after_action_spec.rb +0 -26
- data/spec/synvert/core/rewriter/action/prepend_action_spec.rb +0 -175
- data/spec/synvert/core/rewriter/action/remove_action_spec.rb +0 -26
- data/spec/synvert/core/rewriter/action/replace_action_spec.rb +0 -28
- data/spec/synvert/core/rewriter/action/replace_with_action_spec.rb +0 -59
- data/spec/synvert/core/rewriter/action/wrap_action_spec.rb +0 -31
- data/spec/synvert/core/rewriter/action_spec.rb +0 -14
@@ -4,37 +4,40 @@ module Synvert::Core
|
|
4
4
|
# ReplaceErbStmtWithExprAction to replace erb stmt code to expr,
|
5
5
|
# @example
|
6
6
|
# e.g. <% form_for ... %> => <%= form_for ... %>.
|
7
|
-
class Rewriter::ReplaceErbStmtWithExprAction <
|
7
|
+
class Rewriter::ReplaceErbStmtWithExprAction < NodeMutation::Action
|
8
8
|
# Initialize a ReplaceErbStmtWithExprAction.
|
9
9
|
#
|
10
|
-
# @param
|
11
|
-
def initialize(
|
12
|
-
super(
|
10
|
+
# @param node [Synvert::Core::Rewriter::Node]
|
11
|
+
def initialize(node)
|
12
|
+
super(node, nil)
|
13
13
|
end
|
14
14
|
|
15
|
-
# The
|
15
|
+
# The new erb expr code.
|
16
16
|
#
|
17
|
-
# @return [String]
|
18
|
-
def
|
19
|
-
@node
|
20
|
-
|
21
|
-
|
17
|
+
# @return [String] new code.
|
18
|
+
def new_code
|
19
|
+
NodeMutation.adapter.file_content(@node)[@start...@end]
|
20
|
+
.sub(Engine::ERUBY_STMT_SPLITTER, '@output_buffer.append= ')
|
21
|
+
.sub(Engine::ERUBY_STMT_SPLITTER, Engine::ERUBY_EXPR_SPLITTER)
|
22
22
|
end
|
23
23
|
|
24
24
|
private
|
25
25
|
|
26
26
|
# Calculate the begin the end positions.
|
27
27
|
def calculate_position
|
28
|
-
|
29
|
-
|
28
|
+
node_start = NodeMutation.adapter.get_start(@node)
|
29
|
+
node_source = NodeMutation.adapter.get_source(@node)
|
30
|
+
file_content = NodeMutation.adapter.file_content(@node)
|
31
|
+
|
32
|
+
whitespace_index = node_start
|
33
|
+
while file_content[whitespace_index -= 1] == ' '
|
30
34
|
end
|
31
|
-
@
|
35
|
+
@start = whitespace_index - Engine::ERUBY_STMT_SPLITTER.length + 1
|
32
36
|
|
33
|
-
|
34
|
-
|
35
|
-
while @node.loc.expression.source_buffer.source[node_begin_pos += 1] != '@'
|
37
|
+
at_index = node_start + node_source.index('do')
|
38
|
+
while file_content[at_index += 1] != '@'
|
36
39
|
end
|
37
|
-
@
|
40
|
+
@end = at_index
|
38
41
|
end
|
39
42
|
end
|
40
43
|
end
|
@@ -10,7 +10,7 @@ module Synvert::Core
|
|
10
10
|
# @return [Boolean]
|
11
11
|
def match?
|
12
12
|
match = false
|
13
|
-
@instance.current_node
|
13
|
+
NodeQuery::Helper.handle_recursive_child(@instance.current_node) do |child_node|
|
14
14
|
match ||= child_node&.match?(@rules)
|
15
15
|
end
|
16
16
|
match
|
@@ -10,7 +10,7 @@ module Synvert::Core
|
|
10
10
|
# return [Boolean]
|
11
11
|
def match?
|
12
12
|
match = false
|
13
|
-
@instance.current_node
|
13
|
+
NodeQuery::Helper.handle_recursive_child(@instance.current_node) do |child_node|
|
14
14
|
match ||= child_node&.match?(@rules)
|
15
15
|
end
|
16
16
|
!match
|
@@ -20,66 +20,13 @@ module Synvert::Core
|
|
20
20
|
rewriter.helpers.each { |helper| singleton_class.send(:define_method, helper[:name], &helper[:block]) }
|
21
21
|
end
|
22
22
|
|
23
|
-
class << self
|
24
|
-
# Get file source.
|
25
|
-
#
|
26
|
-
# @param file_path [String] file path
|
27
|
-
# @return [String] file source
|
28
|
-
def file_source(file_path)
|
29
|
-
@file_source ||= {}
|
30
|
-
@file_source[file_path] ||=
|
31
|
-
begin
|
32
|
-
source = File.read(file_path, encoding: 'UTF-8')
|
33
|
-
source = Engine::ERB.encode(source) if /\.erb$/.match?(file_path)
|
34
|
-
source
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
# Get file ast.
|
39
|
-
#
|
40
|
-
# @param file_path [String] file path
|
41
|
-
# @return [String] ast node for file
|
42
|
-
def file_ast(file_path)
|
43
|
-
@file_ast ||= {}
|
44
|
-
@file_ast[file_path] ||=
|
45
|
-
begin
|
46
|
-
buffer = Parser::Source::Buffer.new file_path
|
47
|
-
buffer.source = file_source(file_path)
|
48
|
-
|
49
|
-
parser = Parser::CurrentRuby.new
|
50
|
-
parser.reset
|
51
|
-
parser.parse buffer
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
# Write source to file and remove cached file source and ast.
|
56
|
-
#
|
57
|
-
# @param file_path [String] file path
|
58
|
-
# @param source [String] file source
|
59
|
-
def write_file(file_path, source)
|
60
|
-
source = Engine::ERB.decode(source) if /\.erb/.match?(file_path)
|
61
|
-
File.write(file_path, source.gsub(/ +\n/, "\n"))
|
62
|
-
@file_source[file_path] = nil
|
63
|
-
@file_ast[file_path] = nil
|
64
|
-
end
|
65
|
-
|
66
|
-
# Reset file source and ast.
|
67
|
-
def reset
|
68
|
-
@file_source = {}
|
69
|
-
@file_ast = {}
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
23
|
# @!attribute [rw] current_node
|
74
24
|
# @return current parsing node
|
75
25
|
# @!attribute [rw] current_file
|
76
26
|
# @return current filename
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
def file_source
|
81
|
-
self.class.file_source(current_file)
|
82
|
-
end
|
27
|
+
# @!attribute [rw] current_mutation
|
28
|
+
# @return current mutation
|
29
|
+
attr_accessor :current_node, :current_file, :current_mutation
|
83
30
|
|
84
31
|
# Process the instance.
|
85
32
|
# It finds specified files, for each file, it executes the block code, rewrites the original code,
|
@@ -231,7 +178,7 @@ module Synvert::Core
|
|
231
178
|
# end
|
232
179
|
# @param code [String] code need to be appended.
|
233
180
|
def append(code)
|
234
|
-
@
|
181
|
+
@current_mutation.append(@current_node, code)
|
235
182
|
end
|
236
183
|
|
237
184
|
# Parse +prepend+ dsl, it creates a {Synvert::Core::Rewriter::PrependAction} to
|
@@ -250,7 +197,7 @@ module Synvert::Core
|
|
250
197
|
# end
|
251
198
|
# @param code [String] code need to be prepended.
|
252
199
|
def prepend(code)
|
253
|
-
@
|
200
|
+
@current_mutation.prepend(@current_node, code)
|
254
201
|
end
|
255
202
|
|
256
203
|
# Parse +insert+ dsl, it creates a {Synvert::Core::Rewriter::InsertAction} to insert code.
|
@@ -265,7 +212,7 @@ module Synvert::Core
|
|
265
212
|
# @param at [String] insert position, beginning or end
|
266
213
|
# @param to [String] where to insert, if it is nil, will insert to current node.
|
267
214
|
def insert(code, at: 'end', to: nil)
|
268
|
-
@
|
215
|
+
@current_mutation.insert(@current_node, code, at: at, to: to)
|
269
216
|
end
|
270
217
|
|
271
218
|
# Parse +insert_after+ dsl, it creates a {Synvert::Core::Rewriter::InsertAfterAction} to
|
@@ -280,7 +227,22 @@ module Synvert::Core
|
|
280
227
|
# end
|
281
228
|
# @param code [String] code need to be inserted.
|
282
229
|
def insert_after(code)
|
283
|
-
@
|
230
|
+
@current_mutation.insert_after(@current_node, code)
|
231
|
+
end
|
232
|
+
|
233
|
+
# Parse +replace_erb_stmt_with_expr+ dsl, it creates a {Synvert::Core::Rewriter::ReplaceErbStmtWithExprAction} to
|
234
|
+
# replace erb stmt code to expr code.
|
235
|
+
# @example
|
236
|
+
# # <% form_for post do |f| %>
|
237
|
+
# # <% end %>
|
238
|
+
# # =>
|
239
|
+
# # <%= form_for post do |f| %>
|
240
|
+
# # <% end %>
|
241
|
+
# with_node type: 'block', caller: { type: 'send', receiver: nil, message: 'form_for' } do
|
242
|
+
# replace_erb_stmt_with_expr
|
243
|
+
# end
|
244
|
+
def replace_erb_stmt_with_expr
|
245
|
+
@current_mutation.actions << Rewriter::ReplaceErbStmtWithExprAction.new(@current_node).process
|
284
246
|
end
|
285
247
|
|
286
248
|
# Parse +replace_with+ dsl, it creates a {Synvert::Core::Rewriter::ReplaceWithAction} to
|
@@ -294,7 +256,7 @@ module Synvert::Core
|
|
294
256
|
# end
|
295
257
|
# @param code [String] code need to be replaced with.
|
296
258
|
def replace_with(code)
|
297
|
-
@
|
259
|
+
@current_mutation.replace_with(@current_node, code)
|
298
260
|
end
|
299
261
|
|
300
262
|
# Parse +replace+ dsl, it creates a {Synvert::Core::Rewriter::ReplaceAction} to
|
@@ -310,22 +272,7 @@ module Synvert::Core
|
|
310
272
|
# @param selectors [Array<Symbol>] selector names of child node.
|
311
273
|
# @param with [String] code need to be replaced with.
|
312
274
|
def replace(*selectors, with:)
|
313
|
-
@
|
314
|
-
end
|
315
|
-
|
316
|
-
# Parse +replace_erb_stmt_with_expr+ dsl, it creates a {Synvert::Core::Rewriter::ReplaceErbStmtWithExprAction} to
|
317
|
-
# replace erb stmt code to expr code.
|
318
|
-
# @example
|
319
|
-
# # <% form_for post do |f| %>
|
320
|
-
# # <% end %>
|
321
|
-
# # =>
|
322
|
-
# # <%= form_for post do |f| %>
|
323
|
-
# # <% end %>
|
324
|
-
# with_node type: 'block', caller: { type: 'send', receiver: nil, message: 'form_for' } do
|
325
|
-
# replace_erb_stmt_with_expr
|
326
|
-
# end
|
327
|
-
def replace_erb_stmt_with_expr
|
328
|
-
@actions << Rewriter::ReplaceErbStmtWithExprAction.new(self).process
|
275
|
+
@current_mutation.replace(@current_node, *selectors, with: with)
|
329
276
|
end
|
330
277
|
|
331
278
|
# Parse +remove+ dsl, it creates a {Synvert::Core::Rewriter::RemoveAction} to remove current node.
|
@@ -333,8 +280,10 @@ module Synvert::Core
|
|
333
280
|
# with_node type: 'send', message: { in: %w[puts p] } do
|
334
281
|
# remove
|
335
282
|
# end
|
336
|
-
|
337
|
-
|
283
|
+
# @param options [Hash] options.
|
284
|
+
# @option and_comma [Boolean] delete extra comma.
|
285
|
+
def remove(**options)
|
286
|
+
@current_mutation.remove(@current_node, **options)
|
338
287
|
end
|
339
288
|
|
340
289
|
# Parse +delete+ dsl, it creates a {Synvert::Core::Rewriter::DeleteAction} to delete child nodes.
|
@@ -346,8 +295,10 @@ module Synvert::Core
|
|
346
295
|
# delete :receiver, :dot
|
347
296
|
# end
|
348
297
|
# @param selectors [Array<Symbol>] selector names of child node.
|
349
|
-
|
350
|
-
|
298
|
+
# @param options [Hash]
|
299
|
+
# @option and_comma [Boolean] delete extra comma.
|
300
|
+
def delete(*selectors, **options)
|
301
|
+
@current_mutation.delete(@current_node, *selectors, **options)
|
351
302
|
end
|
352
303
|
|
353
304
|
# Parse +wrap+ dsl, it creates a {Synvert::Core::Rewriter::WrapAction} to
|
@@ -364,9 +315,8 @@ module Synvert::Core
|
|
364
315
|
# wrap with: 'module Synvert'
|
365
316
|
# end
|
366
317
|
# @param with [String] code need to be wrapped with.
|
367
|
-
|
368
|
-
|
369
|
-
@actions << Rewriter::WrapAction.new(self, with: with, indent: indent).process
|
318
|
+
def wrap(with:)
|
319
|
+
@current_mutation.wrap(@current_node, with: with)
|
370
320
|
end
|
371
321
|
|
372
322
|
# Parse +warn+ dsl, it creates a {Synvert::Core::Rewriter::Warning} to save warning message.
|
@@ -393,65 +343,69 @@ module Synvert::Core
|
|
393
343
|
#
|
394
344
|
# @param file_path [String]
|
395
345
|
def process_file(file_path)
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
source[action.begin_pos...action.end_pos] = action.rewritten_code
|
346
|
+
puts file_path if Configuration.show_run_process
|
347
|
+
|
348
|
+
@current_file = file_path
|
349
|
+
while true
|
350
|
+
source = read_source(file_path)
|
351
|
+
@current_mutation = NodeMutation.new(source)
|
352
|
+
begin
|
353
|
+
node = parse_code(file_path, source)
|
354
|
+
|
355
|
+
process_with_node(node) do
|
356
|
+
instance_eval(&@block)
|
357
|
+
rescue NoMethodError => e
|
358
|
+
puts [
|
359
|
+
"error: #{e.message}",
|
360
|
+
"file: #{file_path}",
|
361
|
+
"source: #{source}",
|
362
|
+
"line: #{current_node.line}"
|
363
|
+
].join("\n")
|
364
|
+
raise
|
416
365
|
end
|
417
|
-
@actions = []
|
418
366
|
|
419
|
-
|
367
|
+
result = @current_mutation.process
|
368
|
+
if result.affected?
|
369
|
+
@rewriter.add_affected_file(file_path)
|
370
|
+
write_source(file_path, result.new_source)
|
371
|
+
end
|
372
|
+
break unless result.conflicted?
|
373
|
+
rescue Parser::SyntaxError
|
374
|
+
puts "[Warn] file #{file_path} was not parsed correctly."
|
375
|
+
# do nothing, iterate next file
|
420
376
|
end
|
421
|
-
|
422
|
-
puts "[Warn] file #{file_path} was not parsed correctly."
|
423
|
-
# do nothing, iterate next file
|
424
|
-
end while !conflict_actions.empty?
|
377
|
+
end
|
425
378
|
end
|
426
379
|
|
427
|
-
#
|
428
|
-
#
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
end
|
443
|
-
j -= 1
|
444
|
-
end
|
445
|
-
conflict_actions
|
380
|
+
# Read file source.
|
381
|
+
# @param file_path [String] file path
|
382
|
+
# @return [String] file source
|
383
|
+
def read_source(file_path)
|
384
|
+
source = File.read(file_path, encoding: 'UTF-8')
|
385
|
+
source = Engine::Erb.encode(source) if /\.erb$/.match?(file_path)
|
386
|
+
source
|
387
|
+
end
|
388
|
+
|
389
|
+
# Write file source to file.
|
390
|
+
# @param file_path [String] file path
|
391
|
+
# @param source [String] file source
|
392
|
+
def write_source(file_path, source)
|
393
|
+
source = Engine::Erb.decode(source) if /\.erb/.match?(file_path)
|
394
|
+
File.write(file_path, source.gsub(/ +\n/, "\n"))
|
446
395
|
end
|
447
396
|
|
448
|
-
#
|
397
|
+
# Parse code ast node.
|
449
398
|
#
|
450
|
-
# @param file_path [String]
|
451
|
-
# @param
|
452
|
-
|
453
|
-
|
454
|
-
|
399
|
+
# @param file_path [String] file path
|
400
|
+
# @param file_path [String] file path
|
401
|
+
# @return [Node] ast node for file
|
402
|
+
def parse_code(file_path, source)
|
403
|
+
buffer = Parser::Source::Buffer.new file_path
|
404
|
+
buffer.source = source
|
405
|
+
|
406
|
+
parser = Parser::CurrentRuby.new
|
407
|
+
parser.reset
|
408
|
+
parser.parse buffer
|
455
409
|
end
|
456
410
|
end
|
457
411
|
end
|
@@ -23,13 +23,13 @@ module Synvert::Core
|
|
23
23
|
return unless current_node
|
24
24
|
|
25
25
|
@instance.process_with_node(current_node) do
|
26
|
-
NodeQuery
|
26
|
+
NodeQuery.new(@query_string).parse(current_node).each do |node|
|
27
27
|
@instance.process_with_node(node) do
|
28
28
|
@instance.instance_eval(&@block)
|
29
29
|
end
|
30
30
|
end
|
31
31
|
end
|
32
|
-
rescue
|
32
|
+
rescue NodeQueryLexer::ScanError, Racc::ParseError => e
|
33
33
|
raise NodeQuery::Compiler::ParseError, "Invalid query string: #{@query_string}"
|
34
34
|
end
|
35
35
|
end
|
@@ -69,13 +69,13 @@ module Synvert::Core
|
|
69
69
|
matching_nodes = []
|
70
70
|
if current_node.is_a?(Parser::AST::Node)
|
71
71
|
matching_nodes << current_node if current_node.match?(@rules)
|
72
|
-
current_node
|
72
|
+
NodeQuery::Helper.handle_recursive_child(current_node) do |child_node|
|
73
73
|
matching_nodes << child_node if child_node.match?(@rules)
|
74
74
|
end
|
75
75
|
else
|
76
76
|
current_node.each do |node|
|
77
77
|
matching_nodes << node if node.match?(@rules)
|
78
|
-
node
|
78
|
+
NodeQuery::Helper.handle_recursive_child(node) do |child_node|
|
79
79
|
matching_nodes << child_node if child_node.match?(@rules)
|
80
80
|
end
|
81
81
|
end
|
@@ -93,7 +93,7 @@ module Synvert::Core
|
|
93
93
|
matching_nodes << current_node
|
94
94
|
return matching_nodes
|
95
95
|
end
|
96
|
-
current_node
|
96
|
+
NodeQuery::Helper.handle_recursive_child(current_node) do |child_node|
|
97
97
|
if child_node.match?(@rules)
|
98
98
|
matching_nodes << child_node
|
99
99
|
next :stop
|
@@ -105,7 +105,7 @@ module Synvert::Core
|
|
105
105
|
matching_nodes << node
|
106
106
|
next
|
107
107
|
end
|
108
|
-
node
|
108
|
+
NodeQuery::Helper.handle_recursive_child(node) do |child_node|
|
109
109
|
if child_node.match?(@rules)
|
110
110
|
matching_nodes << child_node
|
111
111
|
next :stop
|
@@ -8,17 +8,7 @@ module Synvert::Core
|
|
8
8
|
# One Rewriter checks if the depndency version matches, and it can contain one or many {Synvert::Core::Rewriter::Instance},
|
9
9
|
# which define the behavior what files and what codes to detect and rewrite to what code.
|
10
10
|
class Rewriter
|
11
|
-
autoload :Action, 'synvert/core/rewriter/action'
|
12
|
-
autoload :AppendAction, 'synvert/core/rewriter/action/append_action'
|
13
|
-
autoload :DeleteAction, 'synvert/core/rewriter/action/delete_action'
|
14
|
-
autoload :InsertAction, 'synvert/core/rewriter/action/insert_action'
|
15
|
-
autoload :InsertAfterAction, 'synvert/core/rewriter/action/insert_after_action'
|
16
|
-
autoload :RemoveAction, 'synvert/core/rewriter/action/remove_action'
|
17
|
-
autoload :PrependAction, 'synvert/core/rewriter/action/prepend_action'
|
18
|
-
autoload :ReplaceAction, 'synvert/core/rewriter/action/replace_action'
|
19
11
|
autoload :ReplaceErbStmtWithExprAction, 'synvert/core/rewriter/action/replace_erb_stmt_with_expr_action'
|
20
|
-
autoload :ReplaceWithAction, 'synvert/core/rewriter/action/replace_with_action'
|
21
|
-
autoload :WrapAction, 'synvert/core/rewriter/action/wrap_action'
|
22
12
|
|
23
13
|
autoload :Warning, 'synvert/core/rewriter/warning'
|
24
14
|
|
data/lib/synvert/core/version.rb
CHANGED
data/lib/synvert/core.rb
CHANGED
@@ -4,14 +4,13 @@ require 'synvert/core/version'
|
|
4
4
|
require 'bundler'
|
5
5
|
require 'parser'
|
6
6
|
require 'parser/current'
|
7
|
-
require '
|
7
|
+
require 'parser_node_ext'
|
8
|
+
require_relative './core/node_ext'
|
8
9
|
require 'active_support'
|
9
|
-
require 'active_support/core_ext/object'
|
10
|
-
require 'active_support/core_ext/array'
|
11
10
|
require 'erubis'
|
12
11
|
require 'set'
|
13
|
-
require '
|
14
|
-
require '
|
12
|
+
require 'node_query'
|
13
|
+
require 'node_mutation'
|
15
14
|
|
16
15
|
module Synvert
|
17
16
|
module Core
|
@@ -20,7 +19,6 @@ module Synvert
|
|
20
19
|
autoload :Engine, 'synvert/core/engine'
|
21
20
|
autoload :RewriterNotFound, 'synvert/core/exceptions'
|
22
21
|
autoload :MethodNotSupported, 'synvert/core/exceptions'
|
23
|
-
autoload :NodeQuery, 'synvert/core/node_query'
|
24
22
|
end
|
25
23
|
end
|
26
24
|
|
@@ -3,7 +3,7 @@
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
5
|
module Synvert::Core
|
6
|
-
describe Engine::
|
6
|
+
describe Engine::Erb do
|
7
7
|
it 'encodes / decodes' do
|
8
8
|
source = <<~EOF
|
9
9
|
<%content_for :head do%>
|
@@ -34,14 +34,14 @@ module Synvert::Core
|
|
34
34
|
<% end %>
|
35
35
|
<% end %>
|
36
36
|
EOF
|
37
|
-
encoded_source = Engine::
|
37
|
+
encoded_source = Engine::Erb.encode(source)
|
38
38
|
buffer = Parser::Source::Buffer.new '(test)'
|
39
39
|
buffer.source = encoded_source
|
40
40
|
parser = Parser::CurrentRuby.new
|
41
41
|
parser.reset
|
42
42
|
parser.parse buffer
|
43
43
|
|
44
|
-
expect(Engine::
|
44
|
+
expect(Engine::Erb.decode(encoded_source)).to eq source
|
45
45
|
end
|
46
46
|
end
|
47
47
|
end
|