herb 0.11.1-x86-linux-gnu → 0.11.2-x86-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 (251) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +4 -2
  3. data/config.yml +6 -0
  4. data/ext/herb/extconf.rb +8 -31
  5. data/ext/herb/nodes.c +75 -75
  6. data/ext/herb/parser_options_helpers.c +26 -0
  7. data/lib/herb/3.2/herb.so +0 -0
  8. data/lib/herb/3.3/herb.so +0 -0
  9. data/lib/herb/3.4/herb.so +0 -0
  10. data/lib/herb/4.0/herb.so +0 -0
  11. data/lib/herb/analysis/partial_index.rb +1 -1
  12. data/lib/herb/analysis/partial_resolution.rb +27 -0
  13. data/lib/herb/ast/helpers.rb +1 -1
  14. data/lib/herb/configuration.rb +11 -1
  15. data/lib/herb/dev/classifier.rb +1 -1
  16. data/lib/herb/engine/compiler.rb +5 -8
  17. data/lib/herb/engine/slots/dynamics_compiler.rb +53 -14
  18. data/lib/herb/engine/slots/subtree_compiler.rb +1 -1
  19. data/lib/herb/engine/slots/visitor.rb +32 -4
  20. data/lib/herb/engine/visitors/instrumentation_visitor.rb +18 -6
  21. data/lib/herb/parser_options.rb +6 -3
  22. data/lib/herb/project.rb +19 -8
  23. data/lib/herb/version.rb +1 -1
  24. data/lib/herb.rb +1 -1
  25. data/sig/herb/analysis/partial_resolution.rbs +8 -0
  26. data/sig/herb/configuration.rbs +3 -0
  27. data/sig/herb/engine/slots/dynamics_compiler.rbs +24 -7
  28. data/sig/herb/engine/slots/visitor.rbs +14 -0
  29. data/sig/herb/engine/visitors/instrumentation_visitor.rbs +5 -1
  30. data/sig/herb/parser_options.rbs +6 -4
  31. data/sig/herb.rbs +2 -2
  32. data/src/analyze/action_view/attribute_extraction_helpers.c +40 -21
  33. data/src/analyze/action_view/generated_handlers.c +36 -36
  34. data/src/analyze/action_view/image_tag.c +7 -3
  35. data/src/analyze/action_view/javascript_include_tag.c +6 -3
  36. data/src/analyze/action_view/link_to.c +23 -23
  37. data/src/analyze/action_view/registry.c +7 -3
  38. data/src/analyze/action_view/tag_helper_node_builders.c +6 -13
  39. data/src/analyze/action_view/tag_helpers.c +139 -90
  40. data/src/analyze/action_view/turbo_frame_tag.c +5 -4
  41. data/src/analyze/analyze.c +35 -19
  42. data/src/analyze/analyze_helpers.c +161 -188
  43. data/src/analyze/analyzed_ruby.c +8 -7
  44. data/src/analyze/control_type.c +29 -22
  45. data/src/analyze/herb_directives.c +16 -20
  46. data/src/analyze/iteration_nodes.c +69 -24
  47. data/src/analyze/parse_errors.c +32 -22
  48. data/src/analyze/postfix_conditionals.c +23 -13
  49. data/src/analyze/prism_annotate.c +29 -28
  50. data/src/analyze/render_nodes.c +51 -41
  51. data/src/analyze/strict_locals.c +14 -15
  52. data/src/analyze/ternary_conditionals.c +14 -10
  53. data/src/herb.c +10 -8
  54. data/src/include/analyze/action_view/tag_helper_handler.h +1 -1
  55. data/src/include/analyze/action_view/tag_helper_node_builders.h +1 -0
  56. data/src/include/analyze/action_view/tag_helpers.h +1 -1
  57. data/src/include/analyze/analyze.h +3 -2
  58. data/src/include/analyze/analyzed_ruby.h +4 -2
  59. data/src/include/analyze/helpers.h +6 -6
  60. data/src/include/herb.h +3 -2
  61. data/src/include/parser/parser_options.h +5 -0
  62. data/src/include/prism/prism_context.h +12 -12
  63. data/src/include/prism/prism_helpers.h +30 -0
  64. data/src/include/prism_version.h +11 -0
  65. data/src/include/version.h +1 -1
  66. data/src/parser/parser_helpers.c +1 -2
  67. data/src/parser.c +6 -7
  68. data/src/parser_options_defaults.c +1 -0
  69. data/src/prism/prism_helpers.c +84 -50
  70. data/src/prism/ruby_parser.c +20 -20
  71. data/templates/ext/herb/nodes.c.erb +5 -5
  72. data/templates/ext/herb/parser_options_helpers.c.erb +33 -0
  73. data/templates/java/nodes.c.erb +6 -6
  74. data/templates/java/parser_options_helpers.c.erb +41 -2
  75. data/templates/java/parser_options_helpers.h.erb +2 -1
  76. data/templates/javascript/packages/node/extension/nodes.cpp.erb +5 -5
  77. data/templates/javascript/packages/node/extension/parser_options_helpers.cpp.erb +34 -2
  78. data/templates/javascript/packages/node/extension/parser_options_helpers.h.erb +1 -1
  79. data/templates/lib/herb/parser_options.rb.erb +1 -1
  80. data/templates/rust/src/prism/generated_deserialize.rs.erb +90 -44
  81. data/templates/rust/src/prism/generated_prettyprint.rs.erb +18 -27
  82. data/templates/src/analyze/action_view/generated_handlers.c.erb +23 -22
  83. data/templates/src/include/parser/parser_options.h.erb +10 -0
  84. data/templates/src/include/prism_version.h.erb +17 -0
  85. data/templates/src/parser_options_defaults.c.erb +1 -1
  86. data/templates/template.rb +17 -2
  87. data/templates/wasm/nodes.cpp.erb +5 -5
  88. data/templates/wasm/parser_options_helpers.cpp.erb +24 -0
  89. data/vendor/prism/Rakefile +76 -7
  90. data/vendor/prism/config.yml +174 -161
  91. data/vendor/prism/include/prism/arena.h +45 -0
  92. data/vendor/prism/include/prism/arena.hpp +42 -0
  93. data/vendor/prism/include/prism/ast.h +2738 -611
  94. data/vendor/prism/include/prism/ast.hpp +641 -0
  95. data/vendor/prism/include/prism/buffer.h +60 -0
  96. data/vendor/prism/include/prism/buffer.hpp +55 -0
  97. data/vendor/prism/include/prism/comments.h +72 -0
  98. data/vendor/prism/include/prism/compiler/accel.h +26 -0
  99. data/vendor/prism/include/prism/compiler/align.h +36 -0
  100. data/vendor/prism/include/prism/compiler/assume.h +25 -0
  101. data/vendor/prism/include/prism/compiler/branch.h +26 -0
  102. data/vendor/prism/include/prism/compiler/bswap.h +46 -0
  103. data/vendor/prism/include/prism/compiler/cplusplus.hpp +16 -0
  104. data/vendor/prism/include/prism/compiler/endianness.h +34 -0
  105. data/vendor/prism/include/prism/compiler/exceptions.hpp +17 -0
  106. data/vendor/prism/include/prism/compiler/exported.h +24 -0
  107. data/vendor/prism/include/prism/compiler/fallthrough.h +22 -0
  108. data/vendor/prism/include/prism/compiler/filesystem.h +32 -0
  109. data/vendor/prism/include/prism/compiler/flex_array.h +19 -0
  110. data/vendor/prism/include/prism/compiler/force_inline.h +21 -0
  111. data/vendor/prism/include/prism/compiler/format.h +27 -0
  112. data/vendor/prism/include/prism/compiler/inline.h +17 -0
  113. data/vendor/prism/include/prism/compiler/lifetimebound.hpp +25 -0
  114. data/vendor/prism/include/prism/compiler/nodiscard.h +22 -0
  115. data/vendor/prism/include/prism/compiler/nonnull.h +18 -0
  116. data/vendor/prism/include/prism/compiler/unused.h +18 -0
  117. data/vendor/prism/include/prism/constant_pool.h +106 -0
  118. data/vendor/prism/include/prism/diagnostic.h +55 -402
  119. data/vendor/prism/include/prism/errors_format.h +61 -0
  120. data/vendor/prism/include/prism/excludes.h +29 -0
  121. data/vendor/prism/include/prism/integer.h +41 -0
  122. data/vendor/prism/include/prism/internal/allocator.h +68 -0
  123. data/vendor/prism/include/prism/internal/allocator_debug.h +88 -0
  124. data/vendor/prism/include/prism/internal/arena.h +108 -0
  125. data/vendor/prism/include/prism/internal/bit.h +42 -0
  126. data/vendor/prism/include/prism/internal/buffer.h +94 -0
  127. data/vendor/prism/include/prism/internal/char.h +145 -0
  128. data/vendor/prism/include/prism/internal/comments.h +54 -0
  129. data/vendor/prism/include/prism/internal/constant_pool.h +152 -0
  130. data/vendor/prism/include/prism/internal/diagnostic.h +389 -0
  131. data/vendor/prism/include/prism/{encoding.h → internal/encoding.h} +27 -68
  132. data/vendor/prism/include/prism/internal/integer.h +68 -0
  133. data/vendor/prism/include/prism/internal/isinf.h +16 -0
  134. data/vendor/prism/include/prism/internal/line_offset_list.h +34 -0
  135. data/vendor/prism/include/prism/{util/pm_list.h → internal/list.h} +11 -52
  136. data/vendor/prism/include/prism/internal/magic_comments.h +23 -0
  137. data/vendor/prism/include/prism/internal/memchr.h +15 -0
  138. data/vendor/prism/include/prism/internal/node.h +42 -0
  139. data/vendor/prism/include/prism/internal/options.h +232 -0
  140. data/vendor/prism/include/prism/internal/parser.h +1015 -0
  141. data/vendor/prism/include/prism/internal/regexp.h +26 -0
  142. data/vendor/prism/include/prism/internal/serialize.h +39 -0
  143. data/vendor/prism/include/prism/internal/source.h +72 -0
  144. data/vendor/prism/include/prism/internal/static_literals.h +60 -0
  145. data/vendor/prism/include/prism/internal/stringy.h +30 -0
  146. data/vendor/prism/include/prism/{util/pm_strncasecmp.h → internal/strncasecmp.h} +3 -17
  147. data/vendor/prism/include/prism/{util/pm_strpbrk.h → internal/strpbrk.h} +7 -20
  148. data/vendor/prism/include/prism/internal/tokens.h +11 -0
  149. data/vendor/prism/include/prism/internal/xxh3.h +16 -0
  150. data/vendor/prism/include/prism/json.h +40 -0
  151. data/vendor/prism/include/prism/line_offset_list.h +69 -0
  152. data/vendor/prism/include/prism/magic_comments.h +53 -0
  153. data/vendor/prism/include/prism/node.h +59 -49
  154. data/vendor/prism/include/prism/node.hpp +272 -0
  155. data/vendor/prism/include/prism/node_type.hpp +38 -0
  156. data/vendor/prism/include/prism/options.h +154 -279
  157. data/vendor/prism/include/prism/options.hpp +43 -0
  158. data/vendor/prism/include/prism/parser.h +367 -870
  159. data/vendor/prism/include/prism/parser.hpp +274 -0
  160. data/vendor/prism/include/prism/prettyprint.h +14 -9
  161. data/vendor/prism/include/prism/serialize.h +123 -0
  162. data/vendor/prism/include/prism/source.h +163 -0
  163. data/vendor/prism/include/prism/stream.h +36 -0
  164. data/vendor/prism/include/prism/string_query.h +82 -0
  165. data/vendor/prism/include/prism/stringy.h +61 -0
  166. data/vendor/prism/include/prism/stringy.hpp +31 -0
  167. data/vendor/prism/include/prism/version.h +20 -3
  168. data/vendor/prism/include/prism.h +35 -320
  169. data/vendor/prism/include/prism.hpp +24 -0
  170. data/vendor/prism/src/arena.c +122 -0
  171. data/vendor/prism/src/{util/pm_buffer.c → buffer.c} +53 -21
  172. data/vendor/prism/src/{util/pm_char.c → char.c} +28 -57
  173. data/vendor/prism/src/comments.c +455 -0
  174. data/vendor/prism/src/constant_pool.c +406 -0
  175. data/vendor/prism/src/diagnostic.c +120 -68
  176. data/vendor/prism/src/encoding.c +8 -3
  177. data/vendor/prism/src/errors_format.c +519 -0
  178. data/vendor/prism/src/{util/pm_integer.c → integer.c} +38 -22
  179. data/vendor/prism/src/json.c +5733 -0
  180. data/vendor/prism/src/line_offset_list.c +100 -0
  181. data/vendor/prism/src/list.c +24 -0
  182. data/vendor/prism/src/{util/pm_memchr.c → memchr.c} +8 -6
  183. data/vendor/prism/src/node.c +3465 -7787
  184. data/vendor/prism/src/options.c +161 -54
  185. data/vendor/prism/src/parser.c +371 -0
  186. data/vendor/prism/src/prettyprint.c +421 -354
  187. data/vendor/prism/src/prism.c +8522 -7280
  188. data/vendor/prism/src/regexp.c +960 -45
  189. data/vendor/prism/src/serialize.c +2434 -2048
  190. data/vendor/prism/src/source.c +524 -0
  191. data/vendor/prism/src/static_literals.c +303 -360
  192. data/vendor/prism/src/string_query.c +180 -0
  193. data/vendor/prism/src/stringy.c +61 -0
  194. data/vendor/prism/src/{util/pm_strncasecmp.c → strncasecmp.c} +5 -4
  195. data/vendor/prism/src/strpbrk.c +447 -0
  196. data/vendor/prism/src/{token_type.c → tokens.c} +39 -18
  197. data/vendor/prism/src/xxh3.c +292 -0
  198. data/vendor/prism/templates/ext/prism/api_node.c.erb +58 -44
  199. data/vendor/prism/templates/include/prism/ast.h.erb +67 -17
  200. data/vendor/prism/templates/include/prism/ast.hpp.erb +31 -0
  201. data/vendor/prism/templates/include/prism/internal/diagnostic.h.erb +60 -0
  202. data/vendor/prism/templates/java/{org → api/src/main/java-templates/org/ruby_lang}/prism/AbstractNodeVisitor.java.erb +1 -1
  203. data/vendor/prism/templates/java/{org → api/src/main/java-templates/org/ruby_lang}/prism/Loader.java.erb +232 -133
  204. data/vendor/prism/templates/java/{org → api/src/main/java-templates/org/ruby_lang}/prism/Nodes.java.erb +62 -23
  205. data/vendor/prism/templates/javascript/src/deserialize.js.erb +153 -146
  206. data/vendor/prism/templates/javascript/src/nodes.js.erb +4 -9
  207. data/vendor/prism/templates/lib/prism/compiler.rb.erb +14 -5
  208. data/vendor/prism/templates/lib/prism/dispatcher.rb.erb +20 -12
  209. data/vendor/prism/templates/lib/prism/dot_visitor.rb.erb +37 -11
  210. data/vendor/prism/templates/lib/prism/dsl.rb.erb +43 -4
  211. data/vendor/prism/templates/lib/prism/inspect_visitor.rb.erb +26 -10
  212. data/vendor/prism/templates/lib/prism/mutation_compiler.rb.erb +5 -2
  213. data/vendor/prism/templates/lib/prism/node.rb.erb +283 -105
  214. data/vendor/prism/templates/lib/prism/reflection.rb.erb +11 -2
  215. data/vendor/prism/templates/lib/prism/serialize.rb.erb +291 -134
  216. data/vendor/prism/templates/lib/prism/visitor.rb.erb +18 -0
  217. data/vendor/prism/templates/src/diagnostic.c.erb +114 -63
  218. data/vendor/prism/templates/src/json.c.erb +130 -0
  219. data/vendor/prism/templates/src/node.c.erb +79 -236
  220. data/vendor/prism/templates/src/prettyprint.c.erb +24 -13
  221. data/vendor/prism/templates/src/serialize.c.erb +369 -183
  222. data/vendor/prism/templates/src/{token_type.c.erb → tokens.c.erb} +22 -11
  223. data/vendor/prism/templates/template.rb +193 -91
  224. metadata +100 -42
  225. data/vendor/prism/include/prism/defines.h +0 -260
  226. data/vendor/prism/include/prism/pack.h +0 -163
  227. data/vendor/prism/include/prism/regexp.h +0 -43
  228. data/vendor/prism/include/prism/static_literals.h +0 -121
  229. data/vendor/prism/include/prism/util/pm_buffer.h +0 -236
  230. data/vendor/prism/include/prism/util/pm_char.h +0 -204
  231. data/vendor/prism/include/prism/util/pm_constant_pool.h +0 -218
  232. data/vendor/prism/include/prism/util/pm_integer.h +0 -130
  233. data/vendor/prism/include/prism/util/pm_memchr.h +0 -29
  234. data/vendor/prism/include/prism/util/pm_newline_list.h +0 -113
  235. data/vendor/prism/include/prism/util/pm_string.h +0 -200
  236. data/vendor/prism/src/pack.c +0 -509
  237. data/vendor/prism/src/util/pm_constant_pool.c +0 -342
  238. data/vendor/prism/src/util/pm_list.c +0 -49
  239. data/vendor/prism/src/util/pm_newline_list.c +0 -125
  240. data/vendor/prism/src/util/pm_string.c +0 -381
  241. data/vendor/prism/src/util/pm_strpbrk.c +0 -206
  242. data/vendor/prism/templates/include/prism/diagnostic.h.erb +0 -130
  243. data/vendor/prism/templates/rbi/prism/dsl.rbi.erb +0 -68
  244. data/vendor/prism/templates/rbi/prism/node.rbi.erb +0 -167
  245. data/vendor/prism/templates/rbi/prism/visitor.rbi.erb +0 -18
  246. data/vendor/prism/templates/sig/prism/_private/dot_visitor.rbs.erb +0 -45
  247. data/vendor/prism/templates/sig/prism/dsl.rbs.erb +0 -31
  248. data/vendor/prism/templates/sig/prism/mutation_compiler.rbs.erb +0 -7
  249. data/vendor/prism/templates/sig/prism/node.rbs.erb +0 -136
  250. data/vendor/prism/templates/sig/prism/visitor.rbs.erb +0 -17
  251. data/vendor/prism/templates/sig/prism.rbs.erb +0 -92
