herb 0.9.5-arm-linux-gnu → 0.9.7-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 (47) hide show
  1. checksums.yaml +4 -4
  2. data/ext/herb/extension.c +8 -0
  3. data/ext/herb/extension_helpers.c +1 -0
  4. data/lib/herb/3.0/herb.so +0 -0
  5. data/lib/herb/3.1/herb.so +0 -0
  6. data/lib/herb/3.2/herb.so +0 -0
  7. data/lib/herb/3.3/herb.so +0 -0
  8. data/lib/herb/3.4/herb.so +0 -0
  9. data/lib/herb/4.0/herb.so +0 -0
  10. data/lib/herb/action_view/helper_registry.rb +8107 -0
  11. data/lib/herb/parser_options.rb +7 -2
  12. data/lib/herb/project.rb +2 -5
  13. data/lib/herb/version.rb +1 -1
  14. data/sig/herb/action_view/helper_registry.rbs +1144 -0
  15. data/sig/herb/parser_options.rbs +6 -2
  16. data/src/analyze/action_view/generated_handlers.c +355 -0
  17. data/src/analyze/action_view/generated_handlers.h +16 -0
  18. data/src/analyze/action_view/helper_registry.c +7244 -0
  19. data/src/analyze/action_view/image_tag.c +4 -31
  20. data/src/analyze/action_view/javascript_include_tag.c +1 -42
  21. data/src/analyze/action_view/javascript_tag.c +0 -52
  22. data/src/analyze/action_view/registry.c +2 -2
  23. data/src/analyze/action_view/tag_helpers.c +8 -120
  24. data/src/analyze/action_view/turbo_frame_tag.c +1 -36
  25. data/src/analyze/analyze.c +7 -0
  26. data/src/analyze/postfix_conditionals.c +326 -0
  27. data/src/analyze/ternary_conditionals.c +265 -0
  28. data/src/include/analyze/action_view/helper_registry.h +325 -0
  29. data/src/include/analyze/action_view/tag_helpers.h +0 -1
  30. data/src/include/analyze/postfix_conditionals.h +9 -0
  31. data/src/include/analyze/ternary_conditionals.h +15 -0
  32. data/src/include/parser/parser.h +1 -0
  33. data/src/include/version.h +1 -1
  34. data/src/parser.c +1 -0
  35. data/templates/java/org/herb/ast/HelperRegistry.java.erb +258 -0
  36. data/templates/javascript/packages/core/src/action-view-helpers.ts.erb +171 -0
  37. data/templates/javascript/packages/core/src/nodes.ts.erb +5 -1
  38. data/templates/lib/herb/action_view/helper_registry.rb.erb +288 -0
  39. data/templates/rust/src/action_view_helpers.rs.erb +154 -0
  40. data/templates/src/analyze/action_view/generated_handlers.c.erb +230 -0
  41. data/templates/src/analyze/action_view/generated_handlers.h.erb +12 -0
  42. data/templates/src/analyze/action_view/helper_registry.c.erb +114 -0
  43. data/templates/src/include/analyze/action_view/helper_registry.h.erb +82 -0
  44. data/templates/template.rb +338 -1
  45. metadata +19 -3
  46. data/src/analyze/action_view/content_tag.c +0 -78
  47. data/src/analyze/action_view/tag.c +0 -87
@@ -10,6 +10,8 @@ module Herb
10
10
 
11
11
  attr_reader action_view_helpers: bool
12
12
 
13
+ attr_reader transform_conditionals: bool
14
+
13
15
  attr_reader render_nodes: bool
14
16
 
15
17
  attr_reader strict_locals: bool
@@ -28,6 +30,8 @@ module Herb
28
30
 
29
31
  DEFAULT_ACTION_VIEW_HELPERS: bool
30
32
 
33
+ DEFAULT_TRANSFORM_CONDITIONALS: bool
34
+
31
35
  DEFAULT_RENDER_NODES: bool
32
36
 
33
37
  DEFAULT_STRICT_LOCALS: bool
@@ -38,8 +42,8 @@ module Herb
38
42
 
39
43
  DEFAULT_PRISM_NODES_DEEP: bool
