refract 1.0.0.beta1 → 1.1.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 (162) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/lib/refract/basic_visitor.rb +7 -2
  4. data/lib/refract/converter.rb +197 -23
  5. data/lib/refract/formatter.rb +146 -80
  6. data/lib/refract/mutation_visitor.rb +111 -115
  7. data/lib/refract/nodes/alias_global_variable_node.rb +3 -1
  8. data/lib/refract/nodes/alias_method_node.rb +3 -1
  9. data/lib/refract/nodes/alternation_pattern_node.rb +3 -1
  10. data/lib/refract/nodes/and_node.rb +3 -1
  11. data/lib/refract/nodes/arguments_node.rb +3 -1
  12. data/lib/refract/nodes/array_node.rb +3 -1
  13. data/lib/refract/nodes/array_pattern_node.rb +3 -1
  14. data/lib/refract/nodes/assoc_node.rb +3 -1
  15. data/lib/refract/nodes/assoc_splat_node.rb +3 -1
  16. data/lib/refract/nodes/back_reference_read_node.rb +3 -1
  17. data/lib/refract/nodes/begin_node.rb +3 -1
  18. data/lib/refract/nodes/block_argument_node.rb +3 -1
  19. data/lib/refract/nodes/block_local_variable_node.rb +3 -1
  20. data/lib/refract/nodes/block_node.rb +3 -1
  21. data/lib/refract/nodes/block_parameter_node.rb +3 -1
  22. data/lib/refract/nodes/block_parameters_node.rb +3 -1
  23. data/lib/refract/nodes/break_node.rb +3 -1
  24. data/lib/refract/nodes/call_and_write_node.rb +3 -1
  25. data/lib/refract/nodes/call_node.rb +6 -3
  26. data/lib/refract/nodes/call_operator_write_node.rb +3 -1
  27. data/lib/refract/nodes/call_or_write_node.rb +3 -1
  28. data/lib/refract/nodes/call_target_node.rb +3 -1
  29. data/lib/refract/nodes/capture_pattern_node.rb +3 -1
  30. data/lib/refract/nodes/case_match_node.rb +3 -1
  31. data/lib/refract/nodes/case_node.rb +3 -1
  32. data/lib/refract/nodes/class_node.rb +3 -1
  33. data/lib/refract/nodes/class_variable_and_write_node.rb +3 -1
  34. data/lib/refract/nodes/class_variable_operator_write_node.rb +3 -1
  35. data/lib/refract/nodes/class_variable_or_write_node.rb +3 -1
  36. data/lib/refract/nodes/class_variable_read_node.rb +3 -1
  37. data/lib/refract/nodes/class_variable_target_node.rb +3 -1
  38. data/lib/refract/nodes/class_variable_write_node.rb +3 -1
  39. data/lib/refract/nodes/constant_and_write_node.rb +3 -1
  40. data/lib/refract/nodes/constant_operator_write_node.rb +3 -1
  41. data/lib/refract/nodes/constant_or_write_node.rb +3 -1
  42. data/lib/refract/nodes/constant_path_and_write_node.rb +3 -1
  43. data/lib/refract/nodes/constant_path_node.rb +14 -0
  44. data/lib/refract/nodes/constant_path_operator_write_node.rb +3 -1
  45. data/lib/refract/nodes/constant_path_or_write_node.rb +3 -1
  46. data/lib/refract/nodes/constant_path_target_node.rb +3 -1
  47. data/lib/refract/nodes/constant_path_write_node.rb +3 -1
  48. data/lib/refract/nodes/constant_read_node.rb +3 -1
  49. data/lib/refract/nodes/constant_target_node.rb +3 -1
  50. data/lib/refract/nodes/constant_write_node.rb +3 -1
  51. data/lib/refract/nodes/def_node.rb +3 -1
  52. data/lib/refract/nodes/defined_node.rb +3 -1
  53. data/lib/refract/nodes/else_node.rb +3 -1
  54. data/lib/refract/nodes/embedded_statements_node.rb +3 -1
  55. data/lib/refract/nodes/embedded_variable_node.rb +3 -1
  56. data/lib/refract/nodes/ensure_node.rb +3 -1
  57. data/lib/refract/nodes/false_node.rb +3 -0
  58. data/lib/refract/nodes/find_pattern_node.rb +3 -1
  59. data/lib/refract/nodes/flip_flop_node.rb +3 -1
  60. data/lib/refract/nodes/float_node.rb +3 -1
  61. data/lib/refract/nodes/for_node.rb +3 -1
  62. data/lib/refract/nodes/forwarding_arguments_node.rb +3 -0
  63. data/lib/refract/nodes/forwarding_parameter_node.rb +3 -0
  64. data/lib/refract/nodes/forwarding_super_node.rb +3 -1
  65. data/lib/refract/nodes/global_variable_and_write_node.rb +3 -1
  66. data/lib/refract/nodes/global_variable_operator_write_node.rb +3 -1
  67. data/lib/refract/nodes/global_variable_or_write_node.rb +3 -1
  68. data/lib/refract/nodes/global_variable_read_node.rb +3 -1
  69. data/lib/refract/nodes/global_variable_target_node.rb +3 -1
  70. data/lib/refract/nodes/global_variable_write_node.rb +3 -1
  71. data/lib/refract/nodes/hash_node.rb +3 -1
  72. data/lib/refract/nodes/hash_pattern_node.rb +3 -1
  73. data/lib/refract/nodes/if_node.rb +5 -2
  74. data/lib/refract/nodes/imaginary_node.rb +3 -1
  75. data/lib/refract/nodes/implicit_node.rb +3 -1
  76. data/lib/refract/nodes/implicit_rest_node.rb +3 -0
  77. data/lib/refract/nodes/in_node.rb +3 -1
  78. data/lib/refract/nodes/index_and_write_node.rb +3 -1
  79. data/lib/refract/nodes/index_operator_write_node.rb +3 -1
  80. data/lib/refract/nodes/index_or_write_node.rb +3 -1
  81. data/lib/refract/nodes/index_target_node.rb +4 -2
  82. data/lib/refract/nodes/instance_variable_and_write_node.rb +3 -1
  83. data/lib/refract/nodes/instance_variable_operator_write_node.rb +3 -1
  84. data/lib/refract/nodes/instance_variable_or_write_node.rb +3 -1
  85. data/lib/refract/nodes/instance_variable_read_node.rb +3 -1
  86. data/lib/refract/nodes/instance_variable_target_node.rb +3 -1
  87. data/lib/refract/nodes/instance_variable_write_node.rb +3 -1
  88. data/lib/refract/nodes/integer_node.rb +3 -1
  89. data/lib/refract/nodes/interpolated_match_last_line_node.rb +3 -1
  90. data/lib/refract/nodes/interpolated_regular_expression_node.rb +3 -1
  91. data/lib/refract/nodes/interpolated_string_node.rb +3 -1
  92. data/lib/refract/nodes/interpolated_symbol_node.rb +3 -1
  93. data/lib/refract/nodes/interpolated_x_string_node.rb +3 -1
  94. data/lib/refract/nodes/it_local_variable_read_node.rb +3 -0
  95. data/lib/refract/nodes/it_parameters_node.rb +3 -0
  96. data/lib/refract/nodes/keyword_hash_node.rb +3 -1
  97. data/lib/refract/nodes/keyword_rest_parameter_node.rb +3 -1
  98. data/lib/refract/nodes/lambda_node.rb +3 -1
  99. data/lib/refract/nodes/local_variable_and_write_node.rb +3 -1
  100. data/lib/refract/nodes/local_variable_operator_write_node.rb +3 -1
  101. data/lib/refract/nodes/local_variable_or_write_node.rb +3 -1
  102. data/lib/refract/nodes/local_variable_read_node.rb +3 -1
  103. data/lib/refract/nodes/local_variable_target_node.rb +3 -1
  104. data/lib/refract/nodes/local_variable_write_node.rb +3 -1
  105. data/lib/refract/nodes/match_last_line_node.rb +3 -1
  106. data/lib/refract/nodes/match_predicate_node.rb +3 -1
  107. data/lib/refract/nodes/match_required_node.rb +3 -1
  108. data/lib/refract/nodes/match_write_node.rb +3 -1
  109. data/lib/refract/nodes/missing_node.rb +3 -0
  110. data/lib/refract/nodes/module_node.rb +3 -1
  111. data/lib/refract/nodes/multi_target_node.rb +3 -1
  112. data/lib/refract/nodes/multi_write_node.rb +3 -1
  113. data/lib/refract/nodes/next_node.rb +3 -1
  114. data/lib/refract/nodes/nil_node.rb +3 -0
  115. data/lib/refract/nodes/no_keywords_parameter_node.rb +3 -0
  116. data/lib/refract/nodes/numbered_parameters_node.rb +3 -0
  117. data/lib/refract/nodes/numbered_reference_read_node.rb +3 -1
  118. data/lib/refract/nodes/optional_keyword_parameter_node.rb +3 -1
  119. data/lib/refract/nodes/optional_parameter_node.rb +3 -1
  120. data/lib/refract/nodes/or_node.rb +3 -1
  121. data/lib/refract/nodes/parameters_node.rb +3 -1
  122. data/lib/refract/nodes/parentheses_node.rb +3 -1
  123. data/lib/refract/nodes/pinned_expression_node.rb +3 -1
  124. data/lib/refract/nodes/pinned_variable_node.rb +3 -1
  125. data/lib/refract/nodes/post_execution_node.rb +3 -1
  126. data/lib/refract/nodes/pre_execution_node.rb +3 -1
  127. data/lib/refract/nodes/program_node.rb +4 -2
  128. data/lib/refract/nodes/range_node.rb +3 -1
  129. data/lib/refract/nodes/rational_node.rb +3 -1
  130. data/lib/refract/nodes/redo_node.rb +3 -0
  131. data/lib/refract/nodes/regular_expression_node.rb +3 -1
  132. data/lib/refract/nodes/required_keyword_parameter_node.rb +3 -1
  133. data/lib/refract/nodes/required_parameter_node.rb +3 -1
  134. data/lib/refract/nodes/rescue_modifier_node.rb +3 -1
  135. data/lib/refract/nodes/rescue_node.rb +3 -1
  136. data/lib/refract/nodes/rest_parameter_node.rb +3 -1
  137. data/lib/refract/nodes/retry_node.rb +3 -0
  138. data/lib/refract/nodes/return_node.rb +3 -1
  139. data/lib/refract/nodes/self_node.rb +3 -0
  140. data/lib/refract/nodes/shareable_constant_node.rb +3 -1
  141. data/lib/refract/nodes/singleton_class_node.rb +3 -1
  142. data/lib/refract/nodes/source_encoding_node.rb +3 -0
  143. data/lib/refract/nodes/source_file_node.rb +3 -0
  144. data/lib/refract/nodes/source_line_node.rb +3 -0
  145. data/lib/refract/nodes/splat_node.rb +3 -1
  146. data/lib/refract/nodes/statements_node.rb +3 -1
  147. data/lib/refract/nodes/string_node.rb +3 -1
  148. data/lib/refract/nodes/super_node.rb +3 -1
  149. data/lib/refract/nodes/symbol_node.rb +5 -2
  150. data/lib/refract/nodes/true_node.rb +3 -0
  151. data/lib/refract/nodes/undef_node.rb +3 -1
  152. data/lib/refract/nodes/unless_node.rb +5 -2
  153. data/lib/refract/nodes/until_node.rb +5 -2
  154. data/lib/refract/nodes/when_node.rb +3 -1
  155. data/lib/refract/nodes/while_node.rb +5 -2
  156. data/lib/refract/nodes/x_string_node.rb +3 -1
  157. data/lib/refract/nodes/yield_node.rb +3 -1
  158. data/lib/refract/version.rb +1 -1
  159. data/lib/refract/visitor.rb +4 -4
  160. data/lib/refract.rb +11 -2
  161. metadata +2 -2
  162. data/lib/refract/nodes/constant_path.rb +0 -12
