herb 0.9.2-arm-linux-gnu → 0.9.4-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 (171) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -0
  3. data/config.yml +125 -0
  4. data/ext/herb/error_helpers.c +172 -2
  5. data/ext/herb/extconf.rb +6 -0
  6. data/ext/herb/extension.c +16 -2
  7. data/ext/herb/extension_helpers.c +6 -5
  8. data/ext/herb/extension_helpers.h +4 -4
  9. data/ext/herb/nodes.c +89 -3
  10. data/lib/herb/3.0/herb.so +0 -0
  11. data/lib/herb/3.1/herb.so +0 -0
  12. data/lib/herb/3.2/herb.so +0 -0
  13. data/lib/herb/3.3/herb.so +0 -0
  14. data/lib/herb/3.4/herb.so +0 -0
  15. data/lib/herb/4.0/herb.so +0 -0
  16. data/lib/herb/ast/erb_content_node.rb +32 -0
  17. data/lib/herb/ast/nodes.rb +244 -3
  18. data/lib/herb/cli.rb +12 -2
  19. data/lib/herb/engine/compiler.rb +166 -75
  20. data/lib/herb/engine/validators/security_validator.rb +40 -0
  21. data/lib/herb/engine.rb +3 -0
  22. data/lib/herb/errors.rb +268 -0
  23. data/lib/herb/parser_options.rb +7 -2
  24. data/lib/herb/project.rb +58 -17
  25. data/lib/herb/version.rb +1 -1
  26. data/lib/herb/visitor.rb +82 -0
  27. data/lib/herb.rb +1 -0
  28. data/sig/herb/ast/erb_content_node.rbs +13 -0
  29. data/sig/herb/ast/nodes.rbs +98 -2
  30. data/sig/herb/engine/compiler.rbs +31 -2
  31. data/sig/herb/engine/validators/security_validator.rbs +4 -0
  32. data/sig/herb/engine.rbs +3 -0
  33. data/sig/herb/errors.rbs +122 -0
  34. data/sig/herb/parser_options.rbs +6 -2
  35. data/sig/herb/visitor.rbs +12 -0
  36. data/sig/serialized_ast_errors.rbs +29 -0
  37. data/sig/serialized_ast_nodes.rbs +19 -0
  38. data/src/analyze/action_view/attribute_extraction_helpers.c +420 -91
  39. data/src/analyze/action_view/image_tag.c +87 -0
  40. data/src/analyze/action_view/javascript_include_tag.c +22 -12
  41. data/src/analyze/action_view/registry.c +6 -3
  42. data/src/analyze/action_view/tag.c +19 -2
  43. data/src/analyze/action_view/tag_helper_node_builders.c +105 -36
  44. data/src/analyze/action_view/tag_helpers.c +792 -44
  45. data/src/analyze/analyze.c +167 -13
  46. data/src/analyze/{helpers.c → analyze_helpers.c} +1 -1
  47. data/src/analyze/analyzed_ruby.c +1 -1
  48. data/src/analyze/builders.c +11 -8
  49. data/src/analyze/conditional_elements.c +6 -7
  50. data/src/analyze/conditional_open_tags.c +6 -7
  51. data/src/analyze/control_type.c +4 -2
  52. data/src/analyze/invalid_structures.c +5 -5
  53. data/src/analyze/missing_end.c +2 -2
  54. data/src/analyze/parse_errors.c +47 -6
  55. data/src/analyze/prism_annotate.c +7 -7
  56. data/src/analyze/render_nodes.c +6 -26
  57. data/src/analyze/strict_locals.c +651 -0
  58. data/src/analyze/transform.c +7 -0
  59. data/src/{ast_node.c → ast/ast_node.c} +8 -8
  60. data/src/{ast_nodes.c → ast/ast_nodes.c} +82 -11
  61. data/src/{ast_pretty_print.c → ast/ast_pretty_print.c} +113 -9
  62. data/src/{pretty_print.c → ast/pretty_print.c} +9 -9
  63. data/src/errors.c +398 -8
  64. data/src/extract.c +5 -5
  65. data/src/herb.c +15 -5
  66. data/src/include/analyze/action_view/attribute_extraction_helpers.h +3 -1
  67. data/src/include/analyze/action_view/tag_helper_handler.h +3 -3
  68. data/src/include/analyze/action_view/tag_helper_node_builders.h +34 -5
  69. data/src/include/analyze/action_view/tag_helpers.h +4 -3
  70. data/src/include/analyze/analyze.h +12 -5
  71. data/src/include/analyze/analyzed_ruby.h +2 -2
  72. data/src/include/analyze/builders.h +4 -4
  73. data/src/include/analyze/conditional_elements.h +2 -2
  74. data/src/include/analyze/conditional_open_tags.h +2 -2
  75. data/src/include/analyze/control_type.h +1 -1
  76. data/src/include/analyze/helpers.h +2 -2
  77. data/src/include/analyze/invalid_structures.h +1 -1
  78. data/src/include/analyze/prism_annotate.h +2 -2
  79. data/src/include/analyze/render_nodes.h +1 -1
  80. data/src/include/analyze/strict_locals.h +11 -0
  81. data/src/include/{ast_node.h → ast/ast_node.h} +4 -4
  82. data/src/include/{ast_nodes.h → ast/ast_nodes.h} +38 -14
  83. data/src/include/{ast_pretty_print.h → ast/ast_pretty_print.h} +3 -3
  84. data/src/include/{pretty_print.h → ast/pretty_print.h} +4 -4
  85. data/src/include/errors.h +65 -7
  86. data/src/include/extract.h +2 -2
  87. data/src/include/herb.h +5 -5
  88. data/src/include/{lex_helpers.h → lexer/lex_helpers.h} +5 -5
  89. data/src/include/{lexer.h → lexer/lexer.h} +1 -1
  90. data/src/include/{lexer_peek_helpers.h → lexer/lexer_peek_helpers.h} +2 -2
  91. data/src/include/{lexer_struct.h → lexer/lexer_struct.h} +2 -2
  92. data/src/include/{token.h → lexer/token.h} +3 -3
  93. data/src/include/{token_matchers.h → lexer/token_matchers.h} +1 -1
  94. data/src/include/{token_struct.h → lexer/token_struct.h} +3 -3
  95. data/src/include/{util → lib}/hb_foreach.h +1 -1
  96. data/src/include/{util → lib}/hb_string.h +5 -1
  97. data/src/include/{location.h → location/location.h} +1 -1
  98. data/src/include/parser/dot_notation.h +12 -0
  99. data/src/include/{parser.h → parser/parser.h} +11 -4
  100. data/src/include/{parser_helpers.h → parser/parser_helpers.h} +6 -6
  101. data/src/include/{prism_context.h → prism/prism_context.h} +2 -2
  102. data/src/include/{prism_helpers.h → prism/prism_helpers.h} +6 -6
  103. data/src/include/{html_util.h → util/html_util.h} +1 -1
  104. data/src/include/util/ruby_util.h +9 -0
  105. data/src/include/{utf8.h → util/utf8.h} +1 -1
  106. data/src/include/{util.h → util/util.h} +1 -1
  107. data/src/include/version.h +1 -1
  108. data/src/include/visitor.h +3 -3
  109. data/src/{lexer_peek_helpers.c → lexer/lexer_peek_helpers.c} +3 -3
  110. data/src/{token.c → lexer/token.c} +8 -8
  111. data/src/{token_matchers.c → lexer/token_matchers.c} +2 -2
  112. data/src/lexer.c +6 -6
  113. data/src/{util → lib}/hb_allocator.c +2 -2
  114. data/src/{util → lib}/hb_arena.c +1 -1
  115. data/src/{util → lib}/hb_arena_debug.c +2 -2
  116. data/src/{util → lib}/hb_array.c +2 -2
  117. data/src/{util → lib}/hb_buffer.c +2 -2
  118. data/src/{util → lib}/hb_narray.c +1 -1
  119. data/src/{util → lib}/hb_string.c +2 -2
  120. data/src/{location.c → location/location.c} +2 -2
  121. data/src/{position.c → location/position.c} +2 -2
  122. data/src/{range.c → location/range.c} +1 -1
  123. data/src/main.c +11 -11
  124. data/src/parser/dot_notation.c +100 -0
  125. data/src/{parser_match_tags.c → parser/match_tags.c} +34 -5
  126. data/src/{parser_helpers.c → parser/parser_helpers.c} +10 -10
  127. data/src/parser.c +68 -32
  128. data/src/{prism_helpers.c → prism/prism_helpers.c} +7 -7
  129. data/src/{ruby_parser.c → prism/ruby_parser.c} +1 -1
  130. data/src/{html_util.c → util/html_util.c} +4 -4
  131. data/src/{io.c → util/io.c} +3 -3
  132. data/src/util/ruby_util.c +42 -0
  133. data/src/{utf8.c → util/utf8.c} +2 -2
  134. data/src/{util.c → util/util.c} +4 -4
  135. data/src/visitor.c +35 -3
  136. data/templates/ext/herb/error_helpers.c.erb +2 -2
  137. data/templates/ext/herb/nodes.c.erb +1 -1
  138. data/templates/java/error_helpers.c.erb +1 -1
  139. data/templates/java/error_helpers.h.erb +2 -2
  140. data/templates/java/nodes.c.erb +4 -4
  141. data/templates/java/nodes.h.erb +1 -1
  142. data/templates/javascript/packages/node/extension/error_helpers.cpp.erb +4 -4
  143. data/templates/javascript/packages/node/extension/nodes.cpp.erb +4 -4
  144. data/templates/lib/herb/visitor.rb.erb +14 -0
  145. data/templates/src/analyze/missing_end.c.erb +2 -2
  146. data/templates/src/{ast_nodes.c.erb → ast/ast_nodes.c.erb} +9 -9
  147. data/templates/src/{ast_pretty_print.c.erb → ast/ast_pretty_print.c.erb} +8 -8
  148. data/templates/src/errors.c.erb +8 -8
  149. data/templates/src/include/{ast_nodes.h.erb → ast/ast_nodes.h.erb} +11 -12
  150. data/templates/src/include/{ast_pretty_print.h.erb → ast/ast_pretty_print.h.erb} +2 -2
  151. data/templates/src/include/errors.h.erb +7 -7
  152. data/templates/src/{parser_match_tags.c.erb → parser/match_tags.c.erb} +4 -4
  153. data/templates/src/visitor.c.erb +3 -3
  154. data/templates/wasm/error_helpers.cpp.erb +4 -4
  155. data/templates/wasm/nodes.cpp.erb +5 -5
  156. metadata +76 -68
  157. data/src/include/element_source.h +0 -10
  158. /data/src/include/{util → lib}/hb_allocator.h +0 -0
  159. /data/src/include/{util → lib}/hb_arena.h +0 -0
  160. /data/src/include/{util → lib}/hb_arena_debug.h +0 -0
  161. /data/src/include/{util → lib}/hb_array.h +0 -0
  162. /data/src/include/{util → lib}/hb_buffer.h +0 -0
  163. /data/src/include/{util → lib}/hb_narray.h +0 -0
  164. /data/src/include/{util → lib}/string.h +0 -0
  165. /data/src/include/{position.h → location/position.h} +0 -0
  166. /data/src/include/{range.h → location/range.h} +0 -0
  167. /data/src/include/{herb_prism_node.h → prism/herb_prism_node.h} +0 -0
  168. /data/src/include/{prism_serialized.h → prism/prism_serialized.h} +0 -0
  169. /data/src/include/{ruby_parser.h → prism/ruby_parser.h} +0 -0
  170. /data/src/include/{io.h → util/io.h} +0 -0
  171. /data/templates/src/include/{util → lib}/hb_foreach.h.erb +0 -0
data/lib/herb/visitor.rb CHANGED
@@ -23,203 +23,285 @@ module Herb
23
23
  node.compact_child_nodes.each { |node| node.accept(self) }
24
24
  end
25
25
 
26
+ #: (Herb::AST::Node) -> void
27
+ def visit_node(node)
28
+ # Default implementation does nothing
29
+ end
30
+
31
+ #: (Herb::AST::Node) -> void
32
+ def visit_erb_node(node)
33
+ # Default implementation does nothing
34
+ end
35
+
26
36
  #: (Herb::AST::DocumentNode) -> void
27
37
  def visit_document_node(node)
38
+ visit_node(node)
28
39
  visit_child_nodes(node)
29
40
  end
30
41
 
31
42
  #: (Herb::AST::LiteralNode) -> void
32
43
  def visit_literal_node(node)
44
+ visit_node(node)
33
45
  visit_child_nodes(node)
34
46
  end
35
47
 
36
48
  #: (Herb::AST::HTMLOpenTagNode) -> void
37
49
  def visit_html_open_tag_node(node)
50
+ visit_node(node)
38
51
  visit_child_nodes(node)
39
52
  end
40
53
 
41
54
  #: (Herb::AST::HTMLConditionalOpenTagNode) -> void
42
55
  def visit_html_conditional_open_tag_node(node)
56
+ visit_node(node)
43
57
  visit_child_nodes(node)
44
58
  end
45
59
 
46
60
  #: (Herb::AST::HTMLCloseTagNode) -> void
47
61
  def visit_html_close_tag_node(node)
62
+ visit_node(node)
48
63
  visit_child_nodes(node)
49
64
  end
50
65
 
51
66
  #: (Herb::AST::HTMLOmittedCloseTagNode) -> void
52
67
  def visit_html_omitted_close_tag_node(node)
68
+ visit_node(node)
53
69
  visit_child_nodes(node)
54
70
  end
55
71
 
56
72
  #: (Herb::AST::HTMLVirtualCloseTagNode) -> void
57
73
  def visit_html_virtual_close_tag_node(node)
74
+ visit_node(node)
58
75
  visit_child_nodes(node)
59
76
  end
60
77
 
61
78
  #: (Herb::AST::HTMLElementNode) -> void
62
79
  def visit_html_element_node(node)
80
+ visit_node(node)
63
81
  visit_child_nodes(node)
64
82
  end
65
83
 
66
84
  #: (Herb::AST::HTMLConditionalElementNode) -> void
67
85
  def visit_html_conditional_element_node(node)
86
+ visit_node(node)
68
87
  visit_child_nodes(node)
69
88
  end
70
89
 
71
90
  #: (Herb::AST::HTMLAttributeValueNode) -> void
72
91
  def visit_html_attribute_value_node(node)
92
+ visit_node(node)
73
93
  visit_child_nodes(node)
74
94
  end
75
95
 
76
96
  #: (Herb::AST::HTMLAttributeNameNode) -> void
77
97
  def visit_html_attribute_name_node(node)
98
+ visit_node(node)
78
99
  visit_child_nodes(node)
79
100
  end
80
101
 
81
102
  #: (Herb::AST::HTMLAttributeNode) -> void
82
103
  def visit_html_attribute_node(node)
104
+ visit_node(node)
83
105
  visit_child_nodes(node)
84
106
  end
85
107
 
86
108
  #: (Herb::AST::RubyLiteralNode) -> void
87
109
  def visit_ruby_literal_node(node)
110
+ visit_node(node)
88
111
  visit_child_nodes(node)
89
112
  end
90
113
 
91
114
  #: (Herb::AST::RubyHTMLAttributesSplatNode) -> void
92
115
  def visit_ruby_html_attributes_splat_node(node)
116
+ visit_node(node)
93
117
  visit_child_nodes(node)
94
118
  end
95
119
 
96
120
  #: (Herb::AST::ERBOpenTagNode) -> void
97
121
  def visit_erb_open_tag_node(node)
122
+ visit_node(node)
123
+ visit_erb_node(node)
98
124
  visit_child_nodes(node)
99
125
  end
100
126
 
101
127
  #: (Herb::AST::HTMLTextNode) -> void
102
128
  def visit_html_text_node(node)
129
+ visit_node(node)
103
130
  visit_child_nodes(node)
104
131
  end
105
132
 
106
133
  #: (Herb::AST::HTMLCommentNode) -> void
107
134
  def visit_html_comment_node(node)
135
+ visit_node(node)
108
136
  visit_child_nodes(node)
109
137
  end
110
138
 
111
139
  #: (Herb::AST::HTMLDoctypeNode) -> void
112
140
  def visit_html_doctype_node(node)
141
+ visit_node(node)
113
142
  visit_child_nodes(node)
114
143
  end
115
144
 
116
145
  #: (Herb::AST::XMLDeclarationNode) -> void
117
146
  def visit_xml_declaration_node(node)
147
+ visit_node(node)
118
148
  visit_child_nodes(node)
119
149
  end
120
150
 
121
151
  #: (Herb::AST::CDATANode) -> void
122
152
  def visit_cdata_node(node)
153
+ visit_node(node)
123
154
  visit_child_nodes(node)
124
155
  end
125
156
 
126
157
  #: (Herb::AST::WhitespaceNode) -> void
127
158
  def visit_whitespace_node(node)
159
+ visit_node(node)
128
160
  visit_child_nodes(node)
129
161
  end
130
162
 
131
163
  #: (Herb::AST::ERBContentNode) -> void
132
164
  def visit_erb_content_node(node)
165
+ visit_node(node)
166
+ visit_erb_node(node)
133
167
  visit_child_nodes(node)
134
168
  end
135
169
 
136
170
  #: (Herb::AST::ERBEndNode) -> void
137
171
  def visit_erb_end_node(node)
172
+ visit_node(node)
173
+ visit_erb_node(node)
138
174
  visit_child_nodes(node)
139
175
  end
140
176
 
141
177
  #: (Herb::AST::ERBElseNode) -> void
142
178
  def visit_erb_else_node(node)
179
+ visit_node(node)
180
+ visit_erb_node(node)
143
181
  visit_child_nodes(node)
144
182
  end
145
183
 
146
184
  #: (Herb::AST::ERBIfNode) -> void
147
185
  def visit_erb_if_node(node)
186
+ visit_node(node)
187
+ visit_erb_node(node)
148
188
  visit_child_nodes(node)
149
189
  end
150
190
 
151
191
  #: (Herb::AST::ERBBlockNode) -> void
152
192
  def visit_erb_block_node(node)
193
+ visit_node(node)
194
+ visit_erb_node(node)
153
195
  visit_child_nodes(node)
154
196
  end
155
197
 
156
198
  #: (Herb::AST::ERBWhenNode) -> void
157
199
  def visit_erb_when_node(node)
200
+ visit_node(node)
201
+ visit_erb_node(node)
158
202
  visit_child_nodes(node)
159
203
  end
160
204
 
161
205
  #: (Herb::AST::ERBCaseNode) -> void
162
206
  def visit_erb_case_node(node)
207
+ visit_node(node)
208
+ visit_erb_node(node)
163
209
  visit_child_nodes(node)
164
210
  end
165
211
 
166
212
  #: (Herb::AST::ERBCaseMatchNode) -> void
167
213
  def visit_erb_case_match_node(node)
214
+ visit_node(node)
215
+ visit_erb_node(node)
168
216
  visit_child_nodes(node)
169
217
  end
170
218
 
171
219
  #: (Herb::AST::ERBWhileNode) -> void
172
220
  def visit_erb_while_node(node)
221
+ visit_node(node)
222
+ visit_erb_node(node)
173
223
  visit_child_nodes(node)
174
224
  end
175
225
 
176
226
  #: (Herb::AST::ERBUntilNode) -> void
177
227
  def visit_erb_until_node(node)
228
+ visit_node(node)
229
+ visit_erb_node(node)
178
230
  visit_child_nodes(node)
179
231
  end
180
232
 
181
233
  #: (Herb::AST::ERBForNode) -> void
182
234
  def visit_erb_for_node(node)
235
+ visit_node(node)
236
+ visit_erb_node(node)
183
237
  visit_child_nodes(node)
184
238
  end
185
239
 
186
240
  #: (Herb::AST::ERBRescueNode) -> void
187
241
  def visit_erb_rescue_node(node)
242
+ visit_node(node)
243
+ visit_erb_node(node)
188
244
  visit_child_nodes(node)
189
245
  end
190
246
 
191
247
  #: (Herb::AST::ERBEnsureNode) -> void
