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.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/lib/refract/basic_visitor.rb +7 -2
- data/lib/refract/converter.rb +197 -23
- data/lib/refract/formatter.rb +146 -80
- data/lib/refract/mutation_visitor.rb +111 -115
- data/lib/refract/nodes/alias_global_variable_node.rb +3 -1
- data/lib/refract/nodes/alias_method_node.rb +3 -1
- data/lib/refract/nodes/alternation_pattern_node.rb +3 -1
- data/lib/refract/nodes/and_node.rb +3 -1
- data/lib/refract/nodes/arguments_node.rb +3 -1
- data/lib/refract/nodes/array_node.rb +3 -1
- data/lib/refract/nodes/array_pattern_node.rb +3 -1
- data/lib/refract/nodes/assoc_node.rb +3 -1
- data/lib/refract/nodes/assoc_splat_node.rb +3 -1
- data/lib/refract/nodes/back_reference_read_node.rb +3 -1
- data/lib/refract/nodes/begin_node.rb +3 -1
- data/lib/refract/nodes/block_argument_node.rb +3 -1
- data/lib/refract/nodes/block_local_variable_node.rb +3 -1
- data/lib/refract/nodes/block_node.rb +3 -1
- data/lib/refract/nodes/block_parameter_node.rb +3 -1
- data/lib/refract/nodes/block_parameters_node.rb +3 -1
- data/lib/refract/nodes/break_node.rb +3 -1
- data/lib/refract/nodes/call_and_write_node.rb +3 -1
- data/lib/refract/nodes/call_node.rb +6 -3
- data/lib/refract/nodes/call_operator_write_node.rb +3 -1
- data/lib/refract/nodes/call_or_write_node.rb +3 -1
- data/lib/refract/nodes/call_target_node.rb +3 -1
- data/lib/refract/nodes/capture_pattern_node.rb +3 -1
- data/lib/refract/nodes/case_match_node.rb +3 -1
- data/lib/refract/nodes/case_node.rb +3 -1
- data/lib/refract/nodes/class_node.rb +3 -1
- data/lib/refract/nodes/class_variable_and_write_node.rb +3 -1
- data/lib/refract/nodes/class_variable_operator_write_node.rb +3 -1
- data/lib/refract/nodes/class_variable_or_write_node.rb +3 -1
- data/lib/refract/nodes/class_variable_read_node.rb +3 -1
- data/lib/refract/nodes/class_variable_target_node.rb +3 -1
- data/lib/refract/nodes/class_variable_write_node.rb +3 -1
- data/lib/refract/nodes/constant_and_write_node.rb +3 -1
- data/lib/refract/nodes/constant_operator_write_node.rb +3 -1
- data/lib/refract/nodes/constant_or_write_node.rb +3 -1
- data/lib/refract/nodes/constant_path_and_write_node.rb +3 -1
- data/lib/refract/nodes/constant_path_node.rb +14 -0
- data/lib/refract/nodes/constant_path_operator_write_node.rb +3 -1
- data/lib/refract/nodes/constant_path_or_write_node.rb +3 -1
- data/lib/refract/nodes/constant_path_target_node.rb +3 -1
- data/lib/refract/nodes/constant_path_write_node.rb +3 -1
- data/lib/refract/nodes/constant_read_node.rb +3 -1
- data/lib/refract/nodes/constant_target_node.rb +3 -1
- data/lib/refract/nodes/constant_write_node.rb +3 -1
- data/lib/refract/nodes/def_node.rb +3 -1
- data/lib/refract/nodes/defined_node.rb +3 -1
- data/lib/refract/nodes/else_node.rb +3 -1
- data/lib/refract/nodes/embedded_statements_node.rb +3 -1
- data/lib/refract/nodes/embedded_variable_node.rb +3 -1
- data/lib/refract/nodes/ensure_node.rb +3 -1
- data/lib/refract/nodes/false_node.rb +3 -0
- data/lib/refract/nodes/find_pattern_node.rb +3 -1
- data/lib/refract/nodes/flip_flop_node.rb +3 -1
- data/lib/refract/nodes/float_node.rb +3 -1
- data/lib/refract/nodes/for_node.rb +3 -1
- data/lib/refract/nodes/forwarding_arguments_node.rb +3 -0
- data/lib/refract/nodes/forwarding_parameter_node.rb +3 -0
- data/lib/refract/nodes/forwarding_super_node.rb +3 -1
- data/lib/refract/nodes/global_variable_and_write_node.rb +3 -1
- data/lib/refract/nodes/global_variable_operator_write_node.rb +3 -1
- data/lib/refract/nodes/global_variable_or_write_node.rb +3 -1
- data/lib/refract/nodes/global_variable_read_node.rb +3 -1
- data/lib/refract/nodes/global_variable_target_node.rb +3 -1
- data/lib/refract/nodes/global_variable_write_node.rb +3 -1
- data/lib/refract/nodes/hash_node.rb +3 -1
- data/lib/refract/nodes/hash_pattern_node.rb +3 -1
- data/lib/refract/nodes/if_node.rb +5 -2
- data/lib/refract/nodes/imaginary_node.rb +3 -1
- data/lib/refract/nodes/implicit_node.rb +3 -1
- data/lib/refract/nodes/implicit_rest_node.rb +3 -0
- data/lib/refract/nodes/in_node.rb +3 -1
- data/lib/refract/nodes/index_and_write_node.rb +3 -1
- data/lib/refract/nodes/index_operator_write_node.rb +3 -1
- data/lib/refract/nodes/index_or_write_node.rb +3 -1
- data/lib/refract/nodes/index_target_node.rb +4 -2
- data/lib/refract/nodes/instance_variable_and_write_node.rb +3 -1
- data/lib/refract/nodes/instance_variable_operator_write_node.rb +3 -1
- data/lib/refract/nodes/instance_variable_or_write_node.rb +3 -1
- data/lib/refract/nodes/instance_variable_read_node.rb +3 -1
- data/lib/refract/nodes/instance_variable_target_node.rb +3 -1
- data/lib/refract/nodes/instance_variable_write_node.rb +3 -1
- data/lib/refract/nodes/integer_node.rb +3 -1
- data/lib/refract/nodes/interpolated_match_last_line_node.rb +3 -1
- data/lib/refract/nodes/interpolated_regular_expression_node.rb +3 -1
- data/lib/refract/nodes/interpolated_string_node.rb +3 -1
- data/lib/refract/nodes/interpolated_symbol_node.rb +3 -1
- data/lib/refract/nodes/interpolated_x_string_node.rb +3 -1
- data/lib/refract/nodes/it_local_variable_read_node.rb +3 -0
- data/lib/refract/nodes/it_parameters_node.rb +3 -0
- data/lib/refract/nodes/keyword_hash_node.rb +3 -1
- data/lib/refract/nodes/keyword_rest_parameter_node.rb +3 -1
- data/lib/refract/nodes/lambda_node.rb +3 -1
- data/lib/refract/nodes/local_variable_and_write_node.rb +3 -1
- data/lib/refract/nodes/local_variable_operator_write_node.rb +3 -1
- data/lib/refract/nodes/local_variable_or_write_node.rb +3 -1
- data/lib/refract/nodes/local_variable_read_node.rb +3 -1
- data/lib/refract/nodes/local_variable_target_node.rb +3 -1
- data/lib/refract/nodes/local_variable_write_node.rb +3 -1
- data/lib/refract/nodes/match_last_line_node.rb +3 -1
- data/lib/refract/nodes/match_predicate_node.rb +3 -1
- data/lib/refract/nodes/match_required_node.rb +3 -1
- data/lib/refract/nodes/match_write_node.rb +3 -1
- data/lib/refract/nodes/missing_node.rb +3 -0
- data/lib/refract/nodes/module_node.rb +3 -1
- data/lib/refract/nodes/multi_target_node.rb +3 -1
- data/lib/refract/nodes/multi_write_node.rb +3 -1
- data/lib/refract/nodes/next_node.rb +3 -1
- data/lib/refract/nodes/nil_node.rb +3 -0
- data/lib/refract/nodes/no_keywords_parameter_node.rb +3 -0
- data/lib/refract/nodes/numbered_parameters_node.rb +3 -0
- data/lib/refract/nodes/numbered_reference_read_node.rb +3 -1
- data/lib/refract/nodes/optional_keyword_parameter_node.rb +3 -1
- data/lib/refract/nodes/optional_parameter_node.rb +3 -1
- data/lib/refract/nodes/or_node.rb +3 -1
- data/lib/refract/nodes/parameters_node.rb +3 -1
- data/lib/refract/nodes/parentheses_node.rb +3 -1
- data/lib/refract/nodes/pinned_expression_node.rb +3 -1
- data/lib/refract/nodes/pinned_variable_node.rb +3 -1
- data/lib/refract/nodes/post_execution_node.rb +3 -1
- data/lib/refract/nodes/pre_execution_node.rb +3 -1
- data/lib/refract/nodes/program_node.rb +4 -2
- data/lib/refract/nodes/range_node.rb +3 -1
- data/lib/refract/nodes/rational_node.rb +3 -1
- data/lib/refract/nodes/redo_node.rb +3 -0
- data/lib/refract/nodes/regular_expression_node.rb +3 -1
- data/lib/refract/nodes/required_keyword_parameter_node.rb +3 -1
- data/lib/refract/nodes/required_parameter_node.rb +3 -1
- data/lib/refract/nodes/rescue_modifier_node.rb +3 -1
- data/lib/refract/nodes/rescue_node.rb +3 -1
- data/lib/refract/nodes/rest_parameter_node.rb +3 -1
- data/lib/refract/nodes/retry_node.rb +3 -0
- data/lib/refract/nodes/return_node.rb +3 -1
- data/lib/refract/nodes/self_node.rb +3 -0
- data/lib/refract/nodes/shareable_constant_node.rb +3 -1
- data/lib/refract/nodes/singleton_class_node.rb +3 -1
- data/lib/refract/nodes/source_encoding_node.rb +3 -0
- data/lib/refract/nodes/source_file_node.rb +3 -0
- data/lib/refract/nodes/source_line_node.rb +3 -0
- data/lib/refract/nodes/splat_node.rb +3 -1
- data/lib/refract/nodes/statements_node.rb +3 -1
- data/lib/refract/nodes/string_node.rb +3 -1
- data/lib/refract/nodes/super_node.rb +3 -1
- data/lib/refract/nodes/symbol_node.rb +5 -2
- data/lib/refract/nodes/true_node.rb +3 -0
- data/lib/refract/nodes/undef_node.rb +3 -1
- data/lib/refract/nodes/unless_node.rb +5 -2
- data/lib/refract/nodes/until_node.rb +5 -2
- data/lib/refract/nodes/when_node.rb +3 -1
- data/lib/refract/nodes/while_node.rb +5 -2
- data/lib/refract/nodes/x_string_node.rb +3 -1
- data/lib/refract/nodes/yield_node.rb +3 -1
- data/lib/refract/version.rb +1 -1
- data/lib/refract/visitor.rb +4 -4
- data/lib/refract.rb +11 -2
- metadata +2 -2
- data/lib/refract/nodes/constant_path.rb +0 -12
data/lib/refract/formatter.rb
CHANGED
@@ -2,17 +2,31 @@
|
|
2
2
|
|
3
3
|
module Refract
|
4
4
|
class Formatter < BasicVisitor
|
5
|
-
|
6
|
-
|
5
|
+
Result = Data.define(:source, :source_map)
|
6
|
+
|
7
|
+
def initialize(starting_line: 1)
|
8
|
+
super()
|
7
9
|
@buffer = []
|
8
10
|
@source_map = []
|
9
|
-
@current_line =
|
11
|
+
@current_line = starting_line
|
10
12
|
@indent = 0
|
11
13
|
end
|
12
14
|
|
15
|
+
def around_visit(node)
|
16
|
+
if (start_line = node.start_line)
|
17
|
+
@source_map[@current_line] = start_line
|
18
|
+
end
|
19
|
+
|
20
|
+
super
|
21
|
+
end
|
22
|
+
|
13
23
|
def format_node(node)
|
14
24
|
visit(node)
|
15
|
-
|
25
|
+
|
26
|
+
Result.new(
|
27
|
+
source: @buffer.join,
|
28
|
+
source_map: @source_map,
|
29
|
+
)
|
16
30
|
end
|
17
31
|
|
18
32
|
visit AliasGlobalVariableNode do |node|
|
@@ -69,7 +83,13 @@ module Refract
|
|
69
83
|
visit AssocNode do |node|
|
70
84
|
case node.key
|
71
85
|
when SymbolNode
|
72
|
-
|
86
|
+
if node.key.quoted
|
87
|
+
doubles do
|
88
|
+
push node.key.unescaped.gsub('"', '\"')
|
89
|
+
end
|
90
|
+
else
|
91
|
+
push node.key.unescaped
|
92
|
+
end
|
73
93
|
push ":"
|
74
94
|
space unless ImplicitNode === node.value
|
75
95
|
visit node.value
|
@@ -90,32 +110,30 @@ module Refract
|
|
90
110
|
end
|
91
111
|
|
92
112
|
visit BeginNode do |node|
|
93
|
-
|
94
|
-
push "begin"
|
95
|
-
|
96
|
-
indent do
|
97
|
-
visit node.statements
|
98
|
-
end
|
113
|
+
push "begin"
|
99
114
|
|
100
|
-
|
115
|
+
indent do
|
116
|
+
visit node.statements
|
117
|
+
end
|
101
118
|
|
102
|
-
|
103
|
-
visit node.rescue_clause
|
104
|
-
new_line
|
105
|
-
end
|
119
|
+
new_line
|
106
120
|
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
121
|
+
if node.rescue_clause
|
122
|
+
visit node.rescue_clause
|
123
|
+
new_line
|
124
|
+
end
|
111
125
|
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
126
|
+
if node.else_clause
|
127
|
+
visit node.else_clause
|
128
|
+
new_line
|
129
|
+
end
|
116
130
|
|
117
|
-
|
131
|
+
if node.ensure_clause
|
132
|
+
visit node.ensure_clause
|
133
|
+
new_line
|
118
134
|
end
|
135
|
+
|
136
|
+
push "end"
|
119
137
|
end
|
120
138
|
|
121
139
|
visit BlockArgumentNode do |node|
|
@@ -187,10 +205,11 @@ module Refract
|
|
187
205
|
visit CallNode do |node|
|
188
206
|
if node.receiver
|
189
207
|
visit node.receiver
|
208
|
+
push "&" if node.safe_navigation
|
190
209
|
push "."
|
191
210
|
end
|
192
211
|
|
193
|
-
push node.
|
212
|
+
push node.name
|
194
213
|
|
195
214
|
case node.block
|
196
215
|
when BlockNode
|
@@ -349,18 +368,18 @@ module Refract
|
|
349
368
|
visit node.value
|
350
369
|
end
|
351
370
|
|
352
|
-
visit ConstantPath do |node|
|
353
|
-
visit node.parent
|
354
|
-
push "::"
|
355
|
-
push node.name
|
356
|
-
end
|
357
|
-
|
358
371
|
visit ConstantPathAndWriteNode do |node|
|
359
372
|
visit node.target
|
360
373
|
push " &&= "
|
361
374
|
visit node.value
|
362
375
|
end
|
363
376
|
|
377
|
+
visit ConstantPathNode do |node|
|
378
|
+
visit node.parent
|
379
|
+
push "::"
|
380
|
+
push node.name
|
381
|
+
end
|
382
|
+
|
364
383
|
visit ConstantPathOperatorWriteNode do |node|
|
365
384
|
visit node.target
|
366
385
|
space
|
@@ -563,25 +582,31 @@ module Refract
|
|
563
582
|
end
|
564
583
|
|
565
584
|
visit IfNode do |node|
|
566
|
-
|
567
|
-
|
568
|
-
push "
|
585
|
+
if node.inline
|
586
|
+
visit node.statements
|
587
|
+
push " if "
|
588
|
+
visit node.predicate
|
569
589
|
else
|
570
|
-
|
571
|
-
|
572
|
-
|
573
|
-
|
574
|
-
|
575
|
-
|
590
|
+
# Check if this is an elsif by looking at the parent
|
591
|
+
if IfNode === @stack[-2]
|
592
|
+
push "elsif "
|
593
|
+
else
|
594
|
+
push "if "
|
595
|
+
end
|
596
|
+
visit node.predicate
|
597
|
+
if node.statements
|
598
|
+
indent do
|
599
|
+
visit node.statements
|
600
|
+
end
|
601
|
+
end
|
602
|
+
if node.subsequent
|
603
|
+
new_line
|
604
|
+
visit node.subsequent
|
605
|
+
end
|
606
|
+
unless IfNode === @stack[-2]
|
607
|
+
new_line
|
608
|
+
push "end"
|
576
609
|
end
|
577
|
-
end
|
578
|
-
if node.subsequent
|
579
|
-
new_line
|
580
|
-
visit node.subsequent
|
581
|
-
end
|
582
|
-
unless IfNode === @stack[-2]
|
583
|
-
new_line
|
584
|
-
push "end"
|
585
610
|
end
|
586
611
|
end
|
587
612
|
|
@@ -1101,7 +1126,7 @@ module Refract
|
|
1101
1126
|
end
|
1102
1127
|
|
1103
1128
|
visit StatementsNode do |node|
|
1104
|
-
visit_each(node.body) { new_line }
|
1129
|
+
visit_each(node.body.flat_map { |n| (Refract::StatementsNode === n) ? n.body : n }) { new_line }
|
1105
1130
|
end
|
1106
1131
|
|
1107
1132
|
visit StringNode do |node|
|
@@ -1112,17 +1137,39 @@ module Refract
|
|
1112
1137
|
|
1113
1138
|
visit SuperNode do |node|
|
1114
1139
|
push "super"
|
1115
|
-
|
1140
|
+
case node.block
|
1141
|
+
when BlockNode
|
1142
|
+
if node.arguments
|
1143
|
+
parens { visit node.arguments }
|
1144
|
+
end
|
1145
|
+
|
1146
|
+
space
|
1147
|
+
visit node.block
|
1148
|
+
when BlockArgumentNode
|
1116
1149
|
parens do
|
1117
|
-
|
1150
|
+
if node.arguments
|
1151
|
+
visit node.arguments
|
1152
|
+
push ", "
|
1153
|
+
end
|
1154
|
+
|
1155
|
+
visit node.block
|
1156
|
+
end
|
1157
|
+
else
|
1158
|
+
if node.arguments
|
1159
|
+
parens { visit node.arguments }
|
1118
1160
|
end
|
1119
1161
|
end
|
1120
|
-
visit node.block if node.block
|
1121
1162
|
end
|
1122
1163
|
|
1123
1164
|
visit SymbolNode do |node|
|
1124
1165
|
push ":"
|
1125
|
-
|
1166
|
+
if node.quoted
|
1167
|
+
doubles do
|
1168
|
+
push node.unescaped.gsub('"', '\"')
|
1169
|
+
end
|
1170
|
+
else
|
1171
|
+
push node.unescaped
|
1172
|
+
end
|
1126
1173
|
end
|
1127
1174
|
|
1128
1175
|
visit TrueNode do |node|
|
@@ -1136,34 +1183,46 @@ module Refract
|
|
1136
1183
|
end
|
1137
1184
|
|
1138
1185
|
visit UnlessNode do |node|
|
1139
|
-
|
1140
|
-
|
1186
|
+
if node.inline
|
1187
|
+
visit node.statements
|
1188
|
+
push " unless "
|
1189
|
+
visit node.predicate
|
1190
|
+
else
|
1191
|
+
push "unless "
|
1192
|
+
visit node.predicate
|
1141
1193
|
|
1142
|
-
|
1143
|
-
|
1144
|
-
|
1194
|
+
if node.statements
|
1195
|
+
indent do
|
1196
|
+
visit node.statements
|
1197
|
+
end
|
1198
|
+
end
|
1199
|
+
|
1200
|
+
if node.else_clause
|
1201
|
+
new_line
|
1202
|
+
visit node.else_clause
|
1145
1203
|
end
|
1146
|
-
end
|
1147
1204
|
|
1148
|
-
if node.else_clause
|
1149
1205
|
new_line
|
1150
|
-
|
1206
|
+
push "end"
|
1151
1207
|
end
|
1152
|
-
|
1153
|
-
new_line
|
1154
|
-
push "end"
|
1155
1208
|
end
|
1156
1209
|
|
1157
1210
|
visit UntilNode do |node|
|
1158
|
-
|
1159
|
-
|
1160
|
-
|
1161
|
-
|
1162
|
-
|
1211
|
+
if node.inline
|
1212
|
+
visit node.statements
|
1213
|
+
push " until "
|
1214
|
+
visit node.predicate
|
1215
|
+
else
|
1216
|
+
push "until "
|
1217
|
+
visit node.predicate
|
1218
|
+
if node.statements
|
1219
|
+
indent do
|
1220
|
+
visit node.statements
|
1221
|
+
end
|
1163
1222
|
end
|
1223
|
+
new_line
|
1224
|
+
push "end"
|
1164
1225
|
end
|
1165
|
-
new_line
|
1166
|
-
push "end"
|
1167
1226
|
end
|
1168
1227
|
|
1169
1228
|
visit WhenNode do |node|
|
@@ -1176,15 +1235,21 @@ module Refract
|
|
1176
1235
|
end
|
1177
1236
|
|
1178
1237
|
visit WhileNode do |node|
|
1179
|
-
|
1180
|
-
|
1181
|
-
|
1182
|
-
|
1183
|
-
|
1238
|
+
if node.inline
|
1239
|
+
visit node.statements
|
1240
|
+
push " while "
|
1241
|
+
visit node.predicate
|
1242
|
+
else
|
1243
|
+
push "while "
|
1244
|
+
visit node.predicate
|
1245
|
+
if node.statements
|
1246
|
+
indent do
|
1247
|
+
visit node.statements
|
1248
|
+
end
|
1184
1249
|
end
|
1250
|
+
new_line
|
1251
|
+
push "end"
|
1185
1252
|
end
|
1186
|
-
new_line
|
1187
|
-
push "end"
|
1188
1253
|
end
|
1189
1254
|
|
1190
1255
|
visit XStringNode do |node|
|
@@ -1218,7 +1283,8 @@ module Refract
|
|
1218
1283
|
end
|
1219
1284
|
|
1220
1285
|
private def new_line
|
1221
|
-
|
1286
|
+
@buffer << "\n#{"\t" * @indent}"
|
1287
|
+
@current_line += 1
|
1222
1288
|
end
|
1223
1289
|
|
1224
1290
|
private def indent
|