herb 0.9.2 → 0.9.4

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 (165) 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/ast/erb_content_node.rb +32 -0
  11. data/lib/herb/ast/nodes.rb +244 -3
  12. data/lib/herb/cli.rb +12 -2
  13. data/lib/herb/engine/compiler.rb +166 -75
  14. data/lib/herb/engine/validators/security_validator.rb +40 -0
  15. data/lib/herb/engine.rb +3 -0
  16. data/lib/herb/errors.rb +268 -0
  17. data/lib/herb/parser_options.rb +7 -2
  18. data/lib/herb/project.rb +58 -17
  19. data/lib/herb/version.rb +1 -1
  20. data/lib/herb/visitor.rb +82 -0
  21. data/lib/herb.rb +1 -0
  22. data/sig/herb/ast/erb_content_node.rbs +13 -0
  23. data/sig/herb/ast/nodes.rbs +98 -2
  24. data/sig/herb/engine/compiler.rbs +31 -2
  25. data/sig/herb/engine/validators/security_validator.rbs +4 -0
  26. data/sig/herb/engine.rbs +3 -0
  27. data/sig/herb/errors.rbs +122 -0
  28. data/sig/herb/parser_options.rbs +6 -2
  29. data/sig/herb/visitor.rbs +12 -0
  30. data/sig/serialized_ast_errors.rbs +29 -0
  31. data/sig/serialized_ast_nodes.rbs +19 -0
  32. data/src/analyze/action_view/attribute_extraction_helpers.c +420 -91
  33. data/src/analyze/action_view/image_tag.c +87 -0
  34. data/src/analyze/action_view/javascript_include_tag.c +22 -12
  35. data/src/analyze/action_view/registry.c +6 -3
  36. data/src/analyze/action_view/tag.c +19 -2
  37. data/src/analyze/action_view/tag_helper_node_builders.c +105 -36
  38. data/src/analyze/action_view/tag_helpers.c +792 -44
  39. data/src/analyze/analyze.c +167 -13
  40. data/src/analyze/{helpers.c → analyze_helpers.c} +1 -1
  41. data/src/analyze/analyzed_ruby.c +1 -1
  42. data/src/analyze/builders.c +11 -8
  43. data/src/analyze/conditional_elements.c +6 -7
  44. data/src/analyze/conditional_open_tags.c +6 -7
  45. data/src/analyze/control_type.c +4 -2
  46. data/src/analyze/invalid_structures.c +5 -5
  47. data/src/analyze/missing_end.c +2 -2
  48. data/src/analyze/parse_errors.c +47 -6
  49. data/src/analyze/prism_annotate.c +7 -7
  50. data/src/analyze/render_nodes.c +6 -26
  51. data/src/analyze/strict_locals.c +651 -0
  52. data/src/analyze/transform.c +7 -0
  53. data/src/{ast_node.c → ast/ast_node.c} +8 -8
  54. data/src/{ast_nodes.c → ast/ast_nodes.c} +82 -11
  55. data/src/{ast_pretty_print.c → ast/ast_pretty_print.c} +113 -9
  56. data/src/{pretty_print.c → ast/pretty_print.c} +9 -9
  57. data/src/errors.c +398 -8
  58. data/src/extract.c +5 -5
  59. data/src/herb.c +15 -5
  60. data/src/include/analyze/action_view/attribute_extraction_helpers.h +3 -1
  61. data/src/include/analyze/action_view/tag_helper_handler.h +3 -3
  62. data/src/include/analyze/action_view/tag_helper_node_builders.h +34 -5
  63. data/src/include/analyze/action_view/tag_helpers.h +4 -3
  64. data/src/include/analyze/analyze.h +12 -5
  65. data/src/include/analyze/analyzed_ruby.h +2 -2
  66. data/src/include/analyze/builders.h +4 -4
  67. data/src/include/analyze/conditional_elements.h +2 -2
  68. data/src/include/analyze/conditional_open_tags.h +2 -2
  69. data/src/include/analyze/control_type.h +1 -1
  70. data/src/include/analyze/helpers.h +2 -2
  71. data/src/include/analyze/invalid_structures.h +1 -1
  72. data/src/include/analyze/prism_annotate.h +2 -2
  73. data/src/include/analyze/render_nodes.h +1 -1
  74. data/src/include/analyze/strict_locals.h +11 -0
  75. data/src/include/{ast_node.h → ast/ast_node.h} +4 -4
  76. data/src/include/{ast_nodes.h → ast/ast_nodes.h} +38 -14
  77. data/src/include/{ast_pretty_print.h → ast/ast_pretty_print.h} +3 -3
  78. data/src/include/{pretty_print.h → ast/pretty_print.h} +4 -4
  79. data/src/include/errors.h +65 -7
  80. data/src/include/extract.h +2 -2
  81. data/src/include/herb.h +5 -5
  82. data/src/include/{lex_helpers.h → lexer/lex_helpers.h} +5 -5
  83. data/src/include/{lexer.h → lexer/lexer.h} +1 -1
  84. data/src/include/{lexer_peek_helpers.h → lexer/lexer_peek_helpers.h} +2 -2
  85. data/src/include/{lexer_struct.h → lexer/lexer_struct.h} +2 -2
  86. data/src/include/{token.h → lexer/token.h} +3 -3
  87. data/src/include/{token_matchers.h → lexer/token_matchers.h} +1 -1
  88. data/src/include/{token_struct.h → lexer/token_struct.h} +3 -3
  89. data/src/include/{util → lib}/hb_foreach.h +1 -1
  90. data/src/include/{util → lib}/hb_string.h +5 -1
  91. data/src/include/{location.h → location/location.h} +1 -1
  92. data/src/include/parser/dot_notation.h +12 -0
  93. data/src/include/{parser.h → parser/parser.h} +11 -4
  94. data/src/include/{parser_helpers.h → parser/parser_helpers.h} +6 -6
  95. data/src/include/{prism_context.h → prism/prism_context.h} +2 -2
  96. data/src/include/{prism_helpers.h → prism/prism_helpers.h} +6 -6
  97. data/src/include/{html_util.h → util/html_util.h} +1 -1
  98. data/src/include/util/ruby_util.h +9 -0
  99. data/src/include/{utf8.h → util/utf8.h} +1 -1
  100. data/src/include/{util.h → util/util.h} +1 -1
  101. data/src/include/version.h +1 -1
  102. data/src/include/visitor.h +3 -3
  103. data/src/{lexer_peek_helpers.c → lexer/lexer_peek_helpers.c} +3 -3
  104. data/src/{token.c → lexer/token.c} +8 -8
  105. data/src/{token_matchers.c → lexer/token_matchers.c} +2 -2
  106. data/src/lexer.c +6 -6
  107. data/src/{util → lib}/hb_allocator.c +2 -2
  108. data/src/{util → lib}/hb_arena.c +1 -1
  109. data/src/{util → lib}/hb_arena_debug.c +2 -2
  110. data/src/{util → lib}/hb_array.c +2 -2
  111. data/src/{util → lib}/hb_buffer.c +2 -2
  112. data/src/{util → lib}/hb_narray.c +1 -1
  113. data/src/{util → lib}/hb_string.c +2 -2
  114. data/src/{location.c → location/location.c} +2 -2
  115. data/src/{position.c → location/position.c} +2 -2
  116. data/src/{range.c → location/range.c} +1 -1
  117. data/src/main.c +11 -11
  118. data/src/parser/dot_notation.c +100 -0
  119. data/src/{parser_match_tags.c → parser/match_tags.c} +34 -5
  120. data/src/{parser_helpers.c → parser/parser_helpers.c} +10 -10
  121. data/src/parser.c +68 -32
  122. data/src/{prism_helpers.c → prism/prism_helpers.c} +7 -7
  123. data/src/{ruby_parser.c → prism/ruby_parser.c} +1 -1
  124. data/src/{html_util.c → util/html_util.c} +4 -4
  125. data/src/{io.c → util/io.c} +3 -3
  126. data/src/util/ruby_util.c +42 -0
  127. data/src/{utf8.c → util/utf8.c} +2 -2
  128. data/src/{util.c → util/util.c} +4 -4
  129. data/src/visitor.c +35 -3
  130. data/templates/ext/herb/error_helpers.c.erb +2 -2
  131. data/templates/ext/herb/nodes.c.erb +1 -1
  132. data/templates/java/error_helpers.c.erb +1 -1
  133. data/templates/java/error_helpers.h.erb +2 -2
  134. data/templates/java/nodes.c.erb +4 -4
  135. data/templates/java/nodes.h.erb +1 -1
  136. data/templates/javascript/packages/node/extension/error_helpers.cpp.erb +4 -4
  137. data/templates/javascript/packages/node/extension/nodes.cpp.erb +4 -4
  138. data/templates/lib/herb/visitor.rb.erb +14 -0
  139. data/templates/src/analyze/missing_end.c.erb +2 -2
  140. data/templates/src/{ast_nodes.c.erb → ast/ast_nodes.c.erb} +9 -9
  141. data/templates/src/{ast_pretty_print.c.erb → ast/ast_pretty_print.c.erb} +8 -8
  142. data/templates/src/errors.c.erb +8 -8
  143. data/templates/src/include/{ast_nodes.h.erb → ast/ast_nodes.h.erb} +11 -12
  144. data/templates/src/include/{ast_pretty_print.h.erb → ast/ast_pretty_print.h.erb} +2 -2
  145. data/templates/src/include/errors.h.erb +7 -7
  146. data/templates/src/{parser_match_tags.c.erb → parser/match_tags.c.erb} +4 -4
  147. data/templates/src/visitor.c.erb +3 -3
  148. data/templates/wasm/error_helpers.cpp.erb +4 -4
  149. data/templates/wasm/nodes.cpp.erb +5 -5
  150. metadata +76 -68
  151. data/src/include/element_source.h +0 -10
  152. /data/src/include/{util → lib}/hb_allocator.h +0 -0
  153. /data/src/include/{util → lib}/hb_arena.h +0 -0
  154. /data/src/include/{util → lib}/hb_arena_debug.h +0 -0
  155. /data/src/include/{util → lib}/hb_array.h +0 -0
  156. /data/src/include/{util → lib}/hb_buffer.h +0 -0
  157. /data/src/include/{util → lib}/hb_narray.h +0 -0
  158. /data/src/include/{util → lib}/string.h +0 -0
  159. /data/src/include/{position.h → location/position.h} +0 -0
  160. /data/src/include/{range.h → location/range.h} +0 -0
  161. /data/src/include/{herb_prism_node.h → prism/herb_prism_node.h} +0 -0
  162. /data/src/include/{prism_serialized.h → prism/prism_serialized.h} +0 -0
  163. /data/src/include/{ruby_parser.h → prism/ruby_parser.h} +0 -0
  164. /data/src/include/{io.h → util/io.h} +0 -0
  165. /data/templates/src/include/{util → lib}/hb_foreach.h.erb +0 -0
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: herb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.2
4
+ version: 0.9.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marco Roth
@@ -36,6 +36,7 @@ files:
36
36
  - herb.gemspec
