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.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/config.yml +156 -0
  3. data/ext/herb/error_helpers.c +168 -0
  4. data/ext/herb/extension.c +4 -0
  5. data/ext/herb/extension_helpers.c +1 -0
  6. data/ext/herb/nodes.c +110 -0
  7. data/lib/herb/3.0/herb.so +0 -0
  8. data/lib/herb/3.1/herb.so +0 -0
  9. data/lib/herb/3.2/herb.so +0 -0
  10. data/lib/herb/3.3/herb.so +0 -0
  11. data/lib/herb/3.4/herb.so +0 -0
  12. data/lib/herb/4.0/herb.so +0 -0
  13. data/lib/herb/ast/nodes.rb +393 -17
  14. data/lib/herb/engine.rb +55 -26
  15. data/lib/herb/errors.rb +245 -0
  16. data/lib/herb/parser_options.rb +6 -1
  17. data/lib/herb/prism_inspect.rb +5 -1
  18. data/lib/herb/version.rb +1 -1
  19. data/lib/herb/visitor.rb +10 -0
  20. data/sig/herb/ast/nodes.rbs +132 -0
  21. data/sig/herb/engine.rbs +4 -0
  22. data/sig/herb/errors.rbs +114 -0
  23. data/sig/herb/parser_options.rbs +4 -0
  24. data/sig/herb/visitor.rbs +6 -0
  25. data/sig/rubyvm.rbs +5 -0
  26. data/sig/serialized_ast_errors.rbs +28 -0
  27. data/sig/serialized_ast_nodes.rbs +31 -0
  28. data/src/analyze/action_view/attribute_extraction_helpers.c +14 -1
  29. data/src/analyze/action_view/content_tag.c +19 -11
  30. data/src/analyze/action_view/link_to.c +25 -1
  31. data/src/analyze/action_view/registry.c +23 -0
  32. data/src/analyze/action_view/tag.c +14 -8
  33. data/src/analyze/action_view/tag_helpers.c +78 -11
  34. data/src/analyze/analyze.c +3 -0
  35. data/src/analyze/prism_annotate.c +4 -2
  36. data/src/analyze/render_nodes.c +761 -0
  37. data/src/analyze/transform.c +7 -0
  38. data/src/ast_nodes.c +97 -0
  39. data/src/ast_pretty_print.c +74 -0
  40. data/src/errors.c +379 -0
  41. data/src/include/analyze/action_view/tag_helper_handler.h +2 -0
  42. data/src/include/analyze/render_nodes.h +11 -0
  43. data/src/include/ast_nodes.h +37 -0
  44. data/src/include/errors.h +58 -0
  45. data/src/include/parser.h +1 -0
  46. data/src/include/version.h +1 -1
  47. data/src/parser.c +1 -0
  48. data/src/parser_match_tags.c +20 -0
  49. data/src/visitor.c +20 -0
  50. data/templates/lib/herb/ast/nodes.rb.erb +8 -2
  51. data/templates/rust/src/ast/nodes.rs.erb +1 -1
  52. data/templates/rust/src/nodes.rs.erb +1 -1
  53. 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
@@ -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}>"
@@ -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
- require "prism"
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
@@ -2,5 +2,5 @@
2
2
  # typed: true
3
3
 
4
4
  module Herb
5
- VERSION = "0.9.0"
5
+ VERSION = "0.9.1"
6
6
  end
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)
@@ -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
@@ -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
@@ -0,0 +1,5 @@
1
+ class RubyVM
2
+ class InstructionSequence
3
+ def self.compile: (String source, ?String? file, ?String? path, ?Integer? line, ?freeze: bool, **untyped options) -> RubyVM::InstructionSequence
4
+ end
5
+ end
@@ -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