synvert-core 1.4.0 → 1.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (79) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/main.yml +0 -1
  3. data/.gitignore +0 -5
  4. data/CHANGELOG.md +12 -0
  5. data/Gemfile +0 -3
  6. data/Gemfile.lock +101 -0
  7. data/Guardfile +0 -9
  8. data/README.md +31 -13
  9. data/Rakefile +1 -15
  10. data/lib/synvert/core/engine/erb.rb +1 -1
  11. data/lib/synvert/core/engine.rb +1 -1
  12. data/lib/synvert/core/node_ext.rb +0 -639
  13. data/lib/synvert/core/rewriter/action/replace_erb_stmt_with_expr_action.rb +20 -17
  14. data/lib/synvert/core/rewriter/condition/if_exist_condition.rb +1 -5
  15. data/lib/synvert/core/rewriter/condition/if_only_exist_condition.rb +1 -1
  16. data/lib/synvert/core/rewriter/condition/unless_exist_condition.rb +1 -5
  17. data/lib/synvert/core/rewriter/condition.rb +5 -1
  18. data/lib/synvert/core/rewriter/instance.rb +91 -140
  19. data/lib/synvert/core/rewriter/scope/query_scope.rb +8 -6
  20. data/lib/synvert/core/rewriter/scope/within_scope.rb +4 -87
  21. data/lib/synvert/core/rewriter.rb +0 -10
  22. data/lib/synvert/core/version.rb +1 -1
  23. data/lib/synvert/core.rb +4 -6
  24. data/spec/synvert/core/engine/erb_spec.rb +3 -3
  25. data/spec/synvert/core/node_ext_spec.rb +0 -965
  26. data/spec/synvert/core/rewriter/action/replace_erb_stmt_with_expr_action_spec.rb +21 -1
  27. data/spec/synvert/core/rewriter/instance_spec.rb +64 -131
  28. data/spec/synvert/core/rewriter/scope/goto_scope_spec.rb +1 -4
  29. data/spec/synvert/core/rewriter/scope/query_scope_spec.rb +1 -16
  30. data/spec/synvert/core/rewriter/scope/within_scope_spec.rb +22 -13
  31. data/synvert-core-ruby.gemspec +5 -3
  32. metadata +46 -62
  33. data/lib/synvert/core/array_ext.rb +0 -48
  34. data/lib/synvert/core/node_query/compiler/array.rb +0 -34
  35. data/lib/synvert/core/node_query/compiler/attribute.rb +0 -39
  36. data/lib/synvert/core/node_query/compiler/attribute_list.rb +0 -24
  37. data/lib/synvert/core/node_query/compiler/basic_selector.rb +0 -28
  38. data/lib/synvert/core/node_query/compiler/boolean.rb +0 -23
  39. data/lib/synvert/core/node_query/compiler/comparable.rb +0 -86
  40. data/lib/synvert/core/node_query/compiler/dynamic_attribute.rb +0 -51
  41. data/lib/synvert/core/node_query/compiler/expression.rb +0 -41
  42. data/lib/synvert/core/node_query/compiler/float.rb +0 -23
  43. data/lib/synvert/core/node_query/compiler/identifier.rb +0 -41
  44. data/lib/synvert/core/node_query/compiler/integer.rb +0 -23
  45. data/lib/synvert/core/node_query/compiler/invalid_operator_error.rb +0 -7
  46. data/lib/synvert/core/node_query/compiler/nil.rb +0 -23
  47. data/lib/synvert/core/node_query/compiler/parse_error.rb +0 -7
  48. data/lib/synvert/core/node_query/compiler/regexp.rb +0 -37
  49. data/lib/synvert/core/node_query/compiler/selector.rb +0 -113
  50. data/lib/synvert/core/node_query/compiler/string.rb +0 -23
  51. data/lib/synvert/core/node_query/compiler/symbol.rb +0 -23
  52. data/lib/synvert/core/node_query/compiler.rb +0 -25
  53. data/lib/synvert/core/node_query/lexer.rex +0 -99
  54. data/lib/synvert/core/node_query/lexer.rex.rb +0 -299
  55. data/lib/synvert/core/node_query/parser.racc.rb +0 -306
  56. data/lib/synvert/core/node_query/parser.y +0 -60
  57. data/lib/synvert/core/node_query.rb +0 -36
  58. data/lib/synvert/core/rewriter/action/append_action.rb +0 -28
  59. data/lib/synvert/core/rewriter/action/delete_action.rb +0 -34
  60. data/lib/synvert/core/rewriter/action/insert_action.rb +0 -34
  61. data/lib/synvert/core/rewriter/action/insert_after_action.rb +0 -22
  62. data/lib/synvert/core/rewriter/action/prepend_action.rb +0 -44
  63. data/lib/synvert/core/rewriter/action/remove_action.rb +0 -56
  64. data/lib/synvert/core/rewriter/action/replace_action.rb +0 -33
  65. data/lib/synvert/core/rewriter/action/replace_with_action.rb +0 -36
  66. data/lib/synvert/core/rewriter/action/wrap_action.rb +0 -37
  67. data/lib/synvert/core/rewriter/action.rb +0 -102
  68. data/spec/synvert/core/node_query/lexer_spec.rb +0 -580
  69. data/spec/synvert/core/node_query/parser_spec.rb +0 -337
  70. data/spec/synvert/core/rewriter/action/append_action_spec.rb +0 -70
  71. data/spec/synvert/core/rewriter/action/delete_action_spec.rb +0 -26
  72. data/spec/synvert/core/rewriter/action/insert_action_spec.rb +0 -70
  73. data/spec/synvert/core/rewriter/action/insert_after_action_spec.rb +0 -26
  74. data/spec/synvert/core/rewriter/action/prepend_action_spec.rb +0 -175
  75. data/spec/synvert/core/rewriter/action/remove_action_spec.rb +0 -26
  76. data/spec/synvert/core/rewriter/action/replace_action_spec.rb +0 -28
  77. data/spec/synvert/core/rewriter/action/replace_with_action_spec.rb +0 -59
  78. data/spec/synvert/core/rewriter/action/wrap_action_spec.rb +0 -31
  79. data/spec/synvert/core/rewriter/action_spec.rb +0 -14
