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.
Files changed (75) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +0 -4
  3. data/CHANGELOG.md +16 -0
  4. data/Gemfile +0 -3
  5. data/Guardfile +0 -9
  6. data/README.md +30 -12
  7. data/Rakefile +1 -15
  8. data/lib/synvert/core/engine/erb.rb +1 -1
  9. data/lib/synvert/core/engine.rb +1 -1
  10. data/lib/synvert/core/node_ext.rb +0 -466
  11. data/lib/synvert/core/rewriter/action/replace_erb_stmt_with_expr_action.rb +20 -17
  12. data/lib/synvert/core/rewriter/condition/if_exist_condition.rb +1 -1
  13. data/lib/synvert/core/rewriter/condition/unless_exist_condition.rb +1 -1
  14. data/lib/synvert/core/rewriter/instance.rb +89 -135
  15. data/lib/synvert/core/rewriter/scope/query_scope.rb +2 -2
  16. data/lib/synvert/core/rewriter/scope/within_scope.rb +4 -4
  17. data/lib/synvert/core/rewriter.rb +0 -10
  18. data/lib/synvert/core/version.rb +1 -1
  19. data/lib/synvert/core.rb +4 -6
  20. data/spec/synvert/core/engine/erb_spec.rb +3 -3
  21. data/spec/synvert/core/node_ext_spec.rb +0 -795
  22. data/spec/synvert/core/rewriter/action/replace_erb_stmt_with_expr_action_spec.rb +21 -1
  23. data/spec/synvert/core/rewriter/instance_spec.rb +49 -112
  24. data/spec/synvert/core/rewriter/scope/goto_scope_spec.rb +1 -4
  25. data/spec/synvert/core/rewriter/scope/query_scope_spec.rb +8 -4
  26. data/spec/synvert/core/rewriter/scope/within_scope_spec.rb +1 -4
  27. data/synvert-core-ruby.gemspec +4 -2
  28. metadata +44 -61
  29. data/lib/synvert/core/array_ext.rb +0 -48
  30. data/lib/synvert/core/node_query/compiler/array.rb +0 -34
  31. data/lib/synvert/core/node_query/compiler/attribute.rb +0 -39
  32. data/lib/synvert/core/node_query/compiler/attribute_list.rb +0 -24
  33. data/lib/synvert/core/node_query/compiler/boolean.rb +0 -23
  34. data/lib/synvert/core/node_query/compiler/comparable.rb +0 -86
  35. data/lib/synvert/core/node_query/compiler/dynamic_attribute.rb +0 -51
  36. data/lib/synvert/core/node_query/compiler/expression.rb +0 -58
  37. data/lib/synvert/core/node_query/compiler/float.rb +0 -23
  38. data/lib/synvert/core/node_query/compiler/identifier.rb +0 -41
  39. data/lib/synvert/core/node_query/compiler/integer.rb +0 -23
  40. data/lib/synvert/core/node_query/compiler/invalid_operator_error.rb +0 -7
  41. data/lib/synvert/core/node_query/compiler/nil.rb +0 -23
  42. data/lib/synvert/core/node_query/compiler/parse_error.rb +0 -7
  43. data/lib/synvert/core/node_query/compiler/regexp.rb +0 -37
  44. data/lib/synvert/core/node_query/compiler/selector.rb +0 -138
  45. data/lib/synvert/core/node_query/compiler/simple_selector.rb +0 -29
  46. data/lib/synvert/core/node_query/compiler/string.rb +0 -23
  47. data/lib/synvert/core/node_query/compiler/symbol.rb +0 -23
  48. data/lib/synvert/core/node_query/compiler.rb +0 -25
  49. data/lib/synvert/core/node_query/lexer.rex +0 -108
  50. data/lib/synvert/core/node_query/lexer.rex.rb +0 -321
  51. data/lib/synvert/core/node_query/parser.racc.rb +0 -322
  52. data/lib/synvert/core/node_query/parser.y +0 -62
  53. data/lib/synvert/core/node_query.rb +0 -37
  54. data/lib/synvert/core/rewriter/action/append_action.rb +0 -28
  55. data/lib/synvert/core/rewriter/action/delete_action.rb +0 -32
  56. data/lib/synvert/core/rewriter/action/insert_action.rb +0 -34
  57. data/lib/synvert/core/rewriter/action/insert_after_action.rb +0 -22
  58. data/lib/synvert/core/rewriter/action/prepend_action.rb +0 -44
  59. data/lib/synvert/core/rewriter/action/remove_action.rb +0 -53
  60. data/lib/synvert/core/rewriter/action/replace_action.rb +0 -33
  61. data/lib/synvert/core/rewriter/action/replace_with_action.rb +0 -36
  62. data/lib/synvert/core/rewriter/action/wrap_action.rb +0 -37
  63. data/lib/synvert/core/rewriter/action.rb +0 -102
  64. data/spec/synvert/core/node_query/lexer_spec.rb +0 -640
  65. data/spec/synvert/core/node_query/parser_spec.rb +0 -382
  66. data/spec/synvert/core/rewriter/action/append_action_spec.rb +0 -70
  67. data/spec/synvert/core/rewriter/action/delete_action_spec.rb +0 -26
  68. data/spec/synvert/core/rewriter/action/insert_action_spec.rb +0 -70
  69. data/spec/synvert/core/rewriter/action/insert_after_action_spec.rb +0 -26
  70. data/spec/synvert/core/rewriter/action/prepend_action_spec.rb +0 -175
  71. data/spec/synvert/core/rewriter/action/remove_action_spec.rb +0 -26
  72. data/spec/synvert/core/rewriter/action/replace_action_spec.rb +0 -28
  73. data/spec/synvert/core/rewriter/action/replace_with_action_spec.rb +0 -59
  74. data/spec/synvert/core/rewriter/action/wrap_action_spec.rb +0 -31
  75. 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 < Rewriter::Action