@@ -2,8 +2,10 @@
2
2
 
3
3
  module Refract
4
4
  class UndefNode < Node
5
- def initialize(names:)
5
+ def initialize(prism_node: nil, names:)
6
+ @prism_node = prism_node => Prism::Node | nil
6
7
  @names = names
8
+ freeze
7
9
  end
8
10
 
9
11
  attr_accessor :names
@@ -2,12 +2,15 @@
2
2
 
3
3
  module Refract
4
4
  class UnlessNode < Node
5
- def initialize(predicate:, statements:, else_clause:)
5
+ def initialize(prism_node: nil, predicate:, statements:, else_clause:, inline:)
6
+ @prism_node = prism_node => Prism::Node | nil
6
7
  @predicate = predicate
7
8
  @statements = statements
8
9
  @else_clause = else_clause
10
+ @inline = inline
11
+ freeze
9
12
  end
10
13
 
11
- attr_accessor :predicate, :statements, :else_clause
14
+ attr_accessor :predicate, :statements, :else_clause, :inline
12
15
  end
13
16
  end
@@ -2,11 +2,14 @@
2
2
 
3
3
  module Refract
4
4
  class UntilNode < Node
5
- def initialize(predicate:, statements:)
5
+ def initialize(prism_node: nil, predicate:, statements:, inline:)
6
+ @prism_node = prism_node => Prism::Node | nil
6
7
  @predicate = predicate
