herb 0.9.0-arm-linux-gnu → 0.9.1-arm-linux-gnu
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/config.yml +156 -0
- data/ext/herb/error_helpers.c +168 -0
- data/ext/herb/extension.c +4 -0
- data/ext/herb/extension_helpers.c +1 -0
- data/ext/herb/nodes.c +110 -0
- data/lib/herb/3.0/herb.so +0 -0
- data/lib/herb/3.1/herb.so +0 -0
- data/lib/herb/3.2/herb.so +0 -0
- data/lib/herb/3.3/herb.so +0 -0
- data/lib/herb/3.4/herb.so +0 -0
- data/lib/herb/4.0/herb.so +0 -0
- data/lib/herb/ast/nodes.rb +393 -17
- data/lib/herb/engine.rb +55 -26
- data/lib/herb/errors.rb +245 -0
- data/lib/herb/parser_options.rb +6 -1
- data/lib/herb/prism_inspect.rb +5 -1
- data/lib/herb/version.rb +1 -1
- data/lib/herb/visitor.rb +10 -0
- data/sig/herb/ast/nodes.rbs +132 -0
- data/sig/herb/engine.rbs +4 -0
- data/sig/herb/errors.rbs +114 -0
- data/sig/herb/parser_options.rbs +4 -0
- data/sig/herb/visitor.rbs +6 -0
- data/sig/rubyvm.rbs +5 -0
- data/sig/serialized_ast_errors.rbs +28 -0
- data/sig/serialized_ast_nodes.rbs +31 -0
- data/src/analyze/action_view/attribute_extraction_helpers.c +14 -1
- data/src/analyze/action_view/content_tag.c +19 -11
- data/src/analyze/action_view/link_to.c +25 -1
- data/src/analyze/action_view/registry.c +23 -0
- data/src/analyze/action_view/tag.c +14 -8
- data/src/analyze/action_view/tag_helpers.c +78 -11
- data/src/analyze/analyze.c +3 -0
- data/src/analyze/prism_annotate.c +4 -2
- data/src/analyze/render_nodes.c +761 -0
- data/src/analyze/transform.c +7 -0
- data/src/ast_nodes.c +97 -0
- data/src/ast_pretty_print.c +74 -0
- data/src/errors.c +379 -0
- data/src/include/analyze/action_view/tag_helper_handler.h +2 -0
- data/src/include/analyze/render_nodes.h +11 -0
- data/src/include/ast_nodes.h +37 -0
- data/src/include/errors.h +58 -0
- data/src/include/parser.h +1 -0
- data/src/include/version.h +1 -1
- data/src/parser.c +1 -0
- data/src/parser_match_tags.c +20 -0
- data/src/visitor.c +20 -0
- data/templates/lib/herb/ast/nodes.rb.erb +8 -2
- data/templates/rust/src/ast/nodes.rs.erb +1 -1
- data/templates/rust/src/nodes.rs.erb +1 -1
- metadata +4 -1
data/lib/herb/errors.rb
CHANGED
|
@@ -1013,5 +1013,250 @@ module Herb
|
|
|
1013
1013
|
end
|
|
1014
1014
|
end
|
|
1015
1015
|
|
|
1016
|
+
class RenderAmbiguousLocalsError < Error
|
|
1017
|
+
include Colors
|
|
1018
|
+
|
|
1019
|
+
#| partial: String?,
|
|
1020
|
+
#| }
|
|
1021
|
+
|
|
1022
|
+
attr_reader :partial #: String?
|
|
1023
|
+
|
|
1024
|
+
#: (String, Location?, String, String) -> void
|
|
1025
|
+
def initialize(type, location, message, partial)
|
|
1026
|
+
super(type, location, message)
|
|
1027
|
+
@partial = partial
|
|
1028
|
+
end
|
|
1029
|
+
|
|
1030
|
+
#: () -> String
|
|
1031
|
+
def inspect
|
|
1032
|
+
tree_inspect.rstrip.gsub(/\s+$/, "")
|
|
1033
|
+
end
|
|
1034
|
+
|
|
1035
|
+
#: () -> serialized_render_ambiguous_locals_error
|
|
1036
|
+
def to_hash
|
|
1037
|
+
super.merge(
|
|
1038
|
+
partial: partial
|
|
1039
|
+
) #: Herb::serialized_render_ambiguous_locals_error
|
|
1040
|
+
end
|
|
1041
|
+
|
|
1042
|
+
#: (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String
|
|
1043
|
+
def tree_inspect(indent: 0, depth: 0, depth_limit: 25)
|
|
1044
|
+
output = +""
|
|
1045
|
+
|
|
1046
|
+
output += white("@ #{bold(red(error_name))} #{dimmed("(location: #{location&.tree_inspect})\n")}")
|
|
1047
|
+
output += white("├── message: #{green(message.inspect)}\n")
|
|
1048
|
+
output += white("└── partial: #{green(partial.inspect)}\n")
|
|
1049
|
+
output += %(\n)
|
|
1050
|
+
|
|
1051
|
+
output.gsub(/^/, " " * indent)
|
|
1052
|
+
end
|
|
1053
|
+
end
|
|
1054
|
+
|
|
1055
|
+
class RenderMissingLocalsError < Error
|
|
1056
|
+
include Colors
|
|
1057
|
+
|
|
1058
|
+
#| partial: String?,
|
|
1059
|
+
#| keywords: String?,
|
|
1060
|
+
#| }
|
|
1061
|
+
|
|
1062
|
+
attr_reader :partial #: String?
|
|
1063
|
+
attr_reader :keywords #: String?
|
|
1064
|
+
|
|
1065
|
+
#: (String, Location?, String, String, String) -> void
|
|
1066
|
+
def initialize(type, location, message, partial, keywords)
|
|
1067
|
+
super(type, location, message)
|
|
1068
|
+
@partial = partial
|
|
1069
|
+
@keywords = keywords
|
|
1070
|
+
end
|
|
1071
|
+
|
|
1072
|
+
#: () -> String
|
|
1073
|
+
def inspect
|
|
1074
|
+
tree_inspect.rstrip.gsub(/\s+$/, "")
|
|
1075
|
+
end
|
|
1076
|
+
|
|
1077
|
+
#: () -> serialized_render_missing_locals_error
|
|
1078
|
+
def to_hash
|
|
1079
|
+
super.merge(
|
|
1080
|
+
partial: partial,
|
|
1081
|
+
keywords: keywords
|
|
1082
|
+
) #: Herb::serialized_render_missing_locals_error
|
|
1083
|
+
end
|
|
1084
|
+
|
|
1085
|
+
#: (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String
|
|
1086
|
+
def tree_inspect(indent: 0, depth: 0, depth_limit: 25)
|
|
1087
|
+
output = +""
|
|
1088
|
+
|
|
1089
|
+
output += white("@ #{bold(red(error_name))} #{dimmed("(location: #{location&.tree_inspect})\n")}")
|
|
1090
|
+
output += white("├── message: #{green(message.inspect)}\n")
|
|
1091
|
+
output += white("├── partial: #{green(partial.inspect)}\n")
|
|
1092
|
+
output += white("└── keywords: #{green(keywords.inspect)}\n")
|
|
1093
|
+
output += %(\n)
|
|
1094
|
+
|
|
1095
|
+
output.gsub(/^/, " " * indent)
|
|
1096
|
+
end
|
|
1097
|
+
end
|
|
1098
|
+
|
|
1099
|
+
class RenderNoArgumentsError < Error
|
|
1100
|
+
include Colors
|
|
1101
|
+
|
|
1102
|
+
#: () -> String
|
|
1103
|
+
def inspect
|
|
1104
|
+
tree_inspect.rstrip.gsub(/\s+$/, "")
|
|
1105
|
+
end
|
|
1106
|
+
|
|
1107
|
+
#: (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String
|
|
1108
|
+
def tree_inspect(indent: 0, depth: 0, depth_limit: 25)
|
|
1109
|
+
output = +""
|
|
1110
|
+
|
|
1111
|
+
output += white("@ #{bold(red(error_name))} #{dimmed("(location: #{location&.tree_inspect})\n")}")
|
|
1112
|
+
output += white("└── message: #{green(message.inspect)}\n")
|
|
1113
|
+
output += %(\n)
|
|
1114
|
+
|
|
1115
|
+
output.gsub(/^/, " " * indent)
|
|
1116
|
+
end
|
|
1117
|
+
end
|
|
1118
|
+
|
|
1119
|
+
class RenderConflictingPartialError < Error
|
|
1120
|
+
include Colors
|
|
1121
|
+
|
|
1122
|
+
#| positional_partial: String?,
|
|
1123
|
+
#| keyword_partial: String?,
|
|
1124
|
+
#| }
|
|
1125
|
+
|
|
1126
|
+
attr_reader :positional_partial #: String?
|
|
1127
|
+
attr_reader :keyword_partial #: String?
|
|
1128
|
+
|
|
1129
|
+
#: (String, Location?, String, String, String) -> void
|
|
1130
|
+
def initialize(type, location, message, positional_partial, keyword_partial)
|
|
1131
|
+
super(type, location, message)
|
|
1132
|
+
@positional_partial = positional_partial
|
|
1133
|
+
@keyword_partial = keyword_partial
|
|
1134
|
+
end
|
|
1135
|
+
|
|
1136
|
+
#: () -> String
|
|
1137
|
+
def inspect
|
|
1138
|
+
tree_inspect.rstrip.gsub(/\s+$/, "")
|
|
1139
|
+
end
|
|
1140
|
+
|
|
1141
|
+
#: () -> serialized_render_conflicting_partial_error
|
|
1142
|
+
def to_hash
|
|
1143
|
+
super.merge(
|
|
1144
|
+
positional_partial: positional_partial,
|
|
1145
|
+
keyword_partial: keyword_partial
|
|
1146
|
+
) #: Herb::serialized_render_conflicting_partial_error
|
|
1147
|
+
end
|
|
1148
|
+
|
|
1149
|
+
#: (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String
|
|
1150
|
+
def tree_inspect(indent: 0, depth: 0, depth_limit: 25)
|
|
1151
|
+
output = +""
|
|
1152
|
+
|
|
1153
|
+
output += white("@ #{bold(red(error_name))} #{dimmed("(location: #{location&.tree_inspect})\n")}")
|
|
1154
|
+
output += white("├── message: #{green(message.inspect)}\n")
|
|
1155
|
+
output += white("├── positional_partial: #{green(positional_partial.inspect)}\n")
|
|
1156
|
+
output += white("└── keyword_partial: #{green(keyword_partial.inspect)}\n")
|
|
1157
|
+
output += %(\n)
|
|
1158
|
+
|
|
1159
|
+
output.gsub(/^/, " " * indent)
|
|
1160
|
+
end
|
|
1161
|
+
end
|
|
1162
|
+
|
|
1163
|
+
class RenderInvalidAsOptionError < Error
|
|
1164
|
+
include Colors
|
|
1165
|
+
|
|
1166
|
+
#| as_value: String?,
|
|
1167
|
+
#| }
|
|
1168
|
+
|
|
1169
|
+
attr_reader :as_value #: String?
|
|
1170
|
+
|
|
1171
|
+
#: (String, Location?, String, String) -> void
|
|
1172
|
+
def initialize(type, location, message, as_value)
|
|
1173
|
+
super(type, location, message)
|
|
1174
|
+
@as_value = as_value
|
|
1175
|
+
end
|
|
1176
|
+
|
|
1177
|
+
#: () -> String
|
|
1178
|
+
def inspect
|
|
1179
|
+
tree_inspect.rstrip.gsub(/\s+$/, "")
|
|
1180
|
+
end
|
|
1181
|
+
|
|
1182
|
+
#: () -> serialized_render_invalid_as_option_error
|
|
1183
|
+
def to_hash
|
|
1184
|
+
super.merge(
|
|
1185
|
+
as_value: as_value
|
|
1186
|
+
) #: Herb::serialized_render_invalid_as_option_error
|
|
1187
|
+
end
|
|
1188
|
+
|
|
1189
|
+
#: (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String
|
|
1190
|
+
def tree_inspect(indent: 0, depth: 0, depth_limit: 25)
|
|
1191
|
+
output = +""
|
|
1192
|
+
|
|
1193
|
+
output += white("@ #{bold(red(error_name))} #{dimmed("(location: #{location&.tree_inspect})\n")}")
|
|
1194
|
+
output += white("├── message: #{green(message.inspect)}\n")
|
|
1195
|
+
output += white("└── as_value: #{green(as_value.inspect)}\n")
|
|
1196
|
+
output += %(\n)
|
|
1197
|
+
|
|
1198
|
+
output.gsub(/^/, " " * indent)
|
|
1199
|
+
end
|
|
1200
|
+
end
|
|
1201
|
+
|
|
1202
|
+
class RenderObjectAndCollectionError < Error
|
|
1203
|
+
include Colors
|
|
1204
|
+
|
|
1205
|
+
#: () -> String
|
|
1206
|
+
def inspect
|
|
1207
|
+
tree_inspect.rstrip.gsub(/\s+$/, "")
|
|
1208
|
+
end
|
|
1209
|
+
|
|
1210
|
+
#: (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String
|
|
1211
|
+
def tree_inspect(indent: 0, depth: 0, depth_limit: 25)
|
|
1212
|
+
output = +""
|
|
1213
|
+
|
|
1214
|
+
output += white("@ #{bold(red(error_name))} #{dimmed("(location: #{location&.tree_inspect})\n")}")
|
|
1215
|
+
output += white("└── message: #{green(message.inspect)}\n")
|
|
1216
|
+
output += %(\n)
|
|
1217
|
+
|
|
1218
|
+
output.gsub(/^/, " " * indent)
|
|
1219
|
+
end
|
|
1220
|
+
end
|
|
1221
|
+
|
|
1222
|
+
class RenderLayoutWithoutBlockError < Error
|
|
1223
|
+
include Colors
|
|
1224
|
+
|
|
1225
|
+
#| layout: String?,
|
|
1226
|
+
#| }
|
|
1227
|
+
|
|
1228
|
+
attr_reader :layout #: String?
|
|
1229
|
+
|
|
1230
|
+
#: (String, Location?, String, String) -> void
|
|
1231
|
+
def initialize(type, location, message, layout)
|
|
1232
|
+
super(type, location, message)
|
|
1233
|
+
@layout = layout
|
|
1234
|
+
end
|
|
1235
|
+
|
|
1236
|
+
#: () -> String
|
|
1237
|
+
def inspect
|
|
1238
|
+
tree_inspect.rstrip.gsub(/\s+$/, "")
|
|
1239
|
+
end
|
|
1240
|
+
|
|
1241
|
+
#: () -> serialized_render_layout_without_block_error
|
|
1242
|
+
def to_hash
|
|
1243
|
+
super.merge(
|
|
1244
|
+
layout: layout
|
|
1245
|
+
) #: Herb::serialized_render_layout_without_block_error
|
|
1246
|
+
end
|
|
1247
|
+
|
|
1248
|
+
#: (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String
|
|
1249
|
+
def tree_inspect(indent: 0, depth: 0, depth_limit: 25)
|
|
1250
|
+
output = +""
|
|
1251
|
+
|
|
1252
|
+
output += white("@ #{bold(red(error_name))} #{dimmed("(location: #{location&.tree_inspect})\n")}")
|
|
1253
|
+
output += white("├── message: #{green(message.inspect)}\n")
|
|
1254
|
+
output += white("└── layout: #{green(layout.inspect)}\n")
|
|
1255
|
+
output += %(\n)
|
|
1256
|
+
|
|
1257
|
+
output.gsub(/^/, " " * indent)
|
|
1258
|
+
end
|
|
1259
|
+
end
|
|
1260
|
+
|
|
1016
1261
|
end
|
|
1017
1262
|
end
|
data/lib/herb/parser_options.rb
CHANGED
|
@@ -6,6 +6,7 @@ module Herb
|
|
|
6
6
|
attr_reader :track_whitespace #: bool
|
|
7
7
|
attr_reader :analyze #: bool
|
|
8
8
|
attr_reader :action_view_helpers #: bool
|
|
9
|
+
attr_reader :render_nodes #: bool
|
|
9
10
|
attr_reader :prism_program #: bool
|
|
10
11
|
attr_reader :prism_nodes #: bool
|
|
11
12
|
attr_reader :prism_nodes_deep #: bool
|
|
@@ -14,16 +15,18 @@ module Herb
|
|
|
14
15
|
DEFAULT_TRACK_WHITESPACE = false #: bool
|
|
15
16
|
DEFAULT_ANALYZE = true #: bool
|
|
16
17
|
DEFAULT_ACTION_VIEW_HELPERS = false #: bool
|
|
18
|
+
DEFAULT_RENDER_NODES = false #: bool
|
|
17
19
|
DEFAULT_PRISM_PROGRAM = false #: bool
|
|
18
20
|
DEFAULT_PRISM_NODES = false #: bool
|
|
19
21
|
DEFAULT_PRISM_NODES_DEEP = false #: bool
|
|
20
22
|
|
|
21
23
|
#: (?strict: bool, ?track_whitespace: bool, ?analyze: bool, ?action_view_helpers: bool, ?prism_nodes: bool, ?prism_nodes_deep: bool, ?prism_program: bool) -> void
|
|
22
|
-
def initialize(strict: DEFAULT_STRICT, track_whitespace: DEFAULT_TRACK_WHITESPACE, analyze: DEFAULT_ANALYZE, action_view_helpers: DEFAULT_ACTION_VIEW_HELPERS, prism_nodes: DEFAULT_PRISM_NODES, prism_nodes_deep: DEFAULT_PRISM_NODES_DEEP, prism_program: DEFAULT_PRISM_PROGRAM)
|
|
24
|
+
def initialize(strict: DEFAULT_STRICT, track_whitespace: DEFAULT_TRACK_WHITESPACE, analyze: DEFAULT_ANALYZE, action_view_helpers: DEFAULT_ACTION_VIEW_HELPERS, render_nodes: DEFAULT_RENDER_NODES, prism_nodes: DEFAULT_PRISM_NODES, prism_nodes_deep: DEFAULT_PRISM_NODES_DEEP, prism_program: DEFAULT_PRISM_PROGRAM)
|
|
23
25
|
@strict = strict
|
|
24
26
|
@track_whitespace = track_whitespace
|
|
25
27
|
@analyze = analyze
|
|
26
28
|
@action_view_helpers = action_view_helpers
|
|
29
|
+
@render_nodes = render_nodes
|
|
27
30
|
@prism_nodes = prism_nodes
|
|
28
31
|
@prism_nodes_deep = prism_nodes_deep
|
|
29
32
|
@prism_program = prism_program
|
|
@@ -36,6 +39,7 @@ module Herb
|
|
|
36
39
|
track_whitespace: @track_whitespace,
|
|
37
40
|
analyze: @analyze,
|
|
38
41
|
action_view_helpers: @action_view_helpers,
|
|
42
|
+
render_nodes: @render_nodes,
|
|
39
43
|
prism_nodes: @prism_nodes,
|
|
40
44
|
prism_nodes_deep: @prism_nodes_deep,
|
|
41
45
|
prism_program: @prism_program,
|
|
@@ -49,6 +53,7 @@ module Herb
|
|
|
49
53
|
"track_whitespace=#{@track_whitespace}\n " \
|
|
50
54
|
"analyze=#{@analyze}\n " \
|
|
51
55
|
"action_view_helpers=#{@action_view_helpers}\n " \
|
|
56
|
+
"render_nodes=#{@render_nodes}\n " \
|
|
52
57
|
"prism_nodes=#{@prism_nodes}\n " \
|
|
53
58
|
"prism_nodes_deep=#{@prism_nodes_deep}\n " \
|
|
54
59
|
"prism_program=#{@prism_program}>"
|
data/lib/herb/prism_inspect.rb
CHANGED
|
@@ -9,7 +9,11 @@ module Herb
|
|
|
9
9
|
def inspect_prism_serialized(serialized_bytes, source, prefix)
|
|
10
10
|
return "∅" unless serialized_bytes
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
begin
|
|
13
|
+
require "prism"
|
|
14
|
+
rescue LoadError
|
|
15
|
+
return "(#{serialized_bytes.bytesize} bytes, prism gem not available)"
|
|
16
|
+
end
|
|
13
17
|
|
|
14
18
|
node = Prism.load(source, serialized_bytes).value
|
|
15
19
|
return "∅" unless node
|
data/lib/herb/version.rb
CHANGED
data/lib/herb/visitor.rb
CHANGED
|
@@ -203,6 +203,16 @@ module Herb
|
|
|
203
203
|
visit_child_nodes(node)
|
|
204
204
|
end
|
|
205
205
|
|
|
206
|
+
#: (Herb::AST::RubyRenderLocalNode) -> void
|
|
207
|
+
def visit_ruby_render_local_node(node)
|
|
208
|
+
visit_child_nodes(node)
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
#: (Herb::AST::ERBRenderNode) -> void
|
|
212
|
+
def visit_erb_render_node(node)
|
|
213
|
+
visit_child_nodes(node)
|
|
214
|
+
end
|
|
215
|
+
|
|
206
216
|
#: (Herb::AST::ERBYieldNode) -> void
|
|
207
217
|
def visit_erb_yield_node(node)
|
|
208
218
|
visit_child_nodes(node)
|
data/sig/herb/ast/nodes.rbs
CHANGED
|
@@ -1472,6 +1472,138 @@ module Herb
|
|
|
1472
1472
|
def tree_inspect: (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String
|
|
1473
1473
|
end
|
|
1474
1474
|
|
|
1475
|
+
# : type serialized_ruby_render_local_node = {
|
|
1476
|
+
# | name: Herb::Token?,
|
|
1477
|
+
# | value: Herb::AST::RubyLiteralNode?,
|
|
1478
|
+
# | }
|
|
1479
|
+
class RubyRenderLocalNode < Node
|
|
1480
|
+
include Colors
|
|
1481
|
+
|
|
1482
|
+
attr_reader name: Herb::Token?
|
|
1483
|
+
|
|
1484
|
+
attr_reader value: Herb::AST::RubyLiteralNode?
|
|
1485
|
+
|
|
1486
|
+
# : (String, Location, Array[Herb::Errors::Error], Herb::Token, Herb::AST::RubyLiteralNode) -> void
|
|
1487
|
+
def initialize: (String, Location, Array[Herb::Errors::Error], Herb::Token, Herb::AST::RubyLiteralNode) -> void
|
|
1488
|
+
|
|
1489
|
+
# : () -> serialized_ruby_render_local_node
|
|
1490
|
+
def to_hash: () -> serialized_ruby_render_local_node
|
|
1491
|
+
|
|
1492
|
+
# : (Visitor) -> void
|
|
1493
|
+
def accept: (Visitor) -> void
|
|
1494
|
+
|
|
1495
|
+
# : () -> Array[Herb::AST::Node?]
|
|
1496
|
+
def child_nodes: () -> Array[Herb::AST::Node?]
|
|
1497
|
+
|
|
1498
|
+
# : () -> Array[Herb::AST::Node]
|
|
1499
|
+
def compact_child_nodes: () -> Array[Herb::AST::Node]
|
|
1500
|
+
|
|
1501
|
+
# : () -> String
|
|
1502
|
+
def inspect: () -> String
|
|
1503
|
+
|
|
1504
|
+
# : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String
|
|
1505
|
+
def tree_inspect: (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String
|
|
1506
|
+
end
|
|
1507
|
+
|
|
1508
|
+
# : type serialized_erb_render_node = {
|
|
1509
|
+
# | tag_opening: Herb::Token?,
|
|
1510
|
+
# | content: Herb::Token?,
|
|
1511
|
+
# | tag_closing: Herb::Token?,
|
|
1512
|
+
# | analyzed_ruby: nil,
|
|
1513
|
+
# | prism_node: String?,
|
|
1514
|
+
# | partial: Herb::Token?,
|
|
1515
|
+
# | template_path: Herb::Token?,
|
|
1516
|
+
# | layout: Herb::Token?,
|
|
1517
|
+
# | file: Herb::Token?,
|
|
1518
|
+
# | inline_template: Herb::Token?,
|
|
1519
|
+
# | body: Herb::Token?,
|
|
1520
|
+
# | plain: Herb::Token?,
|
|
1521
|
+
# | html: Herb::Token?,
|
|
1522
|
+
# | renderable: Herb::Token?,
|
|
1523
|
+
# | collection: Herb::Token?,
|
|
1524
|
+
# | object: Herb::Token?,
|
|
1525
|
+
# | as_name: Herb::Token?,
|
|
1526
|
+
# | spacer_template: Herb::Token?,
|
|
1527
|
+
# | formats: Herb::Token?,
|
|
1528
|
+
# | variants: Herb::Token?,
|
|
1529
|
+
# | handlers: Herb::Token?,
|
|
1530
|
+
# | content_type: Herb::Token?,
|
|
1531
|
+
# | locals: Array[Herb::AST::RubyRenderLocalNode]?,
|
|
1532
|
+
# | }
|
|
1533
|
+
class ERBRenderNode < Node
|
|
1534
|
+
include Colors
|
|
1535
|
+
|
|
1536
|
+
attr_reader tag_opening: Herb::Token?
|
|
1537
|
+
|
|
1538
|
+
attr_reader content: Herb::Token?
|
|
1539
|
+
|
|
1540
|
+
attr_reader tag_closing: Herb::Token?
|
|
1541
|
+
|
|
1542
|
+
attr_reader analyzed_ruby: nil
|
|
1543
|
+
|
|
1544
|
+
attr_reader prism_node: String?
|
|
1545
|
+
|
|
1546
|
+
attr_reader partial: Herb::Token?
|
|
1547
|
+
|
|
1548
|
+
attr_reader template_path: Herb::Token?
|
|
1549
|
+
|
|
1550
|
+
attr_reader layout: Herb::Token?
|
|
1551
|
+
|
|
1552
|
+
attr_reader file: Herb::Token?
|
|
1553
|
+
|
|
1554
|
+
attr_reader inline_template: Herb::Token?
|
|
1555
|
+
|
|
1556
|
+
attr_reader body: Herb::Token?
|
|
1557
|
+
|
|
1558
|
+
attr_reader plain: Herb::Token?
|
|
1559
|
+
|
|
1560
|
+
attr_reader html: Herb::Token?
|
|
1561
|
+
|
|
1562
|
+
attr_reader renderable: Herb::Token?
|
|
1563
|
+
|
|
1564
|
+
attr_reader collection: Herb::Token?
|
|
1565
|
+
|
|
1566
|
+
attr_reader object: Herb::Token?
|
|
1567
|
+
|
|
1568
|
+
attr_reader as_name: Herb::Token?
|
|
1569
|
+
|
|
1570
|
+
attr_reader spacer_template: Herb::Token?
|
|
1571
|
+
|
|
1572
|
+
attr_reader formats: Herb::Token?
|
|
1573
|
+
|
|
1574
|
+
attr_reader variants: Herb::Token?
|
|
1575
|
+
|
|
1576
|
+
attr_reader handlers: Herb::Token?
|
|
1577
|
+
|
|
1578
|
+
attr_reader content_type: Herb::Token?
|
|
1579
|
+
|
|
1580
|
+
attr_reader locals: Array[Herb::AST::RubyRenderLocalNode]?
|
|
1581
|
+
|
|
1582
|
+
# : (String, Location, Array[Herb::Errors::Error], Herb::Token, Herb::Token, Herb::Token, nil, String, Herb::Token, Herb::Token, Herb::Token, Herb::Token, Herb::Token, Herb::Token, Herb::Token, Herb::Token, Herb::Token, Herb::Token, Herb::Token, Herb::Token, Herb::Token, Herb::Token, Herb::Token, Herb::Token, Herb::Token, Array[Herb::AST::RubyRenderLocalNode]) -> void
|
|
1583
|
+
def initialize: (String, Location, Array[Herb::Errors::Error], Herb::Token, Herb::Token, Herb::Token, nil, String, Herb::Token, Herb::Token, Herb::Token, Herb::Token, Herb::Token, Herb::Token, Herb::Token, Herb::Token, Herb::Token, Herb::Token, Herb::Token, Herb::Token, Herb::Token, Herb::Token, Herb::Token, Herb::Token, Herb::Token, Array[Herb::AST::RubyRenderLocalNode]) -> void
|
|
1584
|
+
|
|
1585
|
+
# : () -> Prism::node?
|
|
1586
|
+
def deserialized_prism_node: () -> Prism::node?
|
|
1587
|
+
|
|
1588
|
+
# : () -> serialized_erb_render_node
|
|
1589
|
+
def to_hash: () -> serialized_erb_render_node
|
|
1590
|
+
|
|
1591
|
+
# : (Visitor) -> void
|
|
1592
|
+
def accept: (Visitor) -> void
|
|
1593
|
+
|
|
1594
|
+
# : () -> Array[Herb::AST::Node?]
|
|
1595
|
+
def child_nodes: () -> Array[Herb::AST::Node?]
|
|
1596
|
+
|
|
1597
|
+
# : () -> Array[Herb::AST::Node]
|
|
1598
|
+
def compact_child_nodes: () -> Array[Herb::AST::Node]
|
|
1599
|
+
|
|
1600
|
+
# : () -> String
|
|
1601
|
+
def inspect: () -> String
|
|
1602
|
+
|
|
1603
|
+
# : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String
|
|
1604
|
+
def tree_inspect: (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String
|
|
1605
|
+
end
|
|
1606
|
+
|
|
1475
1607
|
# : type serialized_erb_yield_node = {
|
|
1476
1608
|
# | tag_opening: Herb::Token?,
|
|
1477
1609
|
# | content: Herb::Token?,
|
data/sig/herb/engine.rbs
CHANGED
|
@@ -51,6 +51,8 @@ module Herb
|
|
|
51
51
|
|
|
52
52
|
def add_code: (untyped code) -> untyped
|
|
53
53
|
|
|
54
|
+
def expression_block?: () -> untyped
|
|
55
|
+
|
|
54
56
|
def add_expression: (untyped indicator, untyped code) -> untyped
|
|
55
57
|
|
|
56
58
|
def add_expression_result: (untyped code) -> untyped
|
|
@@ -89,5 +91,7 @@ module Herb
|
|
|
89
91
|
|
|
90
92
|
# : () -> Array[Herb::Visitor]
|
|
91
93
|
def default_visitors: () -> Array[Herb::Visitor]
|
|
94
|
+
|
|
95
|
+
def ensure_valid_ruby!: (untyped source) -> untyped
|
|
92
96
|
end
|
|
93
97
|
end
|
data/sig/herb/errors.rbs
CHANGED
|
@@ -458,5 +458,119 @@ module Herb
|
|
|
458
458
|
# : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String
|
|
459
459
|
def tree_inspect: (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String
|
|
460
460
|
end
|
|
461
|
+
|
|
462
|
+
class RenderAmbiguousLocalsError < Error
|
|
463
|
+
include Colors
|
|
464
|
+
|
|
465
|
+
attr_reader partial: String?
|
|
466
|
+
|
|
467
|
+
# : (String, Location?, String, String) -> void
|
|
468
|
+
def initialize: (String, Location?, String, String) -> void
|
|
469
|
+
|
|
470
|
+
# : () -> String
|
|
471
|
+
def inspect: () -> String
|
|
472
|
+
|
|
473
|
+
# : () -> serialized_render_ambiguous_locals_error
|
|
474
|
+
def to_hash: () -> serialized_render_ambiguous_locals_error
|
|
475
|
+
|
|
476
|
+
# : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String
|
|
477
|
+
def tree_inspect: (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String
|
|
478
|
+
end
|
|
479
|
+
|
|
480
|
+
class RenderMissingLocalsError < Error
|
|
481
|
+
include Colors
|
|
482
|
+
|
|
483
|
+
attr_reader partial: String?
|
|
484
|
+
|
|
485
|
+
attr_reader keywords: String?
|
|
486
|
+
|
|
487
|
+
# : (String, Location?, String, String, String) -> void
|
|
488
|
+
def initialize: (String, Location?, String, String, String) -> void
|
|
489
|
+
|
|
490
|
+
# : () -> String
|
|
491
|
+
def inspect: () -> String
|
|
492
|
+
|
|
493
|
+
# : () -> serialized_render_missing_locals_error
|
|
494
|
+
def to_hash: () -> serialized_render_missing_locals_error
|
|
495
|
+
|
|
496
|
+
# : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String
|
|
497
|
+
def tree_inspect: (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String
|
|
498
|
+
end
|
|
499
|
+
|
|
500
|
+
class RenderNoArgumentsError < Error
|
|
501
|
+
include Colors
|
|
502
|
+
|
|
503
|
+
# : () -> String
|
|
504
|
+
def inspect: () -> String
|
|
505
|
+
|
|
506
|
+
# : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String
|
|
507
|
+
def tree_inspect: (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String
|
|
508
|
+
end
|
|
509
|
+
|
|
510
|
+
class RenderConflictingPartialError < Error
|
|
511
|
+
include Colors
|
|
512
|
+
|
|
513
|
+
attr_reader positional_partial: String?
|
|
514
|
+
|
|
515
|
+
attr_reader keyword_partial: String?
|
|
516
|
+
|
|
517
|
+
# : (String, Location?, String, String, String) -> void
|
|
518
|
+
def initialize: (String, Location?, String, String, String) -> void
|
|
519
|
+
|
|
520
|
+
# : () -> String
|
|
521
|
+
def inspect: () -> String
|
|
522
|
+
|
|
523
|
+
# : () -> serialized_render_conflicting_partial_error
|
|
524
|
+
def to_hash: () -> serialized_render_conflicting_partial_error
|
|
525
|
+
|
|
526
|
+
# : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String
|
|
527
|
+
def tree_inspect: (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String
|
|
528
|
+
end
|
|
529
|
+
|
|
530
|
+
class RenderInvalidAsOptionError < Error
|
|
531
|
+
include Colors
|
|
532
|
+
|
|
533
|
+
attr_reader as_value: String?
|
|
534
|
+
|
|
535
|
+
# : (String, Location?, String, String) -> void
|
|
536
|
+
def initialize: (String, Location?, String, String) -> void
|
|
537
|
+
|
|
538
|
+
# : () -> String
|
|
539
|
+
def inspect: () -> String
|
|
540
|
+
|
|
541
|
+
# : () -> serialized_render_invalid_as_option_error
|
|
542
|
+
def to_hash: () -> serialized_render_invalid_as_option_error
|
|
543
|
+
|
|
544
|
+
# : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String
|
|
545
|
+
def tree_inspect: (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String
|
|
546
|
+
end
|
|
547
|
+
|
|
548
|
+
class RenderObjectAndCollectionError < Error
|
|
549
|
+
include Colors
|
|
550
|
+
|
|
551
|
+
# : () -> String
|
|
552
|
+
def inspect: () -> String
|
|
553
|
+
|
|
554
|
+
# : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String
|
|
555
|
+
def tree_inspect: (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String
|
|
556
|
+
end
|
|
557
|
+
|
|
558
|
+
class RenderLayoutWithoutBlockError < Error
|
|
559
|
+
include Colors
|
|
560
|
+
|
|
561
|
+
attr_reader layout: String?
|
|
562
|
+
|
|
563
|
+
# : (String, Location?, String, String) -> void
|
|
564
|
+
def initialize: (String, Location?, String, String) -> void
|
|
565
|
+
|
|
566
|
+
# : () -> String
|
|
567
|
+
def inspect: () -> String
|
|
568
|
+
|
|
569
|
+
# : () -> serialized_render_layout_without_block_error
|
|
570
|
+
def to_hash: () -> serialized_render_layout_without_block_error
|
|
571
|
+
|
|
572
|
+
# : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String
|
|
573
|
+
def tree_inspect: (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String
|
|
574
|
+
end
|
|
461
575
|
end
|
|
462
576
|
end
|
data/sig/herb/parser_options.rbs
CHANGED
|
@@ -10,6 +10,8 @@ module Herb
|
|
|
10
10
|
|
|
11
11
|
attr_reader action_view_helpers: bool
|
|
12
12
|
|
|
13
|
+
attr_reader render_nodes: bool
|
|
14
|
+
|
|
13
15
|
attr_reader prism_program: bool
|
|
14
16
|
|
|
15
17
|
attr_reader prism_nodes: bool
|
|
@@ -24,6 +26,8 @@ module Herb
|
|
|
24
26
|
|
|
25
27
|
DEFAULT_ACTION_VIEW_HELPERS: bool
|
|
26
28
|
|
|
29
|
+
DEFAULT_RENDER_NODES: bool
|
|
30
|
+
|
|
27
31
|
DEFAULT_PRISM_PROGRAM: bool
|
|
28
32
|
|
|
29
33
|
DEFAULT_PRISM_NODES: bool
|
data/sig/herb/visitor.rbs
CHANGED
|
@@ -121,6 +121,12 @@ module Herb
|
|
|
121
121
|
# : (Herb::AST::ERBUnlessNode) -> void
|
|
122
122
|
def visit_erb_unless_node: (Herb::AST::ERBUnlessNode) -> void
|
|
123
123
|
|
|
124
|
+
# : (Herb::AST::RubyRenderLocalNode) -> void
|
|
125
|
+
def visit_ruby_render_local_node: (Herb::AST::RubyRenderLocalNode) -> void
|
|
126
|
+
|
|
127
|
+
# : (Herb::AST::ERBRenderNode) -> void
|
|
128
|
+
def visit_erb_render_node: (Herb::AST::ERBRenderNode) -> void
|
|
129
|
+
|
|
124
130
|
# : (Herb::AST::ERBYieldNode) -> void
|
|
125
131
|
def visit_erb_yield_node: (Herb::AST::ERBYieldNode) -> void
|
|
126
132
|
|
data/sig/rubyvm.rbs
ADDED
|
@@ -112,4 +112,32 @@ module Herb
|
|
|
112
112
|
nested_tag_column: Integer,
|
|
113
113
|
}
|
|
114
114
|
|
|
115
|
+
type serialized_render_ambiguous_locals_error = serialized_error & {
|
|
116
|
+
partial: String,
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
type serialized_render_missing_locals_error = serialized_error & {
|
|
120
|
+
partial: String,
|
|
121
|
+
keywords: String,
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
type serialized_render_no_arguments_error = serialized_error & {
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
type serialized_render_conflicting_partial_error = serialized_error & {
|
|
128
|
+
positional_partial: String,
|
|
129
|
+
keyword_partial: String,
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
type serialized_render_invalid_as_option_error = serialized_error & {
|
|
133
|
+
as_value: String,
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
type serialized_render_object_and_collection_error = serialized_error & {
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
type serialized_render_layout_without_block_error = serialized_error & {
|
|
140
|
+
layout: String,
|
|
141
|
+
}
|
|
142
|
+
|
|
115
143
|
end
|