40
44
 
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
45
+ # : (?strict: bool, ?track_whitespace: bool, ?analyze: bool, ?action_view_helpers: bool, ?transform_conditionals: bool, ?render_nodes: bool, ?strict_locals: bool, ?prism_nodes: bool, ?prism_nodes_deep: bool, ?prism_program: bool) -> void
46
+ def initialize: (?strict: bool, ?track_whitespace: bool, ?analyze: bool, ?action_view_helpers: bool, ?transform_conditionals: bool, ?render_nodes: bool, ?strict_locals: bool, ?prism_nodes: bool, ?prism_nodes_deep: bool, ?prism_program: bool) -> void
43
47
 
44
48
  # : () -> Hash[Symbol, bool]
45
49
  def to_h: () -> Hash[Symbol, bool]
@@ -0,0 +1,355 @@
1
+ // NOTE: This file is generated by the templates/template.rb script and should not
2
+ // be modified manually. See /home/runner/work/herb/herb/templates/src/analyze/action_view/generated_handlers.c.erb
3
+
4
+ #include "../../include/analyze/action_view/tag_helper_handler.h"
5
+ #include "../../include/lib/hb_allocator.h"
6
+ #include "../../include/lib/hb_string.h"
7
+
8
+ #include <prism.h>
9
+ #include <stdbool.h>
10
+ #include <string.h>
11
+
12
+ // ==========================================================================
13
+ // Generated detect functions
14
+ // ==========================================================================
15
+
16
+ bool detect_image_tag(pm_call_node_t* call_node, pm_parser_t* parser) {
17
+ if (!call_node || !call_node->name) { return false; }
18
+
19
+ pm_constant_t* constant = pm_constant_pool_id_to_constant(&parser->constant_pool, call_node->name);
20
+
21
+ return constant && constant->length == 9 && strncmp((const char*) constant->start, "image_tag", 9) == 0;
22
+ }
23
+
24
+ bool detect_javascript_include_tag(pm_call_node_t* call_node, pm_parser_t* parser) {
25
+ if (!call_node || !call_node->name) { return false; }
26
+
27
+ pm_constant_t* constant = pm_constant_pool_id_to_constant(&parser->constant_pool, call_node->name);
28
+
29
+ return constant && constant->length == 22 && strncmp((const char*) constant->start, "javascript_include_tag", 22) == 0;
30
+ }
31
+
32
+ bool detect_javascript_tag(pm_call_node_t* call_node, pm_parser_t* parser) {
33
+ if (!call_node || !call_node->name) { return false; }
34
+
35
+ pm_constant_t* constant = pm_constant_pool_id_to_constant(&parser->constant_pool, call_node->name);
36
+
37
+ return constant && constant->length == 14 && strncmp((const char*) constant->start, "javascript_tag", 14) == 0;
38
+ }
39
+
40
+ bool detect_content_tag(pm_call_node_t* call_node, pm_parser_t* parser) {
41
+ if (!call_node || !call_node->name) { return false; }
42
+
43
+ pm_constant_t* constant = pm_constant_pool_id_to_constant(&parser->constant_pool, call_node->name);
44
+
45
+ return constant && constant->length == 11 && strncmp((const char*) constant->start, "content_tag", 11) == 0;
46
+ }
47
+
48
+ bool detect_tag(pm_call_node_t* call_node, pm_parser_t* parser) {
49
+ if (!call_node || !call_node->receiver) { return false; }
50
+ if (call_node->receiver->type != PM_CALL_NODE) { return false; }
51
+
52
+ pm_call_node_t* receiver_node = (pm_call_node_t*) call_node->receiver;
53
+ if (!receiver_node->name) { return false; }
54
+
55
+ pm_constant_t* constant = pm_constant_pool_id_to_constant(&parser->constant_pool, receiver_node->name);
56
+
57
+ return constant && constant->length == 3 && strncmp((const char*) constant->start, "tag", 3) == 0;
58
+ }
59
+
60
+ bool detect_turbo_frame_tag(pm_call_node_t* call_node, pm_parser_t* parser) {
61
+ if (!call_node || !call_node->name) { return false; }
62
+
63
+ pm_constant_t* constant = pm_constant_pool_id_to_constant(&parser->constant_pool, call_node->name);
64
+
65
+ return constant && constant->length == 15 && strncmp((const char*) constant->start, "turbo_frame_tag", 15) == 0;
66
+ }
67
+
68
+ // ==========================================================================
69
+ // Generated extract_tag_name functions
70
+ // ==========================================================================
71
+
72
+ static char* extract_image_tag_tag_name(pm_call_node_t* _call_node, pm_parser_t* _parser, hb_allocator_T* allocator) {
73
+ (void) _call_node;
74
+ (void) _parser;
75
+
76
+ return hb_allocator_strdup(allocator, "img");
77
+ }
78
+
79
+ static char* extract_javascript_include_tag_tag_name(pm_call_node_t* _call_node, pm_parser_t* _parser, hb_allocator_T* allocator) {
80
+ (void) _call_node;
81
+ (void) _parser;
82
+
83
+ return hb_allocator_strdup(allocator, "script");
84
+ }
85
+
86
+ static char* extract_javascript_tag_tag_name(pm_call_node_t* _call_node, pm_parser_t* _parser, hb_allocator_T* allocator) {
87
+ (void) _call_node;
88
+ (void) _parser;
89
+
90
+ return hb_allocator_strdup(allocator, "script");
91
+ }
92
+
93
+ static char* extract_content_tag_tag_name(pm_call_node_t* call_node, pm_parser_t* parser, hb_allocator_T* allocator) {
94
+ (void) parser;
95
+
96
+ if (!call_node || !call_node->arguments) { return NULL; }
97
+
98
+ pm_arguments_node_t* arguments = call_node->arguments;
99
+ if (!arguments->arguments.size) { return NULL; }
100
+
101
+ pm_node_t* first_argument = arguments->arguments.nodes[0];
102
+
103
+ if (first_argument->type == PM_STRING_NODE) {
104
+ pm_string_node_t* string_node = (pm_string_node_t*) first_argument;
105
+ size_t length = pm_string_length(&string_node->unescaped);
106
+ return hb_allocator_strndup(allocator, (const char*) pm_string_source(&string_node->unescaped), length);
107
+ } else if (first_argument->type == PM_SYMBOL_NODE) {
108
+ pm_symbol_node_t* symbol_node = (pm_symbol_node_t*) first_argument;
109
+ size_t length = pm_string_length(&symbol_node->unescaped);
110
+ return hb_allocator_strndup(allocator, (const char*) pm_string_source(&symbol_node->unescaped), length);
111
+ }
112
+
113
+ return NULL;
114
+ }
115
+
116
+ extern bool is_ruby_introspection_method(hb_string_T method_name);
117
+
118
+ static char* extract_tag_tag_name(pm_call_node_t* call_node, pm_parser_t* parser, hb_allocator_T* allocator) {
119
+ if (!call_node || !call_node->name) { return NULL; }
120
+
121
+ pm_constant_t* constant = pm_constant_pool_id_to_constant(&parser->constant_pool, call_node->name);
122
+ if (!constant) { return NULL; }
123
+
124
+ if (is_ruby_introspection_method(hb_string_from_data((const char*) constant->start, constant->length))) { return NULL; }
125
+
126
+ char* name = hb_allocator_strndup(allocator, (const char*) constant->start, constant->length);
127
+
128
+ for (size_t i = 0; i < constant->length && name[i] != '\0'; i++) {
129
+ if (name[i] == '_') { name[i] = '-'; }
130
+ }
131
+
132
+ return name;
133
+ }
134
+
135
+ static char* extract_turbo_frame_tag_tag_name(pm_call_node_t* _call_node, pm_parser_t* _parser, hb_allocator_T* allocator) {
136
+ (void) _call_node;
137
+ (void) _parser;
138
+
139
+ return hb_allocator_strdup(allocator, "turbo-frame");
140
+ }
141
+
142
+ // ==========================================================================
143
+ // Generated extract_content functions
144
+ // ==========================================================================
145
+
146
+ static char* extract_image_tag_content(pm_call_node_t* _call_node, pm_parser_t* _parser, hb_allocator_T* _allocator) {
147
+ (void) _call_node;
148
+ (void) _parser;
149
+ (void) _allocator;
150
+
151
+ return NULL;
152
+ }
153
+
154
+ static char* extract_javascript_include_tag_content(pm_call_node_t* _call_node, pm_parser_t* _parser, hb_allocator_T* _allocator) {
155
+ (void) _call_node;
156
+ (void) _parser;
157
+ (void) _allocator;
158
+
159
+ return NULL;
160
+ }
161
+
162
+ static char* extract_javascript_tag_content(pm_call_node_t* call_node, pm_parser_t* _parser, hb_allocator_T* allocator) {
163
+ (void) _parser;
164
+
165
+ if (!call_node || !call_node->arguments) { return NULL; }
166
+
167
+ pm_arguments_node_t* arguments = call_node->arguments;
168
+ if (!arguments->arguments.size) { return NULL; }
169
+
170
+ pm_node_t* first_argument = arguments->arguments.nodes[0];
171
+
172
+ if (first_argument->type == PM_KEYWORD_HASH_NODE) { return NULL; }
173
+
174
+ if (first_argument->type == PM_STRING_NODE) {
175
+ pm_string_node_t* string_node = (pm_string_node_t*) first_argument;
176
+ size_t length = pm_string_length(&string_node->unescaped);
177
+ return hb_allocator_strndup(allocator, (const char*) pm_string_source(&string_node->unescaped), length);
178
+ }
179
+
180
+ size_t source_length = first_argument->location.end - first_argument->location.start;
181
+ return hb_allocator_strndup(allocator, (const char*) first_argument->location.start, source_length);
182
+ }
183
+
184
+ static char* extract_content_tag_content(pm_call_node_t* call_node, pm_parser_t* _parser, hb_allocator_T* allocator) {
185
+ (void) _parser;
186
+
187
+ if (!call_node) { return NULL; }
188
+
189
+
190
+ char* block_content = extract_inline_block_content(call_node, allocator);
191
+ if (block_content) { return block_content; }
192
+
193
+
194
+ if (call_node->arguments) {
195
+ pm_arguments_node_t* arguments = call_node->arguments;
196
+
197
+ if (arguments->arguments.size >= 2) {
198
+ pm_node_t* argument = arguments->arguments.nodes[1];
199
+
200
+ if (argument->type != PM_KEYWORD_HASH_NODE) {
201
+
202
+ if (argument->type == PM_STRING_NODE) {
203
+ pm_string_node_t* string_node = (pm_string_node_t*) argument;
204
+ size_t length = pm_string_length(&string_node->unescaped);
205
+ return hb_allocator_strndup(allocator, (const char*) pm_string_source(&string_node->unescaped), length);
206
+ }
207
+
208
+ size_t source_length = argument->location.end - argument->location.start;
209
+
210
+
211
+ return hb_allocator_strndup(allocator, (const char*) argument->location.start, source_length);
212
+
213
+ }
214
+ }
215
+ }
216
+
217
+ return NULL;
218
+ }
219
+
220
+ static char* extract_tag_content(pm_call_node_t* call_node, pm_parser_t* parser, hb_allocator_T* allocator) {
221
+ (void) parser;
222
+
223
+ if (!call_node) { return NULL; }
224
+
225
+ if (call_node->name) {
226
+ pm_constant_t* constant = pm_constant_pool_id_to_constant(&parser->constant_pool, call_node->name);
227
+
228
+ if (constant && is_ruby_introspection_method(hb_string_from_data((const char*) constant->start, constant->length))) {
229
+ return NULL;
230
+ }
231
+ }
232
+
233
+ char* block_content = extract_inline_block_content(call_node, allocator);
234
+ if (block_content) { return block_content; }
235
+
236
+
237
+ if (call_node->arguments) {
238
+ pm_arguments_node_t* arguments = call_node->arguments;
239
+
240
+ if (arguments->arguments.size >= 1) {
241
+ pm_node_t* argument = arguments->arguments.nodes[0];
242
+
243
+ if (argument->type != PM_KEYWORD_HASH_NODE) {
244
+
245
+ if (argument->type == PM_STRING_NODE) {
246
+ pm_string_node_t* string_node = (pm_string_node_t*) argument;
247
+ size_t length = pm_string_length(&string_node->unescaped);
248
+ return hb_allocator_strndup(allocator, (const char*) pm_string_source(&string_node->unescaped), length);
249
+ }
250
+
251
+ size_t source_length = argument->location.end - argument->location.start;
252
+
253
+
254
+ return hb_allocator_strndup(allocator, (const char*) argument->location.start, source_length);
255
+
256
+ }
257
+ }
258
+ }
259
+
260
+ return NULL;
261
+ }
262
+
263
+ static char* extract_turbo_frame_tag_content(pm_call_node_t* _call_node, pm_parser_t* _parser, hb_allocator_T* _allocator) {
264
+ (void) _call_node;
265
+ (void) _parser;
266
+ (void) _allocator;
267
+
268
+ return NULL;
269
+ }
270
+
271
+ // ==========================================================================
272
+ // Generated supports_block functions
273
+ // ==========================================================================
274
+
275
+ static bool image_tag_supports_block(void) {
276
+ return false;
277
+ }
278
+
279
+ static bool javascript_include_tag_supports_block(void) {
280
+ return false;
281
+ }
282
+
283
+ static bool javascript_tag_supports_block(void) {
284
+ return true;
285
+ }
286
+
287
+ static bool content_tag_supports_block(void) {
288
+ return true;
289
+ }
290
+
291
+ static bool tag_supports_block(void) {
292
+ return true;
293
+ }
294
+
295
+ static bool turbo_frame_tag_supports_block(void) {
296
+ return true;
297
+ }
298
+
299
+ // ==========================================================================
300
+ // Generated handler structs
301
+ // ==========================================================================
302
+
303
+ const tag_helper_handler_T image_tag_handler = {
304
+ .name = "image_tag",
305
+ .source = HB_STRING_LITERAL("ActionView::Helpers::AssetTagHelper#image_tag"),
306
+ .detect = detect_image_tag,
307
+ .extract_tag_name = extract_image_tag_tag_name,
308
+ .extract_content = extract_image_tag_content,
309
+ .supports_block = image_tag_supports_block,
310
+ };
311
+
312
+ const tag_helper_handler_T javascript_include_tag_handler = {
313
+ .name = "javascript_include_tag",
314
+ .source = HB_STRING_LITERAL("ActionView::Helpers::AssetTagHelper#javascript_include_tag"),
315
+ .detect = detect_javascript_include_tag,
316
+ .extract_tag_name = extract_javascript_include_tag_tag_name,
317
+ .extract_content = extract_javascript_include_tag_content,
318
+ .supports_block = javascript_include_tag_supports_block,
319
+ };
320
+
321
+ const tag_helper_handler_T javascript_tag_handler = {
322
+ .name = "javascript_tag",
323
+ .source = HB_STRING_LITERAL("ActionView::Helpers::JavaScriptHelper#javascript_tag"),
324
+ .detect = detect_javascript_tag,
325
+ .extract_tag_name = extract_javascript_tag_tag_name,
326
+ .extract_content = extract_javascript_tag_content,
327
+ .supports_block = javascript_tag_supports_block,
328
+ };
329
+
330
+ const tag_helper_handler_T content_tag_handler = {
331
+ .name = "content_tag",
332
+ .source = HB_STRING_LITERAL("ActionView::Helpers::TagHelper#content_tag"),
333
+ .detect = detect_content_tag,
334
+ .extract_tag_name = extract_content_tag_tag_name,
335
+ .extract_content = extract_content_tag_content,
336
+ .supports_block = content_tag_supports_block,
337
+ };
338
+
339
+ const tag_helper_handler_T tag_handler = {
340
+ .name = "tag",
341
+ .source = HB_STRING_LITERAL("ActionView::Helpers::TagHelper#tag"),
342
+ .detect = detect_tag,
343
+ .extract_tag_name = extract_tag_tag_name,
344
+ .extract_content = extract_tag_content,
345
+ .supports_block = tag_supports_block,
346
+ };
347
+
348
+ const tag_helper_handler_T turbo_frame_tag_handler = {
349
+ .name = "turbo_frame_tag",
350
+ .source = HB_STRING_LITERAL("Turbo::FramesHelper#turbo_frame_tag"),
351
+ .detect = detect_turbo_frame_tag,
352
+ .extract_tag_name = extract_turbo_frame_tag_tag_name,
353
+ .extract_content = extract_turbo_frame_tag_content,
354
+ .supports_block = turbo_frame_tag_supports_block,
355
+ };
@@ -0,0 +1,16 @@
1
+ // NOTE: This file is generated by the templates/template.rb script and should not
2
+ // be modified manually. See /home/runner/work/herb/herb/templates/src/analyze/action_view/generated_handlers.h.erb
3
+
4
+ #ifndef GENERATED_HANDLERS_H
5
+ #define GENERATED_HANDLERS_H
6
+
7
+ #include "../../include/analyze/action_view/tag_helper_handler.h"
8
+
9
+ extern const tag_helper_handler_T image_tag_handler;
10
+ extern const tag_helper_handler_T javascript_include_tag_handler;
11
+ extern const tag_helper_handler_T javascript_tag_handler;
12
+ extern const tag_helper_handler_T content_tag_handler;
13
+ extern const tag_helper_handler_T tag_handler;
14
+ extern const tag_helper_handler_T turbo_frame_tag_handler;
15
+
16
+ #endif