37
37
  - lib/herb.rb
38
38
  - lib/herb/ast.rb
39
+ - lib/herb/ast/erb_content_node.rb
39
40
  - lib/herb/ast/helpers.rb
40
41
  - lib/herb/ast/node.rb
41
42
  - lib/herb/ast/nodes.rb
@@ -72,6 +73,7 @@ files:
72
73
  - lib/herb/warnings.rb
73
74
  - sig/herb.rbs
74
75
  - sig/herb/ast.rbs
76
+ - sig/herb/ast/erb_content_node.rbs
75
77
  - sig/herb/ast/helpers.rbs
76
78
  - sig/herb/ast/node.rbs
77
79
  - sig/herb/ast/nodes.rbs
@@ -111,6 +113,7 @@ files:
111
113
  - sig/serialized_ast_nodes.rbs
112
114
  - src/analyze/action_view/attribute_extraction_helpers.c
113
115
  - src/analyze/action_view/content_tag.c
116
+ - src/analyze/action_view/image_tag.c
114
117
  - src/analyze/action_view/javascript_include_tag.c
115
118
  - src/analyze/action_view/javascript_tag.c
116
119
  - src/analyze/action_view/link_to.c
@@ -120,25 +123,26 @@ files:
120
123
  - src/analyze/action_view/tag_helpers.c