7
8
  @statements = statements
9
+ @inline = inline
10
+ freeze
8
11
  end
9
12
 
10
- attr_accessor :predicate, :statements
13
+ attr_accessor :predicate, :statements, :inline
11
14
  end
12
15
  end
@@ -2,9 +2,11 @@
2
2
 
3
3
  module Refract
4
4
  class WhenNode < Node
5
- def initialize(conditions:, statements:)
5
+ def initialize(prism_node: nil, conditions:, statements:)
6
+ @prism_node = prism_node => Prism::Node | nil
6
7
  @conditions = conditions
7
8
  @statements = statements
9
+ freeze
8
10
  end
9
11
 
10
12
  attr_accessor :conditions, :statements
@@ -2,11 +2,14 @@
2
2
 
3
3
  module Refract
4
4
  class WhileNode < Node
5
- def initialize(predicate:, statements:)
5
+ def initialize(prism_node: nil, predicate:, statements:, inline:)
6
+ @prism_node = prism_node => Prism::Node | nil
6
7
  @predicate = predicate
7
8
  @statements = statements
9
+ @inline = inline
10
+ freeze
8
11
  end
9
12
 
10
- attr_accessor :predicate, :statements
13
+ attr_accessor :predicate, :statements, :inline
11
14
  end
12
15
  end
