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