121
124
  - src/analyze/action_view/turbo_frame_tag.c
122
125
  - src/analyze/analyze.c
126
+ - src/analyze/analyze_helpers.c
123
127
  - src/analyze/analyzed_ruby.c
124
128
  - src/analyze/builders.c
125
129
  - src/analyze/conditional_elements.c
126
130
  - src/analyze/conditional_open_tags.c
127
131
  - src/analyze/control_type.c
128
- - src/analyze/helpers.c
129
132
  - src/analyze/invalid_structures.c
130
133
  - src/analyze/missing_end.c
131
134
  - src/analyze/parse_errors.c
132
135
  - src/analyze/prism_annotate.c
133
136
  - src/analyze/render_nodes.c
137
+ - src/analyze/strict_locals.c
134
138
  - src/analyze/transform.c
135
- - src/ast_node.c
136
- - src/ast_nodes.c
137
- - src/ast_pretty_print.c
139
+ - src/ast/ast_node.c
140
+ - src/ast/ast_nodes.c
141
+ - src/ast/ast_pretty_print.c
142
+ - src/ast/pretty_print.c
138
143
  - src/errors.c
139
144
  - src/extract.c
140
145
  - src/herb.c
141
- - src/html_util.c
142
146
  - src/include/analyze/action_view/attribute_extraction_helpers.h