@@ -2,8 +2,10 @@
2
2
 
3
3
  module Refract
4
4
  class XStringNode < Node
5
- def initialize(unescaped:)
5
+ def initialize(prism_node: nil, unescaped:)
6
+ @prism_node = prism_node => Prism::Node | nil
6
7
  @unescaped = unescaped
8
+ freeze
7
9
  end
8
10
 
9
11
  attr_accessor :unescaped
@@ -2,8 +2,10 @@
2
2
 
3
3
  module Refract
4
4
  class YieldNode < Node
5
- def initialize(arguments:)
5
+ def initialize(prism_node: nil, arguments:)
6
+ @prism_node = prism_node => Prism::Node | nil
6
7
  @arguments = arguments
8
+ freeze
7
9
  end
8
10
 
9
11
  attr_accessor :arguments
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Refract
4
- VERSION = "1.0.0.beta1"
4
+ VERSION = "1.1.0"
5
5
  end
@@ -166,15 +166,15 @@ module Refract
166
166
  visit node.value
167
167
  end
168
168
 
169
- visit ConstantPath do |node|
170
- visit node.parent
171
- end
172
-
173
169
  visit ConstantPathAndWriteNode do |node|
174
170
  visit node.target
175
171
  visit node.value
176
172
  end
177
173
 
174
+ visit ConstantPathNode do |node|
175
+ visit node.parent
176
+ end
177
+
178
178
  visit ConstantPathOperatorWriteNode do |node|
179
179
  visit node.target
180
180
  visit node.value
data/lib/refract.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "zeitwerk"
4
+
4
5
  module Refract
5
6
  Loader = Zeitwerk::Loader.for_gem.tap do |loader|
6
7
  loader.ignore("#{__dir__}/ruby_lsp")
@@ -33,10 +34,18 @@ module Refract
33
34
  accept(visitor)
34
35
  end
35
36
 
36
- def update(**props)
37
+ def start_line
38
+ @prism_node&.location&.start_line
39
+ end
40
+
41
+ def copy(**props)
42
+ duplicate = dup
43
+
37
44
  props.each do |k, v|
38
- public_send("#{k}=", v)
45
+ duplicate.public_send("#{k}=", v)
39
46
  end
47
+
48
+ duplicate.freeze
40
49
  end
41
50
  end
42
51
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: refract
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.beta1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joel Drapper
@@ -86,8 +86,8 @@ files:
86
86
  - lib/refract/nodes/constant_and_write_node.rb
87
87
  - lib/refract/nodes/constant_operator_write_node.rb
88
88
  - lib/refract/nodes/constant_or_write_node.rb
89
- - lib/refract/nodes/constant_path.rb
90
89
  - lib/refract/nodes/constant_path_and_write_node.rb
90
+ - lib/refract/nodes/constant_path_node.rb
91
91
  - lib/refract/nodes/constant_path_operator_write_node.rb
92
92
  - lib/refract/nodes/constant_path_or_write_node.rb
93
93
  - lib/refract/nodes/constant_path_target_node.rb
@@ -1,12 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Refract
4
- class ConstantPath < Node
5
- def initialize(parent:, name:)
6
- @parent = parent
7
- @name = name
8
- end
9
-
10
- attr_accessor :parent, :name
11
- end
12
- end