@@ -1,37 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Synvert::Core
4
- # WrapAction to warp node within a block, class or module.
5
- #
6
- # Note: if WrapAction is conflicted with another action (begin_pos and end_pos are overlapped),
7
- # we have to put those 2 actions into 2 within_file scopes.
8
- class Rewriter::WrapAction < Rewriter::Action
9
- # Initialize a WrapAction.
10
- #
11
- # @param instance [Synvert::Core::Rewriter::WrapAction]
12
- # @param with [String] new code to wrap
13
- # @param indent [Integer, nil] number of whitespaces
14
- def initialize(instance, with:, indent: nil)
15
- super(instance, with)
16
- @indent = indent || @node.column
17
- end
18
-
19
- # The rewritten source code.
20
- #
21
- # @return [String] rewritten code.
22
- def rewritten_code
23
- "#{@code}\n#{' ' * @indent}" +
24
- @node.to_source.split("\n").map { |line| " #{line}" }
25
- .join("\n") +
26
- "\n#{' ' * @indent}end"
27
- end
28
-
29
- private
30
-
31
- # Calculate the begin the end positions.
32
- def calculate_position
33
- @begin_pos = @node.loc.expression.begin_pos
34
- @end_pos = @node.loc.expression.end_pos
35
- end
36
- end
37
- end
@@ -1,102 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Synvert::Core
4
- # Action defines rewriter action, insert, replace or delete code.
5
- class Rewriter::Action
6
- DEFAULT_INDENT = 2
7
-
8
- # @!attribute [r] begin_pos
9
- # @return [Integer] begin position
10
- # @!attribute [r] end_pos
11
- # @return [Integer] end position
12
- attr_reader :begin_pos, :end_pos
13
-
14
- # Initialize an action.
15
- #
16
- # @param instance [Synvert::Core::Rewriter::Instance]
17
- # @param code [String] new code to insert, replace or delete.
18
- def initialize(instance, code)
19
- @instance = instance
20
- @code = code
21
- @node = @instance.current_node
22
- end
23
-
24
- # Calculate begin and end positions, and return self.
25
- #
26
- # @return [Synvert::Core::Rewriter::Action] self
27
- def process
28
- calculate_position
29
- self
30
- end
31
-
32
- # The rewritten source code with proper indent.
33
- #
34
- # @return [String] rewritten code.
35
- def rewritten_code
36
- if rewritten_source.split("\n").length > 1
37
- "\n\n" + rewritten_source.split("\n").map { |line| indent(@node) + line }
38
- .join("\n")
39
- else
40
- "\n" + indent(@node) + rewritten_source
41
- end
42
- end
43
-
44
- protected
45
-
46
- # Calculate the begin the end positions.
47
- #
48
- # @abstract
49
- def calculate_position
50
- raise NotImplementedError, 'must be implemented by subclasses'
51
- end
52
-
53
- # The rewritten source code.
54
- #
55
- # @return [String] rewritten source code.
56
- def rewritten_source
57
- @rewritten_source ||= @node.rewritten_source(@code)
58
- end
59
-
60
- # Squeeze spaces from source code.
61
- def squeeze_spaces
62
- if file_source[@begin_pos - 1] == ' ' && file_source[@end_pos] == ' '
63
- @begin_pos -= 1
64
- end
65
- end
66
-
67
- # Squeeze empty lines from source code.
68
- def squeeze_lines
69
- lines = file_source.split("\n")
70
- begin_line = @node.loc.expression.first_line
71
- end_line = @node.loc.expression.last_line
72
- before_line_is_blank = begin_line == 1 || lines[begin_line - 2] == ''
73
- after_line_is_blank = lines[end_line] == ''
74
-
75
- if lines.length > 1 && before_line_is_blank && after_line_is_blank
76
- @end_pos += "\n".length
77
- end
78
- end
79
-
80
- # Remove unused comma.
81
- # e.g. `foobar(foo, bar)`, if we remove `foo`, the comma should also be removed,
82
- # the code should be changed to `foobar(bar)`.
83
- def remove_comma
84
- if ',' == file_source[@begin_pos - 1]
85
- @begin_pos -= 1
86
- elsif ', ' == file_source[@begin_pos - 2, 2]
87
- @begin_pos -= 2
88
- elsif ', ' == file_source[@end_pos, 2]
89
- @end_pos += 2
90
- elsif ',' == file_source[@end_pos]
91
- @end_pos += 1
92
- end
93
- end
94
-
95
- # Return file source.
96
- #
97
- # @return [String]
98
- def file_source
99
- @file_source ||= @instance.file_source
100
- end
101
- end
102
- end