@@ -0,0 +1,100 @@
1
+ #include "prism/compiler/align.h"
2
+ #include "prism/internal/line_offset_list.h"
3
+ #include "prism/internal/arena.h"
4
+
5
+ #include <assert.h>
6
+ #include <string.h>
7
+
8
+ /**
9
+ * Initialize a new line offset list with the given capacity.
10
+ */
11
+ void
12
+ pm_line_offset_list_init(pm_arena_t *arena, pm_line_offset_list_t *list, size_t capacity) {
13
+ list->offsets = (uint32_t *) pm_arena_alloc(arena, capacity * sizeof(uint32_t), PRISM_ALIGNOF(uint32_t));
14
+
15
+ // The first line always has offset 0.
16
+ list->offsets[0] = 0;
17
+ list->size = 1;
18
+ list->capacity = capacity;
19
+ }
20
+
21
+ /**
22
+ * Clear out the newlines that have been appended to the list.
23
+ */
24
+ void
25
+ pm_line_offset_list_clear(pm_line_offset_list_t *list) {
26
+ list->size = 1;
27
+ }
28
+
29
+ /**
30
+ * Append a new offset to the newline list (slow path: resize and store).
31
+ */
32
+ void
33
+ pm_line_offset_list_append_slow(pm_arena_t *arena, pm_line_offset_list_t *list, uint32_t cursor) {
34
+ size_t new_capacity = (list->capacity * 3) / 2;
35
+ uint32_t *new_offsets = (uint32_t *) pm_arena_alloc(arena, new_capacity * sizeof(uint32_t), PRISM_ALIGNOF(uint32_t));
36
+
37
+ memcpy(new_offsets, list->offsets, list->size * sizeof(uint32_t));
38
+
39
+ list->offsets = new_offsets;
40
+ list->capacity = new_capacity;
41
+
42
+ assert(list->size == 0 || cursor > list->offsets[list->size - 1]);
43
+ list->offsets[list->size++] = cursor;
44
+ }
45
+
46
+ /**
47
+ * Returns the line of the given offset. If the offset is not in the list, the
48
+ * line of the closest offset less than the given offset is returned.
49
+ */
50
+ int32_t
51
+ pm_line_offset_list_line(const pm_line_offset_list_t *list, uint32_t cursor, int32_t start_line) {
52
+ size_t left = 0;
53
+ size_t right = list->size - 1;
54
+
55
+ while (left <= right) {
56
+ size_t mid = left + (right - left) / 2;
57
+
58
+ if (list->offsets[mid] == cursor) {
59
+ return ((int32_t) mid) + start_line;
60
+ }
61
+
62
+ if (list->offsets[mid] < cursor) {
63
+ left = mid + 1;
64
+ } else {
65
+ right = mid - 1;
66
+ }
67
+ }
68
+
69
+ return ((int32_t) left) + start_line - 1;
70
+ }
71
+
72
+ /**
73
+ * Returns the line and column of the given offset. If the offset is not in the
74
+ * list, the line and column of the closest offset less than the given offset
75
+ * are returned.
76
+ */
77
+ pm_line_column_t
78
+ pm_line_offset_list_line_column(const pm_line_offset_list_t *list, uint32_t cursor, int32_t start_line) {
79
+ size_t left = 0;
80
+ size_t right = list->size - 1;
81
+
82
+ while (left <= right) {
83
+ size_t mid = left + (right - left) / 2;
84
+
85
+ if (list->offsets[mid] == cursor) {
86
+ return ((pm_line_column_t) { ((int32_t) mid) + start_line, 0 });
87
+ }
88
+
89
+ if (list->offsets[mid] < cursor) {
90
+ left = mid + 1;
91
+ } else {
92
+ right = mid - 1;
93
+ }
94
+ }
95
+
96
+ return ((pm_line_column_t) {
97
+ .line = ((int32_t) left) + start_line - 1,
98
+ .column = cursor - list->offsets[left - 1]
99
+ });
100
+ }
@@ -0,0 +1,24 @@
1
+ #include "prism/internal/list.h"
2
+
3
+ /**
4
+ * Returns the size of the list.
5
+ */
6
+ size_t
7
+ pm_list_size(pm_list_t *list) {
8
+ return list->size;
9
+ }
10
+
11
+ /**
12
+ * Append a node to the given list.
13
+ */
14
+ void
15
+ pm_list_append(pm_list_t *list, pm_list_node_t *node) {
16
+ if (list->head == NULL) {
17
+ list->head = node;
18
+ } else {
19
+ list->tail->next = node;
20
+ }
21
+
22
+ list->tail = node;
23
+ list->size++;
24
+ }
@@ -1,15 +1,19 @@
1
- #include "prism/util/pm_memchr.h"
1
+ #include "prism/internal/memchr.h"
2
2
 