7
+ class Rewriter::ReplaceErbStmtWithExprAction < NodeMutation::Action
8
8
  # Initialize a ReplaceErbStmtWithExprAction.
9
9
  #
10
- # @param instance [Synvert::Core::Rewriter::Instance]
11
- def initialize(instance)
12
- super(instance, nil)
10
+ # @param node [Synvert::Core::Rewriter::Node]
11
+ def initialize(node)
12
+ super(node, nil)
13
13
  end
14
14
 
15
- # The rewritten erb expr code.
15
+ # The new erb expr code.
16
16
  #
17
- # @return [String] rewritten code.
18
- def rewritten_code
19
- @node.loc.expression.source_buffer.source[begin_pos...end_pos]
20
- .sub(Engine::ERUBY_STMT_SPLITTER, '@output_buffer.append= ')
21
- .sub(Engine::ERUBY_STMT_SPLITTER, Engine::ERUBY_EXPR_SPLITTER)
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
- node_begin_pos = @node.loc.expression.begin_pos
29
- while @node.loc.expression.source_buffer.source[node_begin_pos -= 1] == ' '
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
- @begin_pos = node_begin_pos - Engine::ERUBY_STMT_SPLITTER.length + 1
35
+ @start = whitespace_index - Engine::ERUBY_STMT_SPLITTER.length + 1
32
36
 
33
- node_begin_pos = @node.loc.expression.begin_pos
34
- node_begin_pos += @node.loc.expression.source.index 'do'
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
- @end_pos = node_begin_pos
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.recursive_children do |child_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.recursive_children do |child_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
- attr_accessor :current_node, :current_file
78
-
79
- # Current file source
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
- @actions << Rewriter::AppendAction.new(self, code).process
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
- @actions << Rewriter::PrependAction.new(self, code).process
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
- @actions << Rewriter::InsertAction.new(self, code, at: at, to: to).process
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
- @actions << Rewriter::InsertAfterAction.new(self, code).process
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
- @actions << Rewriter::ReplaceWithAction.new(self, code).process
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
- @actions << Rewriter::ReplaceAction.new(self, *selectors, with: with).process
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
- def remove
337
- @actions << Rewriter::RemoveAction.new(self).process
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
- def delete(*selectors)
350
- @actions << Rewriter::DeleteAction.new(self, *selectors).process
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
- # @param indent [Integer, nil] number of whitespaces.
368
- def wrap(with:, indent: nil)
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
- begin
397
- puts file_path if Configuration.show_run_process
398
- conflict_actions = []
399
- source = +self.class.file_source(file_path)
400
- ast = self.class.file_ast(file_path)
401
-
402
- @current_file = file_path
403
-
404
- process_with_node(ast) do
405
- instance_eval(&@block)
406
- rescue NoMethodError
407
- puts @current_node.debug_info
408
- raise
409
- end
410
-
411
- if @actions.length > 0
412
- @actions.sort_by! { |action| [action.begin_pos, action.end_pos] }
413
- conflict_actions = get_conflict_actions
414
- @actions.reverse_each do |action|
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
- update_file(file_path, source)
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
- rescue Parser::SyntaxError
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
- # It changes source code from bottom to top, and it can change source code twice at the same time,
428
- # So if there is an overlap between two actions, it removes the conflict actions and operate them in the next loop.
429
- def get_conflict_actions
430
- i = @actions.length - 1
431
- j = i - 1
432
- conflict_actions = []
433
- return if i < 0
434
-
435
- begin_pos = @actions[i].begin_pos
436
- while j > -1
437
- if begin_pos < @actions[j].end_pos
438
- conflict_actions << @actions.delete_at(j)
439
- else
440
- i = j
441
- begin_pos = @actions[i].begin_pos
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
- # It updates a file with new source code.
397
+ # Parse code ast node.
449
398
  #
450
- # @param file_path [String] the file path
451
- # @param source [String] the new source code
452
- def update_file(file_path, source)
453
- self.class.write_file(file_path, source)
454
- @rewriter.add_affected_file(file_path)
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::Parser.new.parse(@query_string).query_nodes(current_node).each do |node|
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 NodeQuery::Lexer::ScanError, Racc::ParseError => e
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.recursive_children do |child_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.recursive_children do |child_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.recursive_children do |child_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.recursive_children do |child_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
 
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Synvert
4
4
  module Core
5
- VERSION = '1.3.0'
5
+ VERSION = '1.5.0'
6
6
  end
7
7
  end
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 'ast'
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 'synvert/core/array_ext'
14
- require 'synvert/core/node_ext'
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::ERB do
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::ERB.encode(source)
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::ERB.decode(encoded_source)).to eq source
44
+ expect(Engine::Erb.decode(encoded_source)).to eq source
45
45
  end
46
46
  end
47
47
  end