143
147
  - src/include/analyze/action_view/tag_helper_handler.h
144
148
  - src/include/analyze/action_view/tag_helper_node_builders.h
@@ -153,71 +157,75 @@ files:
153
157
  - src/include/analyze/invalid_structures.h
154
158
  - src/include/analyze/prism_annotate.h
155
159
  - src/include/analyze/render_nodes.h
156
- - src/include/ast_node.h
157
- - src/include/ast_nodes.h
158
- - src/include/ast_pretty_print.h
159
- - src/include/element_source.h
160
+ - src/include/analyze/strict_locals.h
161
+ - src/include/ast/ast_node.h
162
+ - src/include/ast/ast_nodes.h
163
+ - src/include/ast/ast_pretty_print.h
164
+ - src/include/ast/pretty_print.h
160
165
  - src/include/errors.h
161
166
  - src/include/extract.h
162
167
  - src/include/herb.h
163
- - src/include/herb_prism_node.h
164
- - src/include/html_util.h
165
- - src/include/io.h
166
- - src/include/lex_helpers.h
167
- - src/include/lexer.h
168
- - src/include/lexer_peek_helpers.h
169
- - src/include/lexer_struct.h
170
- - src/include/location.h
168
+ - src/include/lexer/lex_helpers.h
169
+ - src/include/lexer/lexer.h
170
+ - src/include/lexer/lexer_peek_helpers.h
171
+ - src/include/lexer/lexer_struct.h
172
+ - src/include/lexer/token.h
173
+ - src/include/lexer/token_matchers.h
174
+ - src/include/lexer/token_struct.h
175
+ - src/include/lib/hb_allocator.h
176
+ - src/include/lib/hb_arena.h
177
+ - src/include/lib/hb_arena_debug.h
178
+ - src/include/lib/hb_array.h
179
+ - src/include/lib/hb_buffer.h
180
+ - src/include/lib/hb_foreach.h
181
+ - src/include/lib/hb_narray.h
182
+ - src/include/lib/hb_string.h
183
+ - src/include/lib/string.h
184
+ - src/include/location/location.h
185
+ - src/include/location/position.h
186
+ - src/include/location/range.h
171
187
  - src/include/macros.h
172
- - src/include/parser.h
173
- - src/include/parser_helpers.h
174
- - src/include/position.h
175
- - src/include/pretty_print.h
176
- - src/include/prism_context.h
177
- - src/include/prism_helpers.h
178
- - src/include/prism_serialized.h
179
- - src/include/range.h
180
- - src/include/ruby_parser.h
181
- - src/include/token.h
182
- - src/include/token_matchers.h
183
- - src/include/token_struct.h
184
- - src/include/utf8.h
185
- - src/include/util.h
186
- - src/include/util/hb_allocator.h
187
- - src/include/util/hb_arena.h
188
- - src/include/util/hb_arena_debug.h
189
- - src/include/util/hb_array.h
190
- - src/include/util/hb_buffer.h
191
- - src/include/util/hb_foreach.h
192
- - src/include/util/hb_narray.h
193
- - src/include/util/hb_string.h
194
- - src/include/util/string.h
188
+ - src/include/parser/dot_notation.h
189
+ - src/include/parser/parser.h
190
+ - src/include/parser/parser_helpers.h
191
+ - src/include/prism/herb_prism_node.h
192
+ - src/include/prism/prism_context.h
193
+ - src/include/prism/prism_helpers.h
194
+ - src/include/prism/prism_serialized.h
195
+ - src/include/prism/ruby_parser.h
196
+ - src/include/util/html_util.h
197
+ - src/include/util/io.h
198
+ - src/include/util/ruby_util.h
199
+ - src/include/util/utf8.h
200
+ - src/include/util/util.h
195
201
  - src/include/version.h