192
248
  def visit_erb_ensure_node(node)
249
+ visit_node(node)
250
+ visit_erb_node(node)
193
251
  visit_child_nodes(node)
194
252
  end
195
253
 
196
254
  #: (Herb::AST::ERBBeginNode) -> void
197
255
  def visit_erb_begin_node(node)
256
+ visit_node(node)
257
+ visit_erb_node(node)
198
258
  visit_child_nodes(node)
199
259
  end
200
260
 
201
261
  #: (Herb::AST::ERBUnlessNode) -> void
202
262
  def visit_erb_unless_node(node)
263
+ visit_node(node)
264
+ visit_erb_node(node)
203
265
  visit_child_nodes(node)
204
266
  end
205
267
 
206
268
  #: (Herb::AST::RubyRenderLocalNode) -> void
207
269
  def visit_ruby_render_local_node(node)
270
+ visit_node(node)
208
271
  visit_child_nodes(node)
209
272
  end
210
273
 
211
274
  #: (Herb::AST::ERBRenderNode) -> void
212
275
  def visit_erb_render_node(node)
276
+ visit_node(node)
277
+ visit_erb_node(node)
278
+ visit_child_nodes(node)
279
+ end
280
+
281
+ #: (Herb::AST::RubyStrictLocalNode) -> void
282
+ def visit_ruby_strict_local_node(node)
283
+ visit_node(node)
284
+ visit_child_nodes(node)
285
+ end
286
+
287
+ #: (Herb::AST::ERBStrictLocalsNode) -> void
288
+ def visit_erb_strict_locals_node(node)
289
+ visit_node(node)
290
+ visit_erb_node(node)
213
291
  visit_child_nodes(node)
214
292
  end
215
293
 
216
294
  #: (Herb::AST::ERBYieldNode) -> void
217
295
  def visit_erb_yield_node(node)
296
+ visit_node(node)
297
+ visit_erb_node(node)
218
298
  visit_child_nodes(node)
219
299
  end
220
300
 
221
301
  #: (Herb::AST::ERBInNode) -> void
222
302
  def visit_erb_in_node(node)
303
+ visit_node(node)
304
+ visit_erb_node(node)
223
305
  visit_child_nodes(node)
224
306
  end
225
307
 
data/lib/herb.rb CHANGED
@@ -17,6 +17,7 @@ require_relative "herb/parse_result"
17
17
  require_relative "herb/ast"
18
18
  require_relative "herb/ast/node"
19
19
  require_relative "herb/ast/nodes"
20
+ require_relative "herb/ast/erb_content_node"
20
21
  require_relative "herb/ast/helpers"
21
22
 
22
23
  require_relative "herb/errors"
@@ -0,0 +1,13 @@
1
+ # Generated from lib/herb/ast/erb_content_node.rb with RBS::Inline
2
+
3
+ module Herb
4
+ module AST
5
+ class ERBContentNode < Node
6
+ # : () -> Prism::node?
7
+ def parsed_prism_node: () -> Prism::node?
8
+
9
+ # : () -> Prism::node?
10
+ def prism: () -> Prism::node?
11
+ end
12
+ end
13
+ end
@@ -944,6 +944,9 @@ module Herb
944
944
  # | tag_closing: Herb::Token?,
945
945
  # | prism_node: String?,
946
946
  # | body: Array[Herb::AST::Node],
947
+ # | rescue_clause: Herb::AST::ERBRescueNode?,
948
+ # | else_clause: Herb::AST::ERBElseNode?,
949
+ # | ensure_clause: Herb::AST::ERBEnsureNode?,
947
950
  # | end_node: Herb::AST::ERBEndNode?,
948
951
  # | }
949
952
  class ERBBlockNode < Node
@@ -959,10 +962,16 @@ module Herb
959
962
 
960
963
  attr_reader body: Array[Herb::AST::Node]
961
964
 
965
+ attr_reader rescue_clause: Herb::AST::ERBRescueNode?
966
+
967
+ attr_reader else_clause: Herb::AST::ERBElseNode?
968
+
969
+ attr_reader ensure_clause: Herb::AST::ERBEnsureNode?
970
+
962
971
  attr_reader end_node: Herb::AST::ERBEndNode?
963
972
 
964
- # : (String, Location, Array[Herb::Errors::Error], Herb::Token, Herb::Token, Herb::Token, String, Array[Herb::AST::Node], Herb::AST::ERBEndNode) -> void
965
- def initialize: (String, Location, Array[Herb::Errors::Error], Herb::Token, Herb::Token, Herb::Token, String, Array[Herb::AST::Node], Herb::AST::ERBEndNode) -> void
973
+ # : (String, Location, Array[Herb::Errors::Error], Herb::Token, Herb::Token, Herb::Token, String, Array[Herb::AST::Node], Herb::AST::ERBRescueNode, Herb::AST::ERBElseNode, Herb::AST::ERBEnsureNode, Herb::AST::ERBEndNode) -> void
974
+ def initialize: (String, Location, Array[Herb::Errors::Error], Herb::Token, Herb::Token, Herb::Token, String, Array[Herb::AST::Node], Herb::AST::ERBRescueNode, Herb::AST::ERBElseNode, Herb::AST::ERBEnsureNode, Herb::AST::ERBEndNode) -> void
966
975
 
967
976
  # : () -> Prism::node?
968
977
  def deserialized_prism_node: () -> Prism::node?
@@ -1604,6 +1613,93 @@ module Herb
1604
1613
  def tree_inspect: (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String
1605
1614
  end
1606
1615
 
1616
+ # : type serialized_ruby_strict_local_node = {
1617
+ # | name: Herb::Token?,
1618
+ # | default_value: Herb::AST::RubyLiteralNode?,
1619
+ # | required: bool,
1620
+ # | double_splat: bool,
1621
+ # | }
1622
+ class RubyStrictLocalNode < Node
1623
+ include Colors
1624
+
1625
+ attr_reader name: Herb::Token?
1626
+
1627
+ attr_reader default_value: Herb::AST::RubyLiteralNode?
1628
+
1629
+ attr_reader required: bool
1630
+
1631
+ attr_reader double_splat: bool
1632
+
1633
+ # : (String, Location, Array[Herb::Errors::Error], Herb::Token, Herb::AST::RubyLiteralNode, bool, bool) -> void
1634
+ def initialize: (String, Location, Array[Herb::Errors::Error], Herb::Token, Herb::AST::RubyLiteralNode, bool, bool) -> void
1635
+
1636
+ # : () -> serialized_ruby_strict_local_node
1637
+ def to_hash: () -> serialized_ruby_strict_local_node
1638
+
1639
+ # : (Visitor) -> void
1640
+ def accept: (Visitor) -> void
1641
+
1642
+ # : () -> Array[Herb::AST::Node?]
1643
+ def child_nodes: () -> Array[Herb::AST::Node?]
1644
+
1645
+ # : () -> Array[Herb::AST::Node]
1646
+ def compact_child_nodes: () -> Array[Herb::AST::Node]
1647
+
1648
+ # : () -> String
1649
+ def inspect: () -> String
1650
+
1651
+ # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String
1652
+ def tree_inspect: (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String
1653
+ end
1654
+
1655
+ # : type serialized_erb_strict_locals_node = {
1656
+ # | tag_opening: Herb::Token?,
1657
+ # | content: Herb::Token?,
1658
+ # | tag_closing: Herb::Token?,
1659
+ # | analyzed_ruby: nil,
1660
+ # | prism_node: String?,
1661
+ # | locals: Array[Herb::AST::RubyStrictLocalNode]?,
1662
+ # | }
1663
+ class ERBStrictLocalsNode < Node
1664
+ include Colors
1665
+
1666
+ attr_reader tag_opening: Herb::Token?
1667
+
1668
+ attr_reader content: Herb::Token?
1669
+
1670
+ attr_reader tag_closing: Herb::Token?
1671
+
1672
+ attr_reader analyzed_ruby: nil
1673
+
1674
+ attr_reader prism_node: String?
1675
+
1676
+ attr_reader locals: Array[Herb::AST::RubyStrictLocalNode]?
1677
+
1678
+ # : (String, Location, Array[Herb::Errors::Error], Herb::Token, Herb::Token, Herb::Token, nil, String, Array[Herb::AST::RubyStrictLocalNode]) -> void
1679
+ def initialize: (String, Location, Array[Herb::Errors::Error], Herb::Token, Herb::Token, Herb::Token, nil, String, Array[Herb::AST::RubyStrictLocalNode]) -> void
1680
+
1681
+ # : () -> Prism::node?
1682
+ def deserialized_prism_node: () -> Prism::node?
1683
+
1684
+ # : () -> serialized_erb_strict_locals_node
1685
+ def to_hash: () -> serialized_erb_strict_locals_node
1686
+
1687
+ # : (Visitor) -> void
1688
+ def accept: (Visitor) -> void
1689
+
1690
+ # : () -> Array[Herb::AST::Node?]
1691
+ def child_nodes: () -> Array[Herb::AST::Node?]
1692
+
1693
+ # : () -> Array[Herb::AST::Node]
1694
+ def compact_child_nodes: () -> Array[Herb::AST::Node]
1695
+
1696
+ # : () -> String
1697
+ def inspect: () -> String
1698
+
1699
+ # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String
1700
+ def tree_inspect: (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String
1701
+ end
1702
+
1607
1703
  # : type serialized_erb_yield_node = {
1608
1704
  # | tag_opening: Herb::Token?,
1609
1705
  # | content: Herb::Token?,
@@ -3,6 +3,18 @@
3
3
  module Herb
4
4
  class Engine
5
5
  class Compiler < ::Herb::Visitor
6
+ EXPRESSION_TOKEN_TYPES: untyped
7
+
8
+ TRAILING_WHITESPACE: ::Regexp
9
+
10
+ TRAILING_INDENTATION: ::Regexp
11
+
12
+ TRAILING_INDENTATION_CAPTURE: ::Regexp
13
+
14
+ WHITESPACE_ONLY: ::Regexp
15
+
16
+ WHITESPACE_ONLY_CAPTURE: ::Regexp
17
+
6
18
  attr_reader tokens: untyped
7
19
 
8
20
  def initialize: (untyped engine, ?untyped options) -> untyped
@@ -83,12 +95,17 @@ module Herb
83
95
 
84
96
  private
85
97
 
98
+ def check_for_escaped_erb_tag!: (untyped opening) -> untyped
99
+
86
100
  def current_context: () -> untyped
87
101
 
88
102
  def push_context: (untyped context) -> untyped
89
103
 
90
104
  def pop_context: () -> untyped
91
105
 
106
+ # : (untyped node) { () -> untyped } -> untyped
107
+ def with_element_context: (untyped node) { () -> untyped } -> untyped
108
+
92
109
  def process_erb_tag: (untyped node, ?skip_comment_check: untyped) -> untyped
93
110
 
94
111
  def add_text: (untyped text) -> untyped
@@ -129,12 +146,24 @@ module Herb
129
146
 
130
147
  def preceding_token_ends_with_newline?: () -> untyped
131
148
 
132
- def extract_lspace: () -> untyped
149
+ def left_trim?: (untyped node) -> untyped
150
+
151
+ def right_trim?: (untyped node) -> untyped
152
+
153
+ def last_text_token: () -> untyped
154
+
155
+ def extract_leading_space: () -> untyped
133
156
 
134
- def extract_and_remove_lspace!: () -> untyped
157
+ def leading_space_follows_newline?: () -> untyped
158
+
159
+ def extract_and_remove_leading_space!: () -> untyped
135
160
 
136
161
  def apply_trim: (untyped node, untyped code) -> untyped
137
162
 
163
+ def save_pending_leading_whitespace!: (untyped whitespace) -> untyped
164
+
165
+ def restore_pending_leading_whitespace!: () -> untyped
166
+
138
167
  def remove_trailing_whitespace_from_last_token!: () -> untyped
139
168
  end
140
169
  end
@@ -14,6 +14,10 @@ module Herb
14
14
 
15
15
  def validate_attribute_name_security: (untyped node) -> untyped
16
16
 
17
+ def tag_attributes_prism_node?: (untyped prism_node) -> untyped
18
+
19
+ def conditional_tag_attributes_prism_node?: (untyped prism_node) -> untyped
20
+
17
21
  def add_security_error: (untyped location, untyped message, untyped suggestion) -> untyped
18
22
 
19
23
  def add_diagnostic: (untyped message, untyped location, untyped severity, ?code: untyped, ?source: untyped, ?suggestion: untyped) -> untyped
data/sig/herb/engine.rbs CHANGED
@@ -27,6 +27,9 @@ module Herb
27
27
  class CompilationError < StandardError
28
28
  end
29
29
 
30
+ class GeneratorTemplateError < CompilationError
31
+ end
32
+
30
33
  class InvalidRubyError < CompilationError
31
34
  attr_reader compiled_source: untyped
32
35
 
data/sig/herb/errors.rbs CHANGED
@@ -572,5 +572,127 @@ module Herb
572
572
  # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String
573
573
  def tree_inspect: (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String
574
574
  end
575
+
576
+ class StrictLocalsPositionalArgumentError < Error
577
+ include Colors
578
+
579
+ attr_reader name: String?
580
+
581
+ # : (String, Location?, String, String) -> void
582
+ def initialize: (String, Location?, String, String) -> void
583
+
584
+ # : () -> String
585
+ def inspect: () -> String
586
+
587
+ # : () -> serialized_strict_locals_positional_argument_error
588
+ def to_hash: () -> serialized_strict_locals_positional_argument_error
589
+
590
+ # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String
591
+ def tree_inspect: (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String
592
+ end
593
+
594
+ class StrictLocalsBlockArgumentError < Error
595
+ include Colors
596
+
597
+ attr_reader name: String?
598
+
599
+ # : (String, Location?, String, String) -> void
600
+ def initialize: (String, Location?, String, String) -> void
601
+
602
+ # : () -> String
603
+ def inspect: () -> String
604
+
605
+ # : () -> serialized_strict_locals_block_argument_error
606
+ def to_hash: () -> serialized_strict_locals_block_argument_error
607
+
608
+ # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String
609
+ def tree_inspect: (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String
610
+ end
611
+
612
+ class StrictLocalsSplatArgumentError < Error
613
+ include Colors
614
+
615
+ attr_reader name: String?
616
+
617
+ # : (String, Location?, String, String) -> void
618
+ def initialize: (String, Location?, String, String) -> void
619
+
620
+ # : () -> String
621
+ def inspect: () -> String
622
+
623
+ # : () -> serialized_strict_locals_splat_argument_error
624
+ def to_hash: () -> serialized_strict_locals_splat_argument_error
625
+
626
+ # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String
627
+ def tree_inspect: (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String
628
+ end
629
+
630
+ class StrictLocalsMissingParenthesisError < Error
631
+ include Colors
632
+
633
+ attr_reader rest: String?
634
+
635
+ # : (String, Location?, String, String) -> void
636
+ def initialize: (String, Location?, String, String) -> void
637
+
638
+ # : () -> String
639
+ def inspect: () -> String
640
+
641
+ # : () -> serialized_strict_locals_missing_parenthesis_error
642
+ def to_hash: () -> serialized_strict_locals_missing_parenthesis_error
643
+
644
+ # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String
645
+ def tree_inspect: (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String
646
+ end
647
+
648
+ class StrictLocalsDuplicateDeclarationError < Error
649
+ include Colors
650
+
651
+ # : () -> String
652
+ def inspect: () -> String
653
+
654
+ # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String
655
+ def tree_inspect: (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String
656
+ end
657
+
658
+ class VoidElementContentError < Error
659
+ include Colors
660
+
661
+ attr_reader tag_name: Herb::Token?
662
+
663
+ attr_reader helper_name: String?
664
+
665
+ attr_reader content_type: String?
666
+
667
+ # : (String, Location?, String, Herb::Token, String, String) -> void
668
+ def initialize: (String, Location?, String, Herb::Token, String, String) -> void
669
+
670
+ # : () -> String
671
+ def inspect: () -> String
672
+
673
+ # : () -> serialized_void_element_content_error
674
+ def to_hash: () -> serialized_void_element_content_error
675
+
676
+ # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String
677
+ def tree_inspect: (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String
678
+ end
679
+
680
+ class DotNotationCasingError < Error
681
+ include Colors
682
+
683
+ attr_reader segment: Herb::Token?
684
+
685
+ # : (String, Location?, String, Herb::Token) -> void
686
+ def initialize: (String, Location?, String, Herb::Token) -> void
687
+
688
+ # : () -> String
689
+ def inspect: () -> String
690
+
691
+ # : () -> serialized_dot_notation_casing_error
692
+ def to_hash: () -> serialized_dot_notation_casing_error
693
+
694
+ # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String
695
+ def tree_inspect: (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String
696
+ end
575
697
  end
576
698
  end
@@ -12,6 +12,8 @@ module Herb
12
12
 
13
13
  attr_reader render_nodes: bool
14
14
 
15
+ attr_reader strict_locals: bool
16
+
15
17
  attr_reader prism_program: bool
16
18
 
17
19
  attr_reader prism_nodes: bool
@@ -28,14 +30,16 @@ module Herb
28
30
 
29
31
  DEFAULT_RENDER_NODES: bool
30
32
 
33
+ DEFAULT_STRICT_LOCALS: bool
34
+
31
35
  DEFAULT_PRISM_PROGRAM: bool
32
36
 
33
37
  DEFAULT_PRISM_NODES: bool
34
38
 
35
39
  DEFAULT_PRISM_NODES_DEEP: bool
36
40
 
37
- # : (?strict: bool, ?track_whitespace: bool, ?analyze: bool, ?action_view_helpers: bool, ?prism_nodes: bool, ?prism_nodes_deep: bool, ?prism_program: bool) -> void
38
- def initialize: (?strict: bool, ?track_whitespace: bool, ?analyze: bool, ?action_view_helpers: bool, ?prism_nodes: bool, ?prism_nodes_deep: bool, ?prism_program: bool) -> void
41
+ # : (?strict: bool, ?track_whitespace: bool, ?analyze: bool, ?action_view_helpers: bool, ?render_nodes: bool, ?strict_locals: bool, ?prism_nodes: bool, ?prism_nodes_deep: bool, ?prism_program: bool) -> void
42
+ def initialize: (?strict: bool, ?track_whitespace: bool, ?analyze: bool, ?action_view_helpers: bool, ?render_nodes: bool, ?strict_locals: bool, ?prism_nodes: bool, ?prism_nodes_deep: bool, ?prism_program: bool) -> void
39
43
 
40
44
  # : () -> Hash[Symbol, bool]
41
45
  def to_h: () -> Hash[Symbol, bool]
data/sig/herb/visitor.rbs CHANGED
@@ -13,6 +13,12 @@ module Herb
13
13
  # : (Herb::AST::Node) -> void
14
14
  def visit_child_nodes: (Herb::AST::Node) -> void
15
15
 
16
+ # : (Herb::AST::Node) -> void
17
+ def visit_node: (Herb::AST::Node) -> void
18
+
19
+ # : (Herb::AST::Node) -> void
20
+ def visit_erb_node: (Herb::AST::Node) -> void
21
+
16
22
  # : (Herb::AST::DocumentNode) -> void
17
23
  def visit_document_node: (Herb::AST::DocumentNode) -> void
18
24
 
@@ -127,6 +133,12 @@ module Herb
127
133
  # : (Herb::AST::ERBRenderNode) -> void
128
134
  def visit_erb_render_node: (Herb::AST::ERBRenderNode) -> void
129
135
 
136
+ # : (Herb::AST::RubyStrictLocalNode) -> void
137
+ def visit_ruby_strict_local_node: (Herb::AST::RubyStrictLocalNode) -> void
138
+
139
+ # : (Herb::AST::ERBStrictLocalsNode) -> void
140
+ def visit_erb_strict_locals_node: (Herb::AST::ERBStrictLocalsNode) -> void
141
+
130
142
  # : (Herb::AST::ERBYieldNode) -> void
131
143
  def visit_erb_yield_node: (Herb::AST::ERBYieldNode) -> void
132
144