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.
- checksums.yaml +4 -4
- data/README.md +2 -0
- data/config.yml +125 -0
- data/ext/herb/error_helpers.c +172 -2
- data/ext/herb/extconf.rb +6 -0
- data/ext/herb/extension.c +16 -2
- data/ext/herb/extension_helpers.c +6 -5
- data/ext/herb/extension_helpers.h +4 -4
- data/ext/herb/nodes.c +89 -3
- 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/erb_content_node.rb +32 -0
- data/lib/herb/ast/nodes.rb +244 -3
- data/lib/herb/cli.rb +12 -2
- data/lib/herb/engine/compiler.rb +166 -75
- data/lib/herb/engine/validators/security_validator.rb +40 -0
- data/lib/herb/engine.rb +3 -0
- data/lib/herb/errors.rb +268 -0
- data/lib/herb/parser_options.rb +7 -2
- data/lib/herb/project.rb +58 -17
- data/lib/herb/version.rb +1 -1
- data/lib/herb/visitor.rb +82 -0
- data/lib/herb.rb +1 -0
- data/sig/herb/ast/erb_content_node.rbs +13 -0
- data/sig/herb/ast/nodes.rbs +98 -2
- data/sig/herb/engine/compiler.rbs +31 -2
- data/sig/herb/engine/validators/security_validator.rbs +4 -0
- data/sig/herb/engine.rbs +3 -0
- data/sig/herb/errors.rbs +122 -0
- data/sig/herb/parser_options.rbs +6 -2
- data/sig/herb/visitor.rbs +12 -0
- data/sig/serialized_ast_errors.rbs +29 -0
- data/sig/serialized_ast_nodes.rbs +19 -0
- data/src/analyze/action_view/attribute_extraction_helpers.c +420 -91
- data/src/analyze/action_view/image_tag.c +87 -0
- data/src/analyze/action_view/javascript_include_tag.c +22 -12
- data/src/analyze/action_view/registry.c +6 -3
- data/src/analyze/action_view/tag.c +19 -2
- data/src/analyze/action_view/tag_helper_node_builders.c +105 -36
- data/src/analyze/action_view/tag_helpers.c +792 -44
- data/src/analyze/analyze.c +167 -13
- data/src/analyze/{helpers.c → analyze_helpers.c} +1 -1
- data/src/analyze/analyzed_ruby.c +1 -1
- data/src/analyze/builders.c +11 -8
- data/src/analyze/conditional_elements.c +6 -7
- data/src/analyze/conditional_open_tags.c +6 -7
- data/src/analyze/control_type.c +4 -2
- data/src/analyze/invalid_structures.c +5 -5
- data/src/analyze/missing_end.c +2 -2
- data/src/analyze/parse_errors.c +47 -6
- data/src/analyze/prism_annotate.c +7 -7
- data/src/analyze/render_nodes.c +6 -26
- data/src/analyze/strict_locals.c +651 -0
- data/src/analyze/transform.c +7 -0
- data/src/{ast_node.c → ast/ast_node.c} +8 -8
- data/src/{ast_nodes.c → ast/ast_nodes.c} +82 -11
- data/src/{ast_pretty_print.c → ast/ast_pretty_print.c} +113 -9
- data/src/{pretty_print.c → ast/pretty_print.c} +9 -9
- data/src/errors.c +398 -8
- data/src/extract.c +5 -5
- data/src/herb.c +15 -5
- data/src/include/analyze/action_view/attribute_extraction_helpers.h +3 -1
- data/src/include/analyze/action_view/tag_helper_handler.h +3 -3
- data/src/include/analyze/action_view/tag_helper_node_builders.h +34 -5
- data/src/include/analyze/action_view/tag_helpers.h +4 -3
- data/src/include/analyze/analyze.h +12 -5
- data/src/include/analyze/analyzed_ruby.h +2 -2
- data/src/include/analyze/builders.h +4 -4
- data/src/include/analyze/conditional_elements.h +2 -2
- data/src/include/analyze/conditional_open_tags.h +2 -2
- data/src/include/analyze/control_type.h +1 -1
- data/src/include/analyze/helpers.h +2 -2
- data/src/include/analyze/invalid_structures.h +1 -1
- data/src/include/analyze/prism_annotate.h +2 -2
- data/src/include/analyze/render_nodes.h +1 -1
- data/src/include/analyze/strict_locals.h +11 -0
- data/src/include/{ast_node.h → ast/ast_node.h} +4 -4
- data/src/include/{ast_nodes.h → ast/ast_nodes.h} +38 -14
- data/src/include/{ast_pretty_print.h → ast/ast_pretty_print.h} +3 -3
- data/src/include/{pretty_print.h → ast/pretty_print.h} +4 -4
- data/src/include/errors.h +65 -7
- data/src/include/extract.h +2 -2
- data/src/include/herb.h +5 -5
- data/src/include/{lex_helpers.h → lexer/lex_helpers.h} +5 -5
- data/src/include/{lexer.h → lexer/lexer.h} +1 -1
- data/src/include/{lexer_peek_helpers.h → lexer/lexer_peek_helpers.h} +2 -2
- data/src/include/{lexer_struct.h → lexer/lexer_struct.h} +2 -2
- data/src/include/{token.h → lexer/token.h} +3 -3
- data/src/include/{token_matchers.h → lexer/token_matchers.h} +1 -1
- data/src/include/{token_struct.h → lexer/token_struct.h} +3 -3
- data/src/include/{util → lib}/hb_foreach.h +1 -1
- data/src/include/{util → lib}/hb_string.h +5 -1
- data/src/include/{location.h → location/location.h} +1 -1
- data/src/include/parser/dot_notation.h +12 -0
- data/src/include/{parser.h → parser/parser.h} +11 -4
- data/src/include/{parser_helpers.h → parser/parser_helpers.h} +6 -6
- data/src/include/{prism_context.h → prism/prism_context.h} +2 -2
- data/src/include/{prism_helpers.h → prism/prism_helpers.h} +6 -6
- data/src/include/{html_util.h → util/html_util.h} +1 -1
- data/src/include/util/ruby_util.h +9 -0
- data/src/include/{utf8.h → util/utf8.h} +1 -1
- data/src/include/{util.h → util/util.h} +1 -1
- data/src/include/version.h +1 -1
- data/src/include/visitor.h +3 -3
- data/src/{lexer_peek_helpers.c → lexer/lexer_peek_helpers.c} +3 -3
- data/src/{token.c → lexer/token.c} +8 -8
- data/src/{token_matchers.c → lexer/token_matchers.c} +2 -2
- data/src/lexer.c +6 -6
- data/src/{util → lib}/hb_allocator.c +2 -2
- data/src/{util → lib}/hb_arena.c +1 -1
- data/src/{util → lib}/hb_arena_debug.c +2 -2
- data/src/{util → lib}/hb_array.c +2 -2
- data/src/{util → lib}/hb_buffer.c +2 -2
- data/src/{util → lib}/hb_narray.c +1 -1
- data/src/{util → lib}/hb_string.c +2 -2
- data/src/{location.c → location/location.c} +2 -2
- data/src/{position.c → location/position.c} +2 -2
- data/src/{range.c → location/range.c} +1 -1
- data/src/main.c +11 -11
- data/src/parser/dot_notation.c +100 -0
- data/src/{parser_match_tags.c → parser/match_tags.c} +34 -5
- data/src/{parser_helpers.c → parser/parser_helpers.c} +10 -10
- data/src/parser.c +68 -32
- data/src/{prism_helpers.c → prism/prism_helpers.c} +7 -7
- data/src/{ruby_parser.c → prism/ruby_parser.c} +1 -1
- data/src/{html_util.c → util/html_util.c} +4 -4
- data/src/{io.c → util/io.c} +3 -3
- data/src/util/ruby_util.c +42 -0
- data/src/{utf8.c → util/utf8.c} +2 -2
- data/src/{util.c → util/util.c} +4 -4
- data/src/visitor.c +35 -3
- data/templates/ext/herb/error_helpers.c.erb +2 -2
- data/templates/ext/herb/nodes.c.erb +1 -1
- data/templates/java/error_helpers.c.erb +1 -1
- data/templates/java/error_helpers.h.erb +2 -2
- data/templates/java/nodes.c.erb +4 -4
- data/templates/java/nodes.h.erb +1 -1
- data/templates/javascript/packages/node/extension/error_helpers.cpp.erb +4 -4
- data/templates/javascript/packages/node/extension/nodes.cpp.erb +4 -4
- data/templates/lib/herb/visitor.rb.erb +14 -0
- data/templates/src/analyze/missing_end.c.erb +2 -2
- data/templates/src/{ast_nodes.c.erb → ast/ast_nodes.c.erb} +9 -9
- data/templates/src/{ast_pretty_print.c.erb → ast/ast_pretty_print.c.erb} +8 -8
- data/templates/src/errors.c.erb +8 -8
- data/templates/src/include/{ast_nodes.h.erb → ast/ast_nodes.h.erb} +11 -12
- data/templates/src/include/{ast_pretty_print.h.erb → ast/ast_pretty_print.h.erb} +2 -2
- data/templates/src/include/errors.h.erb +7 -7
- data/templates/src/{parser_match_tags.c.erb → parser/match_tags.c.erb} +4 -4
- data/templates/src/visitor.c.erb +3 -3
- data/templates/wasm/error_helpers.cpp.erb +4 -4
- data/templates/wasm/nodes.cpp.erb +5 -5
- metadata +76 -68
- data/src/include/element_source.h +0 -10
- /data/src/include/{util → lib}/hb_allocator.h +0 -0
- /data/src/include/{util → lib}/hb_arena.h +0 -0
- /data/src/include/{util → lib}/hb_arena_debug.h +0 -0
- /data/src/include/{util → lib}/hb_array.h +0 -0
- /data/src/include/{util → lib}/hb_buffer.h +0 -0
- /data/src/include/{util → lib}/hb_narray.h +0 -0
- /data/src/include/{util → lib}/string.h +0 -0
- /data/src/include/{position.h → location/position.h} +0 -0
- /data/src/include/{range.h → location/range.h} +0 -0
- /data/src/include/{herb_prism_node.h → prism/herb_prism_node.h} +0 -0
- /data/src/include/{prism_serialized.h → prism/prism_serialized.h} +0 -0
- /data/src/include/{ruby_parser.h → prism/ruby_parser.h} +0 -0
- /data/src/include/{io.h → util/io.h} +0 -0
- /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
|
data/sig/herb/ast/nodes.rbs
CHANGED
|
@@ -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
|
|
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
|
|
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
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
|
data/sig/herb/parser_options.rbs
CHANGED
|
@@ -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
|
|