3
- #define PRISM_MEMCHR_TRAILING_BYTE_MINIMUM 0x40
3
+ #include <stdbool.h>
4
+ #include <stdint.h>
5
+ #include <string.h>
6
+
7
+ #define TRAILING_BYTE_MINIMUM 0x40
4
8
 
5
9
  /**
6
10
  * We need to roll our own memchr to handle cases where the encoding changes and
7
11
  * we need to search for a character in a buffer that could be the trailing byte
8
12
  * of a multibyte character.
9
13
  */
10
- void *
14
+ const void *
11
15
  pm_memchr(const void *memory, int character, size_t number, bool encoding_changed, const pm_encoding_t *encoding) {
12
- if (encoding_changed && encoding->multibyte && character >= PRISM_MEMCHR_TRAILING_BYTE_MINIMUM) {
16
+ if (encoding_changed && encoding->multibyte && character >= TRAILING_BYTE_MINIMUM) {
13
17
  const uint8_t *source = (const uint8_t *) memory;
14
18
  size_t index = 0;
15
19
 
@@ -31,5 +35,3 @@ pm_memchr(const void *memory, int character, size_t number, bool encoding_change
31
35
  return memchr(memory, character, number);
32
36
  }
33
37
  }
34
-
35
- #undef PRISM_MEMCHR_TRAILING_BYTE_MINIMUM