herb 0.9.4-arm-linux-gnu → 0.9.6-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 (71) hide show
  1. checksums.yaml +4 -4
  2. data/config.yml +57 -21
  3. data/ext/herb/extension.c +8 -0
  4. data/ext/herb/extension_helpers.c +1 -0
  5. data/ext/herb/nodes.c +93 -55
  6. data/lib/herb/3.0/herb.so +0 -0
  7. data/lib/herb/3.1/herb.so +0 -0
  8. data/lib/herb/3.2/herb.so +0 -0
  9. data/lib/herb/3.3/herb.so +0 -0
  10. data/lib/herb/3.4/herb.so +0 -0
  11. data/lib/herb/4.0/herb.so +0 -0
  12. data/lib/herb/action_view/helper_registry.rb +8107 -0
  13. data/lib/herb/ast/nodes.rb +212 -78
  14. data/lib/herb/engine/compiler.rb +4 -6
  15. data/lib/herb/parser_options.rb +7 -2
  16. data/lib/herb/project.rb +2 -5
  17. data/lib/herb/version.rb +1 -1
  18. data/lib/herb/visitor.rb +8 -2
  19. data/sig/herb/action_view/helper_registry.rbs +1144 -0
  20. data/sig/herb/ast/nodes.rbs +85 -34
  21. data/sig/herb/parser_options.rbs +6 -2
  22. data/sig/herb/visitor.rbs +5 -2
  23. data/sig/serialized_ast_nodes.rbs +20 -9
  24. data/src/analyze/action_view/generated_handlers.c +355 -0
  25. data/src/analyze/action_view/generated_handlers.h +16 -0
  26. data/src/analyze/action_view/helper_registry.c +7244 -0
  27. data/src/analyze/action_view/image_tag.c +4 -31
  28. data/src/analyze/action_view/javascript_include_tag.c +1 -42
  29. data/src/analyze/action_view/javascript_tag.c +26 -40
  30. data/src/analyze/action_view/registry.c +2 -2
  31. data/src/analyze/action_view/tag_helper_node_builders.c +23 -2
  32. data/src/analyze/action_view/tag_helpers.c +61 -134
  33. data/src/analyze/action_view/turbo_frame_tag.c +1 -36
  34. data/src/analyze/analyze.c +28 -0
  35. data/src/analyze/analyze_helpers.c +406 -0
  36. data/src/analyze/builders.c +1 -0
  37. data/src/analyze/missing_end.c +16 -0
  38. data/src/analyze/parse_errors.c +3 -2
  39. data/src/analyze/postfix_conditionals.c +326 -0
  40. data/src/analyze/render_nodes.c +231 -35
  41. data/src/analyze/strict_locals.c +22 -338
  42. data/src/analyze/ternary_conditionals.c +265 -0
  43. data/src/analyze/transform.c +23 -2
  44. data/src/ast/ast_nodes.c +114 -57
  45. data/src/ast/ast_pretty_print.c +109 -25
  46. data/src/include/analyze/action_view/helper_registry.h +325 -0
  47. data/src/include/analyze/action_view/tag_helper_handler.h +3 -0
  48. data/src/include/analyze/action_view/tag_helper_node_builders.h +7 -0
  49. data/src/include/analyze/action_view/tag_helpers.h +0 -1
  50. data/src/include/analyze/helpers.h +18 -0
  51. data/src/include/analyze/postfix_conditionals.h +9 -0
  52. data/src/include/analyze/ternary_conditionals.h +15 -0
  53. data/src/include/ast/ast_nodes.h +27 -13
  54. data/src/include/parser/parser.h +1 -0
  55. data/src/include/version.h +1 -1
  56. data/src/parser/match_tags.c +37 -6
  57. data/src/parser.c +9 -0
  58. data/src/visitor.c +50 -7
  59. data/templates/java/org/herb/ast/HelperRegistry.java.erb +258 -0
  60. data/templates/javascript/packages/core/src/action-view-helpers.ts.erb +171 -0
  61. data/templates/javascript/packages/core/src/nodes.ts.erb +5 -1
  62. data/templates/lib/herb/action_view/helper_registry.rb.erb +288 -0
  63. data/templates/rust/src/action_view_helpers.rs.erb +154 -0
  64. data/templates/src/analyze/action_view/generated_handlers.c.erb +230 -0
  65. data/templates/src/analyze/action_view/generated_handlers.h.erb +12 -0
  66. data/templates/src/analyze/action_view/helper_registry.c.erb +114 -0
  67. data/templates/src/include/analyze/action_view/helper_registry.h.erb +82 -0
  68. data/templates/template.rb +338 -1
  69. metadata +19 -3
  70. data/src/analyze/action_view/content_tag.c +0 -78
  71. data/src/analyze/action_view/tag.c +0 -87
@@ -1,78 +0,0 @@
1
- #include "../../include/analyze/action_view/tag_helper_handler.h"
2
-
3
- #include <prism.h>
4
- #include <stdbool.h>
5
- #include <stdlib.h>
6
- #include <string.h>
7
-
8
- bool detect_content_tag(pm_call_node_t* call_node, pm_parser_t* parser) {
9
- if (!call_node || !call_node->name) { return false; }
10
-
11
- pm_constant_t* constant = pm_constant_pool_id_to_constant(&parser->constant_pool, call_node->name);
12
- return constant && constant->length == 11 && strncmp((const char*) constant->start, "content_tag", 11) == 0;
13
- }
14
-
15
- char* extract_content_tag_name(pm_call_node_t* call_node, pm_parser_t* parser, hb_allocator_T* allocator) {
16
- (void) parser;
17
-
18
- if (!call_node || !call_node->arguments) { return NULL; }
19
-
20
- pm_arguments_node_t* arguments = call_node->arguments;
21
- if (!arguments->arguments.size) { return NULL; }
22
-
23
- pm_node_t* first_argument = arguments->arguments.nodes[0];
24
-
25
- if (first_argument->type == PM_STRING_NODE) {
26
- pm_string_node_t* string_node = (pm_string_node_t*) first_argument;
27
- size_t length = pm_string_length(&string_node->unescaped);
28
- return hb_allocator_strndup(allocator, (const char*) pm_string_source(&string_node->unescaped), length);
29
- } else if (first_argument->type == PM_SYMBOL_NODE) {
30
- pm_symbol_node_t* symbol_node = (pm_symbol_node_t*) first_argument;
31
- size_t length = pm_string_length(&symbol_node->unescaped);
32
- return hb_allocator_strndup(allocator, (const char*) pm_string_source(&symbol_node->unescaped), length);
33
- }
34
-
35
- return NULL;
36
- }
37
-
38
- char* extract_content_tag_content(pm_call_node_t* call_node, pm_parser_t* parser, hb_allocator_T* allocator) {
39
- (void) parser;
40
-
41
- if (!call_node) { return NULL; }
42
-
43
- char* block_content = extract_inline_block_content(call_node, allocator);
44
- if (block_content) { return block_content; }
45
-
46
- if (call_node->arguments) {
47
- pm_arguments_node_t* arguments = call_node->arguments;
48
-
49
- if (arguments->arguments.size >= 2) {
50
- pm_node_t* second_argument = arguments->arguments.nodes[1];
51
-
52
- if (second_argument->type != PM_KEYWORD_HASH_NODE) {
53
- if (second_argument->type == PM_STRING_NODE) {
54
- pm_string_node_t* string_node = (pm_string_node_t*) second_argument;
55
- size_t length = pm_string_length(&string_node->unescaped);
56
- return hb_allocator_strndup(allocator, (const char*) pm_string_source(&string_node->unescaped), length);
57
- }
58
-
59
- size_t source_length = second_argument->location.end - second_argument->location.start;
60
- return hb_allocator_strndup(allocator, (const char*) second_argument->location.start, source_length);
61
- }
62
- }
63
- }
64
-
65
- return NULL;
66
- }
67
-
68
- bool content_tag_supports_block(void) {
69
- return true;
70
- }
71
-
72
- const tag_helper_handler_T content_tag_handler = { .name = "content_tag",
73
- .source =
74
- HB_STRING_LITERAL("ActionView::Helpers::TagHelper#content_tag"),
75
- .detect = detect_content_tag,
76
- .extract_tag_name = extract_content_tag_name,
77
- .extract_content = extract_content_tag_content,
78
- .supports_block = content_tag_supports_block };
@@ -1,87 +0,0 @@
1
- #include "../../include/analyze/action_view/tag_helper_handler.h"
2
- #include "../../include/util/ruby_util.h"
3
-
4
- #include <prism.h>
5
- #include <stdbool.h>
6
- #include <stdlib.h>
7
- #include <string.h>
8
-
9
- bool detect_tag_dot(pm_call_node_t* call_node, pm_parser_t* parser) {
10
- if (!call_node || !call_node->receiver) { return false; }
11
- if (call_node->receiver->type != PM_CALL_NODE) { return false; }
12
-
13
- pm_call_node_t* receiver_node = (pm_call_node_t*) call_node->receiver;
14
- if (!receiver_node->name) { return false; }
15
-
16
- pm_constant_t* constant = pm_constant_pool_id_to_constant(&parser->constant_pool, receiver_node->name);
17
-
18
- return constant && constant->length == 3 && strncmp((const char*) constant->start, "tag", 3) == 0;
19
- }
20
-
21
- char* extract_tag_dot_name(pm_call_node_t* call_node, pm_parser_t* parser, hb_allocator_T* allocator) {
22
- if (!call_node || !call_node->name) { return NULL; }
23
-
24
- pm_constant_t* constant = pm_constant_pool_id_to_constant(&parser->constant_pool, call_node->name);
25
- if (!constant) { return NULL; }
26
-
27
- if (is_ruby_introspection_method(hb_string_from_data((const char*) constant->start, constant->length))) {
28
- return NULL;
29
- }
30
-
31
- char* name = hb_allocator_strndup(allocator, (const char*) constant->start, constant->length);
32
-
33
- for (size_t i = 0; i < constant->length && name[i] != '\0'; i++) {
34
- if (name[i] == '_') { name[i] = '-'; }
35
- }
36
-
37
- return name;
38
- }
39
-
40
- // TODO: this should probably be an array of nodes
41
- char* extract_tag_dot_content(pm_call_node_t* call_node, pm_parser_t* parser, hb_allocator_T* allocator) {
42
- if (!call_node) { return NULL; }
43
-
44
- if (call_node->name) {
45
- pm_constant_t* constant = pm_constant_pool_id_to_constant(&parser->constant_pool, call_node->name);
46
-
47
- if (constant
48
- && is_ruby_introspection_method(hb_string_from_data((const char*) constant->start, constant->length))) {
49
- return NULL;
50
- }
51
- }
52
-
53
- char* block_content = extract_inline_block_content(call_node, allocator);
54
- if (block_content) { return block_content; }
55
-
56
- if (call_node->arguments) {
57
- pm_arguments_node_t* arguments = call_node->arguments;
58
-
59
- if (arguments->arguments.size) {
60
- pm_node_t* first_argument = arguments->arguments.nodes[0];
61
-
62
- if (first_argument->type == PM_KEYWORD_HASH_NODE) { return NULL; }
63
-
64
- if (first_argument->type == PM_STRING_NODE) {
65
- pm_string_node_t* string_node = (pm_string_node_t*) first_argument;
66
- size_t length = pm_string_length(&string_node->unescaped);
67
- return hb_allocator_strndup(allocator, (const char*) pm_string_source(&string_node->unescaped), length);
68
- }
69
-
70
- size_t source_length = first_argument->location.end - first_argument->location.start;
71
- return hb_allocator_strndup(allocator, (const char*) first_argument->location.start, source_length);
72
- }
73
- }
74
-
75
- return NULL;
76
- }
77
-
78
- bool tag_dot_supports_block(void) {
79
- return true;
80
- }
81
-
82
- const tag_helper_handler_T tag_dot_handler = { .name = "tag",
83
- .source = HB_STRING_LITERAL("ActionView::Helpers::TagHelper#tag"),
84
- .detect = detect_tag_dot,
85
- .extract_tag_name = extract_tag_dot_name,
86
- .extract_content = extract_tag_dot_content,
87
- .supports_block = tag_dot_supports_block };