196
202
  - src/include/visitor.h
197
- - src/io.c
198
203
  - src/lexer.c
199
- - src/lexer_peek_helpers.c
200
- - src/location.c
204
+ - src/lexer/lexer_peek_helpers.c
205
+ - src/lexer/token.c
206
+ - src/lexer/token_matchers.c
207
+ - src/lib/hb_allocator.c
208
+ - src/lib/hb_arena.c
209
+ - src/lib/hb_arena_debug.c
210
+ - src/lib/hb_array.c
211
+ - src/lib/hb_buffer.c
212
+ - src/lib/hb_narray.c
213
+ - src/lib/hb_string.c
214
+ - src/location/location.c
215
+ - src/location/position.c
216
+ - src/location/range.c
201
217
  - src/main.c
202
218
  - src/parser.c
203
- - src/parser_helpers.c
204
- - src/parser_match_tags.c
205
- - src/position.c
206
- - src/pretty_print.c
207
- - src/prism_helpers.c
208
- - src/range.c
209
- - src/ruby_parser.c
210
- - src/token.c
211
- - src/token_matchers.c
212
- - src/utf8.c
213
- - src/util.c
214
- - src/util/hb_allocator.c
215
- - src/util/hb_arena.c
216
- - src/util/hb_arena_debug.c
217
- - src/util/hb_array.c
218
- - src/util/hb_buffer.c
219
- - src/util/hb_narray.c
220
- - src/util/hb_string.c
219
+ - src/parser/dot_notation.c
220
+ - src/parser/match_tags.c
221
+ - src/parser/parser_helpers.c
222
+ - src/prism/prism_helpers.c
223
+ - src/prism/ruby_parser.c
224
+ - src/util/html_util.c
225
+ - src/util/io.c
226
+ - src/util/ruby_util.c
227
+ - src/util/utf8.c
228
+ - src/util/util.c
221
229
  - src/visitor.c
222
230
  - templates/ext/herb/error_helpers.c.erb
223
231
  - templates/ext/herb/error_helpers.h.erb
@@ -251,14 +259,14 @@ files:
251
259
  - templates/sig/serialized_ast_nodes.rbs.erb
252
260
  - templates/src/analyze/missing_end.c.erb
253
261
  - templates/src/analyze/transform.c.erb
254
- - templates/src/ast_nodes.c.erb
255
- - templates/src/ast_pretty_print.c.erb
262
+ - templates/src/ast/ast_nodes.c.erb
263
+ - templates/src/ast/ast_pretty_print.c.erb
256
264
  - templates/src/errors.c.erb
257
- - templates/src/include/ast_nodes.h.erb
258
- - templates/src/include/ast_pretty_print.h.erb
265
+ - templates/src/include/ast/ast_nodes.h.erb
266
+ - templates/src/include/ast/ast_pretty_print.h.erb
259
267
  - templates/src/include/errors.h.erb
260
- - templates/src/include/util/hb_foreach.h.erb
261
- - templates/src/parser_match_tags.c.erb
268
+ - templates/src/include/lib/hb_foreach.h.erb
269
+ - templates/src/parser/match_tags.c.erb
262
270
  - templates/src/visitor.c.erb
263
271
  - templates/template.rb
264
272
  - templates/wasm/error_helpers.cpp.erb
@@ -1,10 +0,0 @@
1
- #ifndef HERB_ELEMENT_SOURCE_H
2
- #define HERB_ELEMENT_SOURCE_H
3
-
4
- #include "util/hb_string.h"
5
-
6
- #define ELEMENT_SOURCE_HTML hb_string("HTML")
7
- #define ELEMENT_SOURCE_HAML hb_string("Haml")
8
- #define ELEMENT_SOURCE_SLIM hb_string("Slim")
9
-
10
- #endif
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes