herb 0.10.1 → 0.11.1

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 (793) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +17 -7
  3. data/README.md +36 -119
  4. data/Rakefile +2 -11
  5. data/config/action_view_helpers/actioncable/action_cable_helper/action_cable_meta_tag.yml +12 -8
  6. data/config/action_view_helpers/actionpack/content_security_policy/content_security_policy?.yml +9 -6
  7. data/config/action_view_helpers/actionpack/content_security_policy/content_security_policy_nonce.yml +9 -6
  8. data/config/action_view_helpers/actionpack/polymorphic_routes/polymorphic_path.yml +20 -12
  9. data/config/action_view_helpers/actionpack/polymorphic_routes/polymorphic_url.yml +30 -18
  10. data/config/action_view_helpers/actionpack/request_forgery_protection/form_authenticity_token.yml +15 -9
  11. data/config/action_view_helpers/actionpack/request_forgery_protection/protect_against_forgery?.yml +9 -6
  12. data/config/action_view_helpers/actiontext/content_helper/render_action_text_content.yml +15 -9
  13. data/config/action_view_helpers/actiontext/content_helper/sanitize_action_text_content.yml +15 -9
  14. data/config/action_view_helpers/actiontext/tag_helper/rich_textarea_tag.yml +34 -22
  15. data/config/action_view_helpers/actionview/active_model_helper/error_message.yml +9 -6
  16. data/config/action_view_helpers/actionview/active_model_helper/error_wrapping.yml +9 -6
  17. data/config/action_view_helpers/actionview/active_model_helper/object.yml +9 -6
  18. data/config/action_view_helpers/actionview/asset_tag_helper/apply_stylesheet_media_default.yml +9 -6
  19. data/config/action_view_helpers/actionview/asset_tag_helper/audio_tag.yml +40 -27
  20. data/config/action_view_helpers/actionview/asset_tag_helper/auto_discovery_link_tag.yml +37 -23
  21. data/config/action_view_helpers/actionview/asset_tag_helper/auto_include_nonce.yml +9 -6
  22. data/config/action_view_helpers/actionview/asset_tag_helper/auto_include_nonce_for_scripts.yml +9 -6
  23. data/config/action_view_helpers/actionview/asset_tag_helper/auto_include_nonce_for_styles.yml +9 -6
  24. data/config/action_view_helpers/actionview/asset_tag_helper/favicon_link_tag.yml +32 -22
  25. data/config/action_view_helpers/actionview/asset_tag_helper/image_decoding.yml +9 -6
  26. data/config/action_view_helpers/actionview/asset_tag_helper/image_loading.yml +9 -6
  27. data/config/action_view_helpers/actionview/asset_tag_helper/image_tag.yml +67 -46
  28. data/config/action_view_helpers/actionview/asset_tag_helper/javascript_include_tag.yml +58 -39
  29. data/config/action_view_helpers/actionview/asset_tag_helper/picture_tag.yml +22 -14
  30. data/config/action_view_helpers/actionview/asset_tag_helper/preload_link_tag.yml +45 -30
  31. data/config/action_view_helpers/actionview/asset_tag_helper/preload_links_header.yml +9 -6
  32. data/config/action_view_helpers/actionview/asset_tag_helper/stylesheet_link_tag.yml +49 -30
  33. data/config/action_view_helpers/actionview/asset_tag_helper/video_tag.yml +53 -35
  34. data/config/action_view_helpers/actionview/asset_url_helper/asset_path.yml +16 -10
  35. data/config/action_view_helpers/actionview/asset_url_helper/asset_url.yml +16 -10
  36. data/config/action_view_helpers/actionview/asset_url_helper/audio_path.yml +16 -10
  37. data/config/action_view_helpers/actionview/asset_url_helper/audio_url.yml +16 -10
  38. data/config/action_view_helpers/actionview/asset_url_helper/compute_asset_extname.yml +9 -6
  39. data/config/action_view_helpers/actionview/asset_url_helper/compute_asset_host.yml +9 -6
  40. data/config/action_view_helpers/actionview/asset_url_helper/compute_asset_path.yml +9 -6
  41. data/config/action_view_helpers/actionview/asset_url_helper/font_path.yml +16 -10
  42. data/config/action_view_helpers/actionview/asset_url_helper/font_url.yml +16 -10
  43. data/config/action_view_helpers/actionview/asset_url_helper/image_path.yml +16 -10
  44. data/config/action_view_helpers/actionview/asset_url_helper/image_url.yml +16 -10
  45. data/config/action_view_helpers/actionview/asset_url_helper/javascript_path.yml +16 -10
  46. data/config/action_view_helpers/actionview/asset_url_helper/javascript_url.yml +16 -10
  47. data/config/action_view_helpers/actionview/asset_url_helper/public_compute_asset_path.yml +9 -6
  48. data/config/action_view_helpers/actionview/asset_url_helper/stylesheet_path.yml +16 -10
  49. data/config/action_view_helpers/actionview/asset_url_helper/stylesheet_url.yml +16 -10
  50. data/config/action_view_helpers/actionview/asset_url_helper/video_path.yml +16 -10
  51. data/config/action_view_helpers/actionview/asset_url_helper/video_url.yml +16 -10
  52. data/config/action_view_helpers/actionview/atom_feed_helper/atom_feed.yml +52 -27
  53. data/config/action_view_helpers/actionview/cache_helper/cache.yml +25 -15
  54. data/config/action_view_helpers/actionview/cache_helper/cache_fragment_name.yml +9 -6
  55. data/config/action_view_helpers/actionview/cache_helper/cache_if.yml +20 -12
  56. data/config/action_view_helpers/actionview/cache_helper/cache_unless.yml +20 -12
  57. data/config/action_view_helpers/actionview/cache_helper/caching_predicate.yml +9 -6
  58. data/config/action_view_helpers/actionview/cache_helper/digest_path_from_template.yml +9 -6
  59. data/config/action_view_helpers/actionview/cache_helper/fragment_for.yml +9 -6
  60. data/config/action_view_helpers/actionview/cache_helper/fragment_name_with_digest.yml +9 -6
  61. data/config/action_view_helpers/actionview/cache_helper/read_fragment_for.yml +9 -6
  62. data/config/action_view_helpers/actionview/cache_helper/uncacheable.yml +9 -6
  63. data/config/action_view_helpers/actionview/cache_helper/write_fragment_for.yml +9 -6
  64. data/config/action_view_helpers/actionview/capture_helper/capture.yml +9 -6
  65. data/config/action_view_helpers/actionview/capture_helper/content_for.yml +20 -12
  66. data/config/action_view_helpers/actionview/capture_helper/content_for_predicate.yml +15 -9
  67. data/config/action_view_helpers/actionview/capture_helper/provide.yml +15 -9
  68. data/config/action_view_helpers/actionview/capture_helper/with_output_buffer.yml +9 -6
  69. data/config/action_view_helpers/actionview/content_exfiltration_prevention_helper/prepend_content_exfiltration_prevention.yml +9 -6
  70. data/config/action_view_helpers/actionview/content_exfiltration_prevention_helper/prevent_content_exfiltration.yml +9 -6
  71. data/config/action_view_helpers/actionview/controller_helper/action_name.yml +9 -6
  72. data/config/action_view_helpers/actionview/controller_helper/assign_controller.yml +9 -6
  73. data/config/action_view_helpers/actionview/controller_helper/controller.yml +9 -6
  74. data/config/action_view_helpers/actionview/controller_helper/controller_name.yml +9 -6
  75. data/config/action_view_helpers/actionview/controller_helper/controller_path.yml +9 -6
  76. data/config/action_view_helpers/actionview/controller_helper/cookies.yml +9 -6
  77. data/config/action_view_helpers/actionview/controller_helper/flash.yml +9 -6
  78. data/config/action_view_helpers/actionview/controller_helper/headers.yml +9 -6
  79. data/config/action_view_helpers/actionview/controller_helper/logger.yml +9 -6
  80. data/config/action_view_helpers/actionview/controller_helper/params.yml +9 -6
  81. data/config/action_view_helpers/actionview/controller_helper/request.yml +9 -6
  82. data/config/action_view_helpers/actionview/controller_helper/request_forgery_protection_token.yml +9 -6
  83. data/config/action_view_helpers/actionview/controller_helper/response.yml +9 -6
  84. data/config/action_view_helpers/actionview/controller_helper/session.yml +9 -6
  85. data/config/action_view_helpers/actionview/csp_helper/csp_meta_tag.yml +18 -11
  86. data/config/action_view_helpers/actionview/csrf_helper/csrf_meta_tags.yml +16 -10
  87. data/config/action_view_helpers/actionview/date_helper/date_select.yml +85 -51
  88. data/config/action_view_helpers/actionview/date_helper/datetime_select.yml +65 -39
  89. data/config/action_view_helpers/actionview/date_helper/distance_of_time_in_words.yml +30 -18
  90. data/config/action_view_helpers/actionview/date_helper/relative_time_in_words.yml +35 -21
  91. data/config/action_view_helpers/actionview/date_helper/select_date.yml +50 -30
  92. data/config/action_view_helpers/actionview/date_helper/select_datetime.yml +65 -39
  93. data/config/action_view_helpers/actionview/date_helper/select_day.yml +40 -24
  94. data/config/action_view_helpers/actionview/date_helper/select_hour.yml +50 -30
  95. data/config/action_view_helpers/actionview/date_helper/select_minute.yml +40 -24
  96. data/config/action_view_helpers/actionview/date_helper/select_month.yml +60 -36
  97. data/config/action_view_helpers/actionview/date_helper/select_second.yml +35 -21
  98. data/config/action_view_helpers/actionview/date_helper/select_time.yml +55 -33
  99. data/config/action_view_helpers/actionview/date_helper/select_year.yml +45 -27
  100. data/config/action_view_helpers/actionview/date_helper/time_ago_in_words.yml +21 -13
  101. data/config/action_view_helpers/actionview/date_helper/time_select.yml +60 -36
  102. data/config/action_view_helpers/actionview/date_helper/time_tag.yml +32 -20
  103. data/config/action_view_helpers/actionview/debug_helper/debug.yml +15 -9
  104. data/config/action_view_helpers/actionview/form_builder/button.yml +60 -0
  105. data/config/action_view_helpers/actionview/form_builder/submit.yml +48 -0
  106. data/config/action_view_helpers/actionview/form_helper/apply_form_for_options.yml +9 -6
  107. data/config/action_view_helpers/actionview/form_helper/checkbox.yml +41 -25
  108. data/config/action_view_helpers/actionview/form_helper/color_field.yml +25 -15
  109. data/config/action_view_helpers/actionview/form_helper/date_field.yml +35 -21
  110. data/config/action_view_helpers/actionview/form_helper/datetime_field.yml +41 -25
  111. data/config/action_view_helpers/actionview/form_helper/email_field.yml +25 -15
  112. data/config/action_view_helpers/actionview/form_helper/emitted_hidden_id.yml +9 -6
  113. data/config/action_view_helpers/actionview/form_helper/fields.yml +37 -18
  114. data/config/action_view_helpers/actionview/form_helper/fields_for.yml +33 -15
  115. data/config/action_view_helpers/actionview/form_helper/file_field.yml +45 -27
  116. data/config/action_view_helpers/actionview/form_helper/form_for.yml +45 -24
  117. data/config/action_view_helpers/actionview/form_helper/form_with.yml +56 -30
  118. data/config/action_view_helpers/actionview/form_helper/form_with_generates_ids.yml +9 -6
  119. data/config/action_view_helpers/actionview/form_helper/form_with_generates_remote_forms.yml +9 -6
  120. data/config/action_view_helpers/actionview/form_helper/hidden_field.yml +25 -15
  121. data/config/action_view_helpers/actionview/form_helper/label.yml +52 -27
  122. data/config/action_view_helpers/actionview/form_helper/month_field.yml +25 -15
  123. data/config/action_view_helpers/actionview/form_helper/multipart.yml +9 -6
  124. data/config/action_view_helpers/actionview/form_helper/multiple_file_field_include_hidden.yml +9 -6
  125. data/config/action_view_helpers/actionview/form_helper/number_field.yml +45 -27
  126. data/config/action_view_helpers/actionview/form_helper/password_field.yml +25 -15
  127. data/config/action_view_helpers/actionview/form_helper/radio_button.yml +30 -18
  128. data/config/action_view_helpers/actionview/form_helper/range_field.yml +45 -27
  129. data/config/action_view_helpers/actionview/form_helper/search_field.yml +25 -15
  130. data/config/action_view_helpers/actionview/form_helper/telephone_field.yml +26 -16
  131. data/config/action_view_helpers/actionview/form_helper/text_field.yml +25 -15
  132. data/config/action_view_helpers/actionview/form_helper/textarea.yml +31 -19
  133. data/config/action_view_helpers/actionview/form_helper/time_field.yml +40 -24
  134. data/config/action_view_helpers/actionview/form_helper/url_field.yml +25 -15
  135. data/config/action_view_helpers/actionview/form_helper/week_field.yml +25 -15
  136. data/config/action_view_helpers/actionview/form_options_helper/collection_checkboxes.yml +58 -31
  137. data/config/action_view_helpers/actionview/form_options_helper/collection_radio_buttons.yml +57 -30
  138. data/config/action_view_helpers/actionview/form_options_helper/collection_select.yml +65 -39
  139. data/config/action_view_helpers/actionview/form_options_helper/grouped_collection_select.yml +65 -39
  140. data/config/action_view_helpers/actionview/form_options_helper/grouped_options_for_select.yml +35 -21
  141. data/config/action_view_helpers/actionview/form_options_helper/option_groups_from_collection_for_select.yml +40 -24
  142. data/config/action_view_helpers/actionview/form_options_helper/options_for_select.yml +20 -12
  143. data/config/action_view_helpers/actionview/form_options_helper/options_from_collection_for_select.yml +30 -18
  144. data/config/action_view_helpers/actionview/form_options_helper/select.yml +60 -36
  145. data/config/action_view_helpers/actionview/form_options_helper/time_zone_options_for_select.yml +25 -15
  146. data/config/action_view_helpers/actionview/form_options_helper/time_zone_select.yml +50 -30
  147. data/config/action_view_helpers/actionview/form_options_helper/weekday_options_for_select.yml +30 -18
  148. data/config/action_view_helpers/actionview/form_options_helper/weekday_select.yml +30 -18
  149. data/config/action_view_helpers/actionview/form_tag_helper/button_tag.yml +39 -21
  150. data/config/action_view_helpers/actionview/form_tag_helper/checkbox_tag.yml +33 -21
  151. data/config/action_view_helpers/actionview/form_tag_helper/color_field_tag.yml +26 -17
  152. data/config/action_view_helpers/actionview/form_tag_helper/date_field_tag.yml +27 -17
  153. data/config/action_view_helpers/actionview/form_tag_helper/datetime_field_tag.yml +28 -18
  154. data/config/action_view_helpers/actionview/form_tag_helper/default_enforce_utf8.yml +9 -6
  155. data/config/action_view_helpers/actionview/form_tag_helper/email_field_tag.yml +27 -17
  156. data/config/action_view_helpers/actionview/form_tag_helper/embed_authenticity_token_in_remote_forms.yml +9 -6
  157. data/config/action_view_helpers/actionview/form_tag_helper/field_id.yml +30 -18
  158. data/config/action_view_helpers/actionview/form_tag_helper/field_name.yml +30 -18
  159. data/config/action_view_helpers/actionview/form_tag_helper/field_set_tag.yml +23 -15
  160. data/config/action_view_helpers/actionview/form_tag_helper/file_field_tag.yml +35 -22
  161. data/config/action_view_helpers/actionview/form_tag_helper/form_tag.yml +38 -24
  162. data/config/action_view_helpers/actionview/form_tag_helper/hidden_field_tag.yml +27 -17
  163. data/config/action_view_helpers/actionview/form_tag_helper/image_submit_tag.yml +31 -21
  164. data/config/action_view_helpers/actionview/form_tag_helper/label_tag.yml +33 -17
  165. data/config/action_view_helpers/actionview/form_tag_helper/month_field_tag.yml +27 -17
  166. data/config/action_view_helpers/actionview/form_tag_helper/number_field_tag.yml +47 -29
  167. data/config/action_view_helpers/actionview/form_tag_helper/password_field_tag.yml +27 -17
  168. data/config/action_view_helpers/actionview/form_tag_helper/radio_button_tag.yml +32 -20
  169. data/config/action_view_helpers/actionview/form_tag_helper/range_field_tag.yml +47 -29
  170. data/config/action_view_helpers/actionview/form_tag_helper/search_field_tag.yml +27 -17
  171. data/config/action_view_helpers/actionview/form_tag_helper/select_tag.yml +47 -29
  172. data/config/action_view_helpers/actionview/form_tag_helper/submit_tag.yml +33 -21
  173. data/config/action_view_helpers/actionview/form_tag_helper/telephone_field_tag.yml +28 -18
  174. data/config/action_view_helpers/actionview/form_tag_helper/text_field_tag.yml +27 -17
  175. data/config/action_view_helpers/actionview/form_tag_helper/textarea_tag.yml +31 -20
  176. data/config/action_view_helpers/actionview/form_tag_helper/time_field_tag.yml +27 -17
  177. data/config/action_view_helpers/actionview/form_tag_helper/url_field_tag.yml +27 -17
  178. data/config/action_view_helpers/actionview/form_tag_helper/utf8_enforcer_tag.yml +9 -6
  179. data/config/action_view_helpers/actionview/form_tag_helper/week_field_tag.yml +28 -18
  180. data/config/action_view_helpers/actionview/javascript_helper/escape_javascript.yml +16 -10
  181. data/config/action_view_helpers/actionview/javascript_helper/javascript_cdata_section.yml +9 -6
  182. data/config/action_view_helpers/actionview/javascript_helper/javascript_tag.yml +41 -27
  183. data/config/action_view_helpers/actionview/number_helper/number_to_currency.yml +29 -18
  184. data/config/action_view_helpers/actionview/number_helper/number_to_human.yml +25 -15
  185. data/config/action_view_helpers/actionview/number_helper/number_to_human_size.yml +20 -12
  186. data/config/action_view_helpers/actionview/number_helper/number_to_percentage.yml +20 -12
  187. data/config/action_view_helpers/actionview/number_helper/number_to_phone.yml +33 -20
  188. data/config/action_view_helpers/actionview/number_helper/number_with_delimiter.yml +21 -13
  189. data/config/action_view_helpers/actionview/number_helper/number_with_precision.yml +25 -15
  190. data/config/action_view_helpers/actionview/output_safety_helper/raw.yml +15 -9
  191. data/config/action_view_helpers/actionview/output_safety_helper/safe_join.yml +20 -12
  192. data/config/action_view_helpers/actionview/output_safety_helper/to_sentence.yml +24 -15
  193. data/config/action_view_helpers/actionview/record_identifier/dom_class.yml +20 -12
  194. data/config/action_view_helpers/actionview/record_identifier/dom_id.yml +20 -12
  195. data/config/action_view_helpers/actionview/record_identifier/dom_target.yml +15 -9
  196. data/config/action_view_helpers/actionview/record_identifier/model_name_from_record_or_class.yml +9 -6
  197. data/config/action_view_helpers/actionview/rendering_helper/render.yml +108 -22
  198. data/config/action_view_helpers/actionview/sanitize_helper/sanitize.yml +25 -15
  199. data/config/action_view_helpers/actionview/sanitize_helper/sanitize_css.yml +15 -9
  200. data/config/action_view_helpers/actionview/sanitize_helper/sanitizer_vendor.yml +9 -6
  201. data/config/action_view_helpers/actionview/sanitize_helper/strip_links.yml +15 -9
  202. data/config/action_view_helpers/actionview/sanitize_helper/strip_tags.yml +15 -9
  203. data/config/action_view_helpers/actionview/tag_helper/cdata_section.yml +15 -9
  204. data/config/action_view_helpers/actionview/tag_helper/content_tag.yml +59 -38
  205. data/config/action_view_helpers/actionview/tag_helper/escape_once.yml +15 -9
  206. data/config/action_view_helpers/actionview/tag_helper/tag.yml +54 -31
  207. data/config/action_view_helpers/actionview/tag_helper/token_list.yml +16 -10
  208. data/config/action_view_helpers/actionview/text_helper/concat.yml +15 -9
  209. data/config/action_view_helpers/actionview/text_helper/current_cycle.yml +15 -9
  210. data/config/action_view_helpers/actionview/text_helper/cycle.yml +23 -14
  211. data/config/action_view_helpers/actionview/text_helper/excerpt.yml +33 -20
  212. data/config/action_view_helpers/actionview/text_helper/highlight.yml +37 -18
  213. data/config/action_view_helpers/actionview/text_helper/pluralize.yml +30 -18
  214. data/config/action_view_helpers/actionview/text_helper/reset_cycle.yml +15 -9
  215. data/config/action_view_helpers/actionview/text_helper/safe_concat.yml +9 -6
  216. data/config/action_view_helpers/actionview/text_helper/simple_format.yml +33 -20
  217. data/config/action_view_helpers/actionview/text_helper/truncate.yml +38 -23
  218. data/config/action_view_helpers/actionview/text_helper/word_wrap.yml +25 -15
  219. data/config/action_view_helpers/actionview/translation_helper/debug_missing_translation.yml +9 -6
  220. data/config/action_view_helpers/actionview/translation_helper/localize.yml +26 -16
  221. data/config/action_view_helpers/actionview/translation_helper/translate.yml +31 -19
  222. data/config/action_view_helpers/actionview/url_helper/button_to.yml +57 -33
  223. data/config/action_view_helpers/actionview/url_helper/button_to_generates_button_tag.yml +9 -6
  224. data/config/action_view_helpers/actionview/url_helper/current_page?.yml +25 -15
  225. data/config/action_view_helpers/actionview/url_helper/link_to.yml +76 -53
  226. data/config/action_view_helpers/actionview/url_helper/link_to_if.yml +54 -20
  227. data/config/action_view_helpers/actionview/url_helper/link_to_unless.yml +54 -20
  228. data/config/action_view_helpers/actionview/url_helper/link_to_unless_current.yml +49 -17
  229. data/config/action_view_helpers/actionview/url_helper/mail_to.yml +60 -34
  230. data/config/action_view_helpers/actionview/url_helper/phone_to.yml +40 -22
  231. data/config/action_view_helpers/actionview/url_helper/sms_to.yml +45 -25
  232. data/config/action_view_helpers/actionview/url_helper/url_for.yml +15 -9
  233. data/config/action_view_helpers/importmap-rails/importmap_tags_helper/javascript_import_module_tag.yml +32 -0
  234. data/config/action_view_helpers/importmap-rails/importmap_tags_helper/javascript_importmap_module_preload_tags.yml +39 -0
  235. data/config/action_view_helpers/importmap-rails/importmap_tags_helper/javascript_importmap_tags.yml +35 -0
  236. data/config/action_view_helpers/importmap-rails/importmap_tags_helper/javascript_inline_importmap_tag.yml +32 -0
  237. data/config/action_view_helpers/importmap-rails/importmap_tags_helper/javascript_module_preload_tag.yml +35 -0
  238. data/config/action_view_helpers/turbo-rails/drive_helper/turbo_exempts_page_from_cache.yml +9 -6
  239. data/config/action_view_helpers/turbo-rails/drive_helper/turbo_exempts_page_from_cache_tag.yml +12 -8
  240. data/config/action_view_helpers/turbo-rails/drive_helper/turbo_exempts_page_from_preview.yml +9 -6
  241. data/config/action_view_helpers/turbo-rails/drive_helper/turbo_exempts_page_from_preview_tag.yml +12 -8
  242. data/config/action_view_helpers/turbo-rails/drive_helper/turbo_page_requires_reload.yml +9 -6
  243. data/config/action_view_helpers/turbo-rails/drive_helper/turbo_page_requires_reload_tag.yml +12 -8
  244. data/config/action_view_helpers/turbo-rails/drive_helper/turbo_refresh_method_tag.yml +17 -11
  245. data/config/action_view_helpers/turbo-rails/drive_helper/turbo_refresh_scroll_tag.yml +17 -11
  246. data/config/action_view_helpers/turbo-rails/drive_helper/turbo_refreshes_with.yml +20 -12
  247. data/config/action_view_helpers/turbo-rails/frames_helper/turbo_frame_tag.yml +54 -33
  248. data/config/action_view_helpers/turbo-rails/includes_helper/turbo_include_tags.yml +9 -6
  249. data/config/action_view_helpers/turbo-rails/streams_action_helper/turbo_stream_action_tag.yml +32 -20
  250. data/config/action_view_helpers/turbo-rails/streams_action_helper/turbo_stream_refresh_tag.yml +18 -11
  251. data/config/action_view_helpers/turbo-rails/streams_helper/turbo_stream.yml +9 -6
  252. data/config/action_view_helpers/turbo-rails/streams_helper/turbo_stream_from.yml +28 -18
  253. data/config/html_elements.yml +597 -0
  254. data/config/options.yml +1 -0
  255. data/config/slots/components.yml +52 -0
  256. data/config/state/kind.yml +61 -0
  257. data/config/state/operators.yml +27 -0
  258. data/config/state/predicates.yml +39 -0
  259. data/config/state/transforms.yml +18 -0
  260. data/config/view_context_methods/actionview/base/annotate_rendered_view_with_filenames.yml +4 -4
  261. data/config/view_context_methods/actionview/base/assign.yml +4 -4
  262. data/config/view_context_methods/actionview/base/assigns.yml +4 -4
  263. data/config/view_context_methods/actionview/base/automatically_disable_submit_tag.yml +4 -4
  264. data/config/view_context_methods/actionview/base/compiled_method_container.yml +4 -4
  265. data/config/view_context_methods/actionview/base/config.yml +4 -4
  266. data/config/view_context_methods/actionview/base/default_form_builder.yml +4 -4
  267. data/config/view_context_methods/actionview/base/default_formats.yml +4 -4
  268. data/config/view_context_methods/actionview/base/field_error_proc.yml +4 -4
  269. data/config/view_context_methods/actionview/base/formats.yml +4 -4
  270. data/config/view_context_methods/actionview/base/in_rendering_context.yml +4 -4
  271. data/config/view_context_methods/actionview/base/locale.yml +4 -4
  272. data/config/view_context_methods/actionview/base/lookup_context.yml +4 -4
  273. data/config/view_context_methods/actionview/base/output_buffer.yml +4 -4
  274. data/config/view_context_methods/actionview/base/prefix_partial_path_with_controller_namespace.yml +4 -4
  275. data/config/view_context_methods/actionview/base/remove_hidden_field_autocomplete.yml +4 -4
  276. data/config/view_context_methods/actionview/base/streaming_completion_on_exception.yml +4 -4
  277. data/config/view_context_methods/actionview/base/view_flow.yml +4 -4
  278. data/config/view_context_methods/actionview/base/view_paths.yml +4 -4
  279. data/config/view_context_methods/actionview/base/view_renderer.yml +4 -4
  280. data/config/view_context_methods/actionview/template/local_assigns.yml +4 -4
  281. data/config/view_context_methods/activemodel/conversion/convert_to_model.yml +4 -4
  282. data/config/view_context_methods/activesupport/benchmarkable/benchmark.yml +4 -4
  283. data/config.yml +1249 -786
  284. data/exe/herb +2 -0
  285. data/ext/herb/error_helpers.c +379 -17
  286. data/ext/herb/error_helpers.h +1 -1
  287. data/ext/herb/extconf.rb +4 -2
  288. data/ext/herb/extension.c +137 -74
  289. data/ext/herb/extension_helpers.c +81 -35
  290. data/ext/herb/extension_helpers.h +4 -1
  291. data/ext/herb/nodes.c +859 -374
  292. data/ext/herb/nodes.h +3 -2
  293. data/ext/herb/parser_options_helpers.c +151 -0
  294. data/ext/herb/parser_options_helpers.h +14 -0
  295. data/herb.gemspec +3 -2
  296. data/lib/herb/action_view/helper_registry.rb +1358 -62
  297. data/lib/herb/analysis/partial_declaration.rb +140 -0
  298. data/lib/herb/analysis/partial_index.rb +189 -0
  299. data/lib/herb/analysis/partial_resolution.rb +161 -0
  300. data/lib/herb/analysis/partial_resolver.rb +144 -0
  301. data/lib/herb/analysis/project_index.rb +152 -0
  302. data/lib/herb/{action_view → analysis}/render_analyzer.rb +287 -77
  303. data/lib/herb/analysis/render_graph/ancestor_chain.rb +27 -0
  304. data/lib/herb/analysis/render_graph/builder.rb +376 -0
  305. data/lib/herb/analysis/render_graph/call_frame.rb +9 -0
  306. data/lib/herb/analysis/render_graph/call_site_location.rb +23 -0
  307. data/lib/herb/analysis/render_graph/inferred_signature.rb +21 -0
  308. data/lib/herb/analysis/render_graph/partial_call_site.rb +40 -0
  309. data/lib/herb/analysis/render_graph/partial_context.rb +46 -0
  310. data/lib/herb/analysis/render_graph/template_roots.rb +31 -0
  311. data/lib/herb/analysis/render_graph.rb +285 -0
  312. data/lib/herb/analysis/ruby_locals_index/local.rb +25 -0
  313. data/lib/herb/analysis/ruby_locals_index/named_reference.rb +22 -0
  314. data/lib/herb/analysis/ruby_locals_index/offset_table.rb +44 -0
  315. data/lib/herb/analysis/ruby_locals_index/reference_collector.rb +80 -0
  316. data/lib/herb/analysis/ruby_locals_index/state_locals.rb +49 -0
  317. data/lib/herb/analysis/ruby_locals_index.rb +165 -0
  318. data/lib/herb/analysis/ruby_reference.rb +67 -0
  319. data/lib/herb/analysis/template_dependencies/dependency_collector.rb +179 -0
  320. data/lib/herb/analysis/template_dependencies/node_dependency_collector.rb +309 -0
  321. data/lib/herb/analysis/template_dependencies.rb +562 -0
  322. data/lib/herb/ast/erb_render_node.rb +26 -94
  323. data/lib/herb/ast/helpers.rb +90 -10
  324. data/lib/herb/ast/herb_directive_node.rb +18 -0
  325. data/lib/herb/ast/node.rb +32 -2
  326. data/lib/herb/ast/nodes.rb +1368 -105
  327. data/lib/herb/backend.rb +73 -0
  328. data/lib/herb/bootstrap.rb +8 -8
  329. data/lib/herb/cli.rb +555 -32
  330. data/lib/herb/colors.rb +14 -0
  331. data/lib/herb/configuration.rb +71 -35
  332. data/lib/herb/defaults.yml +2 -1
  333. data/lib/herb/dev/assets.rb +57 -0
  334. data/lib/herb/dev/classifier.rb +84 -0
  335. data/lib/herb/dev/embedded.rb +27 -0
  336. data/lib/herb/dev/pipeline.rb +305 -0
  337. data/lib/herb/dev/protocol.rb +221 -0
  338. data/lib/herb/dev/runner.rb +180 -175
  339. data/lib/herb/dev/server.rb +89 -26
  340. data/lib/herb/dev/server_entry.rb +41 -6
  341. data/lib/herb/dev/watcher.rb +181 -0
  342. data/lib/herb/dev.rb +163 -0
  343. data/lib/herb/diagnostic/formatter.rb +88 -0
  344. data/lib/herb/diagnostic.rb +172 -0
  345. data/lib/herb/diff/operation.rb +36 -0
  346. data/lib/herb/diff/result.rb +62 -0
  347. data/lib/herb/diff.rb +10 -0
  348. data/lib/herb/engine/collector.rb +62 -0
  349. data/lib/herb/engine/compiler.rb +387 -113
  350. data/lib/herb/engine/component_tags/constant_resolver.rb +28 -0
  351. data/lib/herb/engine/component_tags/partial_resolver.rb +54 -0
  352. data/lib/herb/engine/component_tags/resolver.rb +32 -0
  353. data/lib/herb/engine/component_tags/visitor.rb +231 -0
  354. data/lib/herb/engine/css_inliner/inliner.rb +101 -0
  355. data/lib/herb/engine/css_inliner/visitor.rb +174 -0
  356. data/lib/herb/engine/errors.rb +122 -0
  357. data/lib/herb/engine/helpers.rb +82 -0
  358. data/lib/herb/engine/inline_render/inliner.rb +122 -0
  359. data/lib/herb/engine/inline_render/visitor.rb +267 -0
  360. data/lib/herb/engine/runtime/entry.rb +62 -0
  361. data/lib/herb/engine/runtime/error_page.rb +362 -0
  362. data/lib/herb/engine/runtime/html_safe_assertions.rb +217 -0
  363. data/lib/herb/engine/runtime/journal/summary.rb +227 -0
  364. data/lib/herb/engine/runtime/journal.rb +379 -0
  365. data/lib/herb/engine/runtime/middleware.rb +212 -0
  366. data/lib/herb/engine/runtime/observations.rb +73 -0
  367. data/lib/herb/engine/runtime/report.rb +204 -0
  368. data/lib/herb/engine/runtime/session.rb +437 -0
  369. data/lib/herb/engine/runtime.rb +21 -0
  370. data/lib/herb/engine/scoped_style/channel.rb +66 -0
  371. data/lib/herb/engine/scoped_style/collector.rb +74 -0
  372. data/lib/herb/engine/scoped_style/visitor.rb +533 -0
  373. data/lib/herb/engine/slots/annotation.rb +98 -0
  374. data/lib/herb/engine/slots/bindings.rb +61 -0
  375. data/lib/herb/engine/slots/callee.rb +118 -0
  376. data/lib/herb/engine/slots/component_definitions.rb +67 -0
  377. data/lib/herb/engine/slots/components/async.rb +24 -0
  378. data/lib/herb/engine/slots/components/base.rb +132 -0
  379. data/lib/herb/engine/slots/components/deferred.rb +81 -0
  380. data/lib/herb/engine/slots/components/fallback.rb +27 -0
  381. data/lib/herb/engine/slots/components/fragment.rb +99 -0
  382. data/lib/herb/engine/slots/components/lazy.rb +24 -0
  383. data/lib/herb/engine/slots/components.rb +52 -0
  384. data/lib/herb/engine/slots/dependencies/channel.rb +72 -0
  385. data/lib/herb/engine/slots/dependencies.rb +269 -0
  386. data/lib/herb/engine/slots/dynamics_compiler.rb +864 -0
  387. data/lib/herb/engine/slots/identifier.rb +35 -0
  388. data/lib/herb/engine/slots/manifest/channel.rb +74 -0
  389. data/lib/herb/engine/slots/manifest/collector.rb +75 -0
  390. data/lib/herb/engine/slots/markers.rb +152 -0
  391. data/lib/herb/engine/slots/render_bindings.rb +141 -0
  392. data/lib/herb/engine/slots/schema_compiler.rb +94 -0
  393. data/lib/herb/engine/slots/state_anchor.rb +94 -0
  394. data/lib/herb/engine/slots/state_compiler.rb +1325 -0
  395. data/lib/herb/engine/slots/state_directives.rb +854 -0
  396. data/lib/herb/engine/slots/state_kinds.rb +54 -0
  397. data/lib/herb/engine/slots/state_operators.rb +36 -0
  398. data/lib/herb/engine/slots/state_overrides.rb +79 -0
  399. data/lib/herb/engine/slots/state_predicates.rb +65 -0
  400. data/lib/herb/engine/slots/state_transforms.rb +42 -0
  401. data/lib/herb/engine/slots/statics.rb +185 -0
  402. data/lib/herb/engine/slots/subtree.rb +82 -0
  403. data/lib/herb/engine/slots/subtree_compiler.rb +255 -0
  404. data/lib/herb/engine/slots/types.rb +42 -0
  405. data/lib/herb/engine/slots/visitor.rb +2267 -0
  406. data/lib/herb/engine/validators/accessibility_validator.rb +3 -3
  407. data/lib/herb/engine/validators/base.rb +36 -0
  408. data/lib/herb/engine/validators/generator_template_validator.rb +39 -0
  409. data/lib/herb/engine/validators/nesting_validator.rb +3 -3
  410. data/lib/herb/engine/validators/render_validator.rb +13 -33
  411. data/lib/herb/engine/validators/security_validator.rb +3 -17
  412. data/lib/herb/engine/validators.rb +43 -0
  413. data/lib/herb/engine/visitors/auto_close_omitted_tags_visitor.rb +48 -0
  414. data/lib/herb/engine/visitors/content_for_visitor.rb +127 -0
  415. data/lib/herb/engine/{debug_visitor.rb → visitors/debug_visitor.rb} +122 -94
  416. data/lib/herb/engine/visitors/html_safe_assertions_visitor.rb +281 -0
  417. data/lib/herb/engine/visitors/instrumentation_visitor.rb +290 -0
  418. data/lib/herb/engine/visitors/optimize_visitor.rb +728 -0
  419. data/lib/herb/engine/visitors/remove_comments_visitor.rb +106 -0
  420. data/lib/herb/engine/visitors/source_attribution_visitor.rb +177 -0
  421. data/lib/herb/engine.rb +218 -259
  422. data/lib/herb/ensure_installed.rb +43 -0
  423. data/lib/herb/errors.rb +681 -153
  424. data/lib/herb/fingerprint.rb +82 -0
  425. data/lib/herb/html/elements.rb +18 -0
  426. data/lib/herb/html/util.rb +21 -2
  427. data/lib/herb/lex_result.rb +0 -10
  428. data/lib/herb/locate.rb +163 -0
  429. data/lib/herb/location.rb +20 -0
  430. data/lib/herb/parse_result.rb +17 -11
  431. data/lib/herb/parser_options.rb +69 -40
  432. data/lib/herb/position.rb +19 -0
  433. data/lib/herb/prism_inspect.rb +1 -4
  434. data/lib/herb/project.rb +39 -23
  435. data/lib/herb/range.rb +5 -0
  436. data/lib/herb/result.rb +2 -2
  437. data/lib/herb/ruby_program.rb +110 -0
  438. data/lib/herb/source_path.rb +232 -0
  439. data/lib/herb/token.rb +14 -3
  440. data/lib/herb/version.rb +1 -1
  441. data/lib/herb/visitor/context/origin.rb +52 -0
  442. data/lib/herb/visitor/context/replacements.rb +59 -0
  443. data/lib/herb/visitor/context.rb +169 -0
  444. data/lib/herb/visitor/context_aware.rb +45 -0
  445. data/lib/herb/visitor/diagnostics.rb +148 -0
  446. data/lib/herb/visitor/experimental.rb +33 -0
  447. data/lib/herb/visitor/parser_option_requirements.rb +151 -0
  448. data/lib/herb/visitor/stack.rb +192 -0
  449. data/lib/herb/visitor.rb +47 -1
  450. data/lib/herb/warnings.rb +25 -0
  451. data/lib/herb.rb +74 -63
  452. data/sig/herb/action_view/helper_registry.rbs +82 -10
  453. data/sig/herb/analysis/partial_declaration.rbs +80 -0
  454. data/sig/herb/analysis/partial_index.rbs +66 -0
  455. data/sig/herb/analysis/partial_resolution.rbs +57 -0
  456. data/sig/herb/analysis/partial_resolver.rbs +76 -0
  457. data/sig/herb/analysis/project_index.rbs +57 -0
  458. data/sig/herb/{action_view → analysis}/render_analyzer.rbs +25 -4
  459. data/sig/herb/analysis/render_graph/ancestor_chain.rbs +22 -0
  460. data/sig/herb/analysis/render_graph/builder.rbs +180 -0
  461. data/sig/herb/analysis/render_graph/call_frame.rbs +26 -0
  462. data/sig/herb/analysis/render_graph/call_site_location.rbs +28 -0
  463. data/sig/herb/analysis/render_graph/inferred_signature.rbs +27 -0
  464. data/sig/herb/analysis/render_graph/partial_call_site.rbs +36 -0
  465. data/sig/herb/analysis/render_graph/partial_context.rbs +31 -0
  466. data/sig/herb/analysis/render_graph/template_roots.rbs +32 -0
  467. data/sig/herb/analysis/render_graph.rbs +83 -0
  468. data/sig/herb/analysis/ruby_locals_index/local.rbs +21 -0
  469. data/sig/herb/analysis/ruby_locals_index/named_reference.rbs +20 -0
  470. data/sig/herb/analysis/ruby_locals_index/offset_table.rbs +26 -0
  471. data/sig/herb/analysis/ruby_locals_index/reference_collector.rbs +40 -0
  472. data/sig/herb/analysis/ruby_locals_index/state_locals.rbs +19 -0
  473. data/sig/herb/analysis/ruby_locals_index.rbs +62 -0
  474. data/sig/herb/analysis/ruby_reference.rbs +28 -0
  475. data/sig/herb/analysis/template_dependencies/dependency_collector.rbs +52 -0
  476. data/sig/herb/analysis/template_dependencies/node_dependency_collector.rbs +81 -0
  477. data/sig/herb/analysis/template_dependencies.rbs +125 -0
  478. data/sig/herb/ast/erb_render_node.rbs +10 -2
  479. data/sig/herb/ast/helpers.rbs +31 -1
  480. data/sig/herb/ast/herb_directive_node.rbs +13 -0
  481. data/sig/herb/ast/node.rbs +9 -0
  482. data/sig/herb/ast/nodes.rbs +668 -89
  483. data/sig/herb/backend.rbs +52 -0
  484. data/sig/herb/bootstrap.rbs +2 -0
  485. data/sig/herb/colors.rbs +3 -0
  486. data/sig/herb/configuration.rbs +27 -3
  487. data/sig/herb/dev/assets.rbs +27 -0
  488. data/sig/herb/dev/classifier.rbs +57 -0
  489. data/sig/herb/dev/embedded.rbs +21 -0
  490. data/sig/herb/dev/pipeline.rbs +118 -0
  491. data/sig/herb/dev/protocol.rbs +78 -0
  492. data/sig/herb/dev/runner.rbs +64 -23
  493. data/sig/herb/dev/server.rbs +49 -22
  494. data/sig/herb/dev/server_entry.rbs +46 -21
  495. data/sig/herb/dev/watcher.rbs +84 -0
  496. data/sig/herb/dev.rbs +58 -0
  497. data/sig/herb/diagnostic/formatter.rbs +28 -0
  498. data/sig/herb/diagnostic.rbs +88 -0
  499. data/sig/herb/diff/operation.rbs +36 -0
  500. data/sig/herb/diff/result.rbs +36 -0
  501. data/sig/herb/diff.rbs +6 -0
  502. data/sig/herb/engine/collector.rbs +48 -0
  503. data/sig/herb/engine/compiler.rbs +74 -24
  504. data/sig/herb/engine/component_tags/constant_resolver.rbs +19 -0
  505. data/sig/herb/engine/component_tags/partial_resolver.rbs +30 -0
  506. data/sig/herb/engine/component_tags/resolver.rbs +25 -0
  507. data/sig/herb/engine/component_tags/visitor.rbs +69 -0
  508. data/sig/herb/engine/css_inliner/inliner.rbs +65 -0
  509. data/sig/herb/engine/css_inliner/visitor.rbs +87 -0
  510. data/sig/herb/engine/errors.rbs +68 -0
  511. data/sig/herb/engine/helpers.rbs +28 -0
  512. data/sig/herb/engine/inline_render/inliner.rbs +39 -0
  513. data/sig/herb/engine/inline_render/visitor.rbs +104 -0
  514. data/sig/herb/engine/runtime/entry.rbs +43 -0
  515. data/sig/herb/engine/runtime/error_page.rbs +115 -0
  516. data/sig/herb/engine/runtime/html_safe_assertions.rbs +99 -0
  517. data/sig/herb/engine/runtime/journal/summary.rbs +172 -0
  518. data/sig/herb/engine/runtime/journal.rbs +126 -0
  519. data/sig/herb/engine/runtime/middleware.rbs +96 -0
  520. data/sig/herb/engine/runtime/observations.rbs +38 -0
  521. data/sig/herb/engine/runtime/report.rbs +97 -0
  522. data/sig/herb/engine/runtime/session.rbs +233 -0
  523. data/sig/herb/engine/runtime.rbs +14 -0
  524. data/sig/herb/engine/scoped_style/channel.rbs +45 -0
  525. data/sig/herb/engine/scoped_style/collector.rbs +45 -0
  526. data/sig/herb/engine/scoped_style/visitor.rbs +220 -0
  527. data/sig/herb/engine/slots/annotation.rbs +72 -0
  528. data/sig/herb/engine/slots/bindings.rbs +34 -0
  529. data/sig/herb/engine/slots/callee.rbs +62 -0
  530. data/sig/herb/engine/slots/component_definitions.rbs +19 -0
  531. data/sig/herb/engine/slots/components/async.rbs +20 -0
  532. data/sig/herb/engine/slots/components/base.rbs +60 -0
  533. data/sig/herb/engine/slots/components/deferred.rbs +29 -0
  534. data/sig/herb/engine/slots/components/fallback.rbs +21 -0
  535. data/sig/herb/engine/slots/components/fragment.rbs +34 -0
  536. data/sig/herb/engine/slots/components/lazy.rbs +20 -0
  537. data/sig/herb/engine/slots/components.rbs +30 -0
  538. data/sig/herb/engine/slots/dependencies/channel.rbs +51 -0
  539. data/sig/herb/engine/slots/dependencies.rbs +94 -0
  540. data/sig/herb/engine/slots/dynamics_compiler.rbs +352 -0
  541. data/sig/herb/engine/slots/identifier.rbs +19 -0
  542. data/sig/herb/engine/slots/manifest/channel.rbs +49 -0
  543. data/sig/herb/engine/slots/manifest/collector.rbs +45 -0
  544. data/sig/herb/engine/slots/markers.rbs +99 -0
  545. data/sig/herb/engine/slots/render_bindings.rbs +69 -0
  546. data/sig/herb/engine/slots/schema_compiler.rbs +62 -0
  547. data/sig/herb/engine/slots/state_anchor.rbs +41 -0
  548. data/sig/herb/engine/slots/state_compiler.rbs +258 -0
  549. data/sig/herb/engine/slots/state_directives.rbs +278 -0
  550. data/sig/herb/engine/slots/state_kinds.rbs +24 -0
  551. data/sig/herb/engine/slots/state_operators.rbs +19 -0
  552. data/sig/herb/engine/slots/state_overrides.rbs +33 -0
  553. data/sig/herb/engine/slots/state_predicates.rbs +16 -0
  554. data/sig/herb/engine/slots/state_transforms.rbs +15 -0
  555. data/sig/herb/engine/slots/statics.rbs +67 -0
  556. data/sig/herb/engine/slots/subtree.rbs +49 -0
  557. data/sig/herb/engine/slots/subtree_compiler.rbs +130 -0
  558. data/sig/herb/engine/slots/types.rbs +46 -0
  559. data/sig/herb/engine/slots/visitor.rbs +603 -0
  560. data/sig/herb/engine/validators/accessibility_validator.rbs +1 -1
  561. data/sig/herb/engine/validators/base.rbs +28 -0
  562. data/sig/herb/engine/validators/generator_template_validator.rbs +19 -0
  563. data/sig/herb/engine/validators/nesting_validator.rbs +1 -1
  564. data/sig/herb/engine/validators/render_validator.rbs +2 -6
  565. data/sig/herb/engine/validators/security_validator.rbs +1 -3
  566. data/sig/herb/engine/validators.rbs +21 -0
  567. data/sig/herb/engine/visitors/auto_close_omitted_tags_visitor.rbs +26 -0
  568. data/sig/herb/engine/visitors/content_for_visitor.rbs +52 -0
  569. data/sig/herb/engine/{debug_visitor.rbs → visitors/debug_visitor.rbs} +26 -15
  570. data/sig/herb/engine/visitors/html_safe_assertions_visitor.rbs +100 -0
  571. data/sig/herb/engine/visitors/instrumentation_visitor.rbs +111 -0
  572. data/sig/herb/engine/visitors/optimize_visitor.rbs +246 -0
  573. data/sig/herb/engine/visitors/remove_comments_visitor.rbs +66 -0
  574. data/sig/herb/engine/visitors/source_attribution_visitor.rbs +90 -0
  575. data/sig/herb/engine.rbs +47 -41
  576. data/sig/herb/ensure_installed.rbs +9 -0
  577. data/sig/herb/errors.rbs +311 -0
  578. data/sig/herb/fingerprint.rbs +37 -0
  579. data/sig/herb/html/elements.rbs +19 -0
  580. data/sig/herb/html/util.rbs +15 -1
  581. data/sig/herb/lex_result.rbs +0 -6
  582. data/sig/herb/locate.rbs +89 -0
  583. data/sig/herb/location.rbs +12 -0
  584. data/sig/herb/parse_result.rbs +10 -8
  585. data/sig/herb/parser_options.rbs +53 -19
  586. data/sig/herb/position.rbs +11 -0
  587. data/sig/herb/range.rbs +3 -0
  588. data/sig/herb/ruby_program.rbs +51 -0
  589. data/sig/herb/source_path.rbs +132 -0
  590. data/sig/herb/token.rbs +5 -2
  591. data/sig/herb/visitor/context/origin.rbs +51 -0
  592. data/sig/herb/visitor/context/replacements.rbs +39 -0
  593. data/sig/herb/visitor/context.rbs +83 -0
  594. data/sig/herb/visitor/context_aware.rbs +32 -0
  595. data/sig/herb/visitor/diagnostics.rbs +82 -0
  596. data/sig/herb/visitor/experimental.rbs +23 -0
  597. data/sig/herb/visitor/parser_option_requirements.rbs +76 -0
  598. data/sig/herb/visitor/stack.rbs +91 -0
  599. data/sig/herb/visitor.rbs +22 -0
  600. data/sig/herb/warnings.rbs +10 -0
  601. data/sig/herb.rbs +27 -10
  602. data/sig/manifest.yaml +13 -0
  603. data/sig/serialized_ast_errors.rbs +62 -1
  604. data/sig/serialized_ast_nodes.rbs +59 -2
  605. data/src/analyze/action_view/attribute_extraction_helpers.c +73 -36
  606. data/src/analyze/action_view/generated_handlers.c +37 -1
  607. data/src/analyze/action_view/generated_handlers.h +2 -1
  608. data/src/analyze/action_view/helper_registry.c +1353 -58
  609. data/src/analyze/action_view/registry.c +10 -17
  610. data/src/analyze/action_view/stylesheet_link_tag.c +40 -0
  611. data/src/analyze/action_view/tag_helper_node_builders.c +63 -3
  612. data/src/analyze/action_view/tag_helpers.c +502 -111
  613. data/src/analyze/analyze.c +306 -89
  614. data/src/analyze/analyze_helpers.c +502 -237
  615. data/src/analyze/analyzed_ruby.c +2 -0
  616. data/src/analyze/builders.c +80 -51
  617. data/src/analyze/conditional_elements.c +13 -8
  618. data/src/analyze/conditional_open_tags.c +11 -5
  619. data/src/analyze/control_type.c +36 -13
  620. data/src/analyze/herb_directives.c +701 -0
  621. data/src/analyze/invalid_structures.c +11 -7
  622. data/src/analyze/iteration_nodes.c +306 -0
  623. data/src/analyze/missing_end.c +116 -32
  624. data/src/analyze/parse_errors.c +8 -3
  625. data/src/analyze/postfix_conditionals.c +98 -63
  626. data/src/analyze/prism_annotate.c +45 -13
  627. data/src/analyze/render_nodes.c +348 -123
  628. data/src/analyze/strict_locals.c +30 -26
  629. data/src/analyze/ternary_conditionals.c +95 -70
  630. data/src/analyze/transform.c +43 -1
  631. data/src/ast/ast_node.c +3 -13
  632. data/src/ast/ast_nodes.c +914 -113
  633. data/src/ast/ast_pretty_print.c +166 -3
  634. data/src/diff/herb_diff.c +8 -0
  635. data/src/diff/herb_diff_attributes.c +1 -0
  636. data/src/diff/herb_diff_children.c +4 -3
  637. data/src/diff/herb_diff_helpers.c +7 -1
  638. data/src/diff/herb_diff_nodes.c +186 -71
  639. data/src/diff/herb_hash_tree.c +99 -1
  640. data/src/errors.c +1124 -105
  641. data/src/extract.c +227 -144
  642. data/src/herb.c +43 -8
  643. data/src/include/analyze/action_view/attribute_extraction_helpers.h +1 -1
  644. data/src/include/analyze/action_view/helper_registry.h +28 -4
  645. data/src/include/analyze/action_view/tag_helper_handler.h +1 -1
  646. data/src/include/analyze/action_view/tag_helper_node_builders.h +7 -0
  647. data/src/include/analyze/analyze.h +11 -22
  648. data/src/include/analyze/analyzed_ruby.h +25 -0
  649. data/src/include/analyze/builders.h +16 -0
  650. data/src/include/analyze/helpers.h +25 -24
  651. data/src/include/analyze/herb_directive_kinds.h +41 -0
  652. data/src/include/analyze/herb_directives.h +14 -0
  653. data/src/include/analyze/iteration_nodes.h +11 -0
  654. data/src/include/analyze/prism_annotate.h +3 -3
  655. data/src/include/analyze/ternary_conditionals.h +2 -0
  656. data/src/include/ast/ast_node.h +1 -5
  657. data/src/include/ast/ast_nodes.h +78 -3
  658. data/src/include/ast/ast_pretty_print.h +1 -1
  659. data/src/include/diff/herb_diff.h +11 -0
  660. data/src/include/errors.h +163 -38
  661. data/src/include/extract.h +11 -0
  662. data/src/include/herb.h +6 -0
  663. data/src/include/lexer/erb_openers.h +29 -0
  664. data/src/include/lexer/lexer.h +1 -0
  665. data/src/include/lexer/lexer_peek_helpers.h +8 -1
  666. data/src/include/lexer/lexer_struct.h +4 -0
  667. data/src/include/lexer/token.h +5 -0
  668. data/src/include/lexer/token_struct.h +8 -6
  669. data/src/include/lib/hb_allocator.h +2 -1
  670. data/src/include/lib/hb_array.h +2 -0
  671. data/src/include/lib/hb_clock.h +15 -0
  672. data/src/include/lib/hb_foreach.h +1 -1
  673. data/src/include/lib/hb_string.h +7 -0
  674. data/src/include/parser/dot_notation.h +1 -1
  675. data/src/include/parser/foreign_content_elements.h +32 -0
  676. data/src/include/parser/parser.h +40 -26
  677. data/src/include/parser/parser_helpers.h +13 -11
  678. data/src/include/parser/parser_options.h +41 -0
  679. data/src/include/prism/herb_prism_node.h +6 -1
  680. data/src/include/prism/ruby_parser.h +6 -0
  681. data/src/include/util/html_elements.h +85 -0
  682. data/src/include/util/html_util.h +1 -0
  683. data/src/include/version.h +1 -1
  684. data/src/lexer/lexer_peek_helpers.c +15 -1
  685. data/src/lexer/token.c +89 -1
  686. data/src/lexer.c +228 -12
  687. data/src/lib/hb_allocator.c +2 -0
  688. data/src/lib/hb_array.c +26 -0
  689. data/src/lib/hb_string.c +26 -0
  690. data/src/main.c +1 -1
  691. data/src/parser/dot_notation.c +4 -3
  692. data/src/parser/match_tags.c +66 -1
  693. data/src/parser/parser_helpers.c +69 -37
  694. data/src/parser.c +658 -385
  695. data/src/parser_options_defaults.c +30 -0
  696. data/src/prism/prism_helpers.c +94 -0
  697. data/src/prism/ruby_parser.c +49 -0
  698. data/src/util/html_util.c +11 -58
  699. data/src/visitor.c +77 -1
  700. data/templates/ext/herb/error_helpers.c.erb +1 -1
  701. data/templates/ext/herb/nodes.c.erb +19 -14
  702. data/templates/ext/herb/nodes.h.erb +2 -1
  703. data/templates/ext/herb/parser_options_helpers.c.erb +69 -0
  704. data/templates/ext/herb/parser_options_helpers.h.erb +11 -0
  705. data/templates/java/nodes.c.erb +21 -17
  706. data/templates/java/nodes.h.erb +3 -2
  707. data/templates/java/org/herb/ParserOptions.java.erb +24 -0
  708. data/templates/java/org/herb/ast/HelperRegistry.java.erb +67 -31
  709. data/templates/java/org/herb/ast/HelperType.java.erb +29 -0
  710. data/templates/java/org/herb/ast/Nodes.java.erb +11 -7
  711. data/templates/java/parser_options_helpers.c.erb +45 -0
  712. data/templates/java/parser_options_helpers.h.erb +10 -0
  713. data/templates/javascript/packages/client/src/state-kinds.ts.erb +49 -0
  714. data/templates/javascript/packages/client/src/state-operators.ts.erb +15 -0
  715. data/templates/javascript/packages/client/src/state-predicates.ts.erb +27 -0
  716. data/templates/javascript/packages/client/src/state-transforms.ts.erb +19 -0
  717. data/templates/javascript/packages/core/src/action-view-helpers.ts.erb +47 -0
  718. data/templates/javascript/packages/core/src/built-in-components.ts.erb +67 -0
  719. data/templates/javascript/packages/core/src/errors.ts.erb +9 -3
  720. data/templates/javascript/packages/core/src/foreign-content-elements.ts.erb +18 -0
  721. data/templates/javascript/packages/core/src/html-constants.ts.erb +32 -0
  722. data/templates/javascript/packages/core/src/html-elements.ts.erb +41 -0
  723. data/templates/javascript/packages/core/src/node-type-guards.ts.erb +11 -7
  724. data/templates/javascript/packages/core/src/nodes.ts.erb +103 -20
  725. data/templates/javascript/packages/core/src/parser-options.ts.erb +41 -0
  726. data/templates/javascript/packages/core/src/visitor.ts.erb +1 -1
  727. data/templates/javascript/packages/node/extension/error_helpers.cpp.erb +3 -3
  728. data/templates/javascript/packages/node/extension/nodes.cpp.erb +18 -13
  729. data/templates/javascript/packages/node/extension/nodes.h.erb +3 -3
  730. data/templates/javascript/packages/node/extension/parser_options_helpers.cpp.erb +41 -0
  731. data/templates/javascript/packages/node/extension/parser_options_helpers.h.erb +12 -0
  732. data/templates/lib/herb/action_view/helper_registry.rb.erb +77 -3
  733. data/templates/lib/herb/ast/nodes.rb.erb +16 -6
  734. data/templates/lib/herb/engine/slots/component_definitions.rb.erb +38 -0
  735. data/templates/lib/herb/engine/slots/state_kinds.rb.erb +37 -0
  736. data/templates/lib/herb/engine/slots/state_operators.rb.erb +26 -0
  737. data/templates/lib/herb/engine/slots/state_predicates.rb.erb +39 -0
  738. data/templates/lib/herb/engine/slots/state_transforms.rb.erb +27 -0
  739. data/templates/lib/herb/errors.rb.erb +34 -6
  740. data/templates/lib/herb/html/elements.rb.erb +12 -0
  741. data/templates/lib/herb/parser_options.rb.erb +32 -0
  742. data/templates/lib/herb/visitor.rb.erb +7 -1
  743. data/templates/rust/herb-printer/src/printer_visitor.rs.erb +14 -0
  744. data/templates/rust/src/action_view_helpers.rs.erb +38 -0
  745. data/templates/rust/src/ast/nodes.rs.erb +21 -31
  746. data/templates/rust/src/errors.rs.erb +1 -1
  747. data/templates/rust/src/nodes.rs.erb +58 -26
  748. data/templates/rust/src/parser_options.rs.erb +16 -0
  749. data/templates/rust/src/prism/generated_deserialize.rs.erb +109 -0
  750. data/templates/rust/src/prism/generated_prettyprint.rs.erb +153 -0
  751. data/templates/rust/src/union_types.rs.erb +7 -1
  752. data/templates/rust/src/visitor.rs.erb +1 -1
  753. data/templates/src/analyze/action_view/helper_registry.c.erb +22 -0
  754. data/templates/src/analyze/missing_end.c.erb +13 -5
  755. data/templates/src/ast/ast_nodes.c.erb +41 -2
  756. data/templates/src/diff/herb_diff_nodes.c.erb +44 -8
  757. data/templates/src/errors.c.erb +8 -3
  758. data/templates/src/include/analyze/action_view/helper_registry.h.erb +19 -0
  759. data/templates/src/include/analyze/herb_directive_kinds.h.erb +25 -0
  760. data/templates/src/include/errors.h.erb +3 -1
  761. data/templates/src/include/parser/foreign_content_elements.h.erb +23 -0
  762. data/templates/src/include/parser/parser_options.h.erb +21 -0
  763. data/templates/src/include/util/html_elements.h.erb +28 -0
  764. data/templates/src/parser_options_defaults.c.erb +9 -0
  765. data/templates/template.rb +564 -9
  766. data/templates/wasm/error_helpers.cpp.erb +4 -4
  767. data/templates/wasm/nodes.cpp.erb +17 -27
  768. data/templates/wasm/nodes.h.erb +3 -3
  769. data/templates/wasm/parser_options_helpers.cpp.erb +25 -0
  770. data/templates/wasm/parser_options_helpers.h.erb +12 -0
  771. metadata +309 -30
  772. data/config/action_view_helpers/actionview/form_helper/button.yml +0 -38
  773. data/config/action_view_helpers/actionview/form_helper/submit.yml +0 -35
  774. data/lib/herb/ast.rb +0 -7
  775. data/lib/herb/diff_operation.rb +0 -34
  776. data/lib/herb/diff_result.rb +0 -59
  777. data/lib/herb/engine/error_formatter.rb +0 -432
  778. data/lib/herb/engine/parser_error_overlay.rb +0 -771
  779. data/lib/herb/engine/validation_error_overlay.rb +0 -182
  780. data/lib/herb/engine/validation_errors.rb +0 -65
  781. data/lib/herb/engine/validator.rb +0 -80
  782. data/sig/herb/ast.rbs +0 -6
  783. data/sig/herb/diff_operation.rbs +0 -34
  784. data/sig/herb/diff_result.rbs +0 -34
  785. data/sig/herb/engine/debug.rbs +0 -38
  786. data/sig/herb/engine/error_formatter.rbs +0 -47
  787. data/sig/herb/engine/parser_error_overlay.rbs +0 -41
  788. data/sig/herb/engine/validation_error_overlay.rbs +0 -35
  789. data/sig/herb/engine/validation_errors.rbs +0 -45
  790. data/sig/herb/engine/validator.rbs +0 -41
  791. data/sig/herb_c_extension.rbs +0 -10
  792. data/sig/vendor/did_you_mean.rbs +0 -6
  793. data/sig/vendor/parallel.rbs +0 -4
data/exe/herb CHANGED
@@ -2,4 +2,6 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  require_relative "../lib/herb"
5
+ require_relative "../lib/herb/cli"
6
+
5
7
  Herb::CLI.new(ARGV).call
@@ -1,5 +1,5 @@
1
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/ext/herb/error_helpers.c.erb
2
+ // be modified manually. See templates/ext/herb/error_helpers.c.erb
3
3
 
4
4
  #include <ruby.h>
5
5
 
@@ -28,15 +28,25 @@ static VALUE cERBControlFlowScopeError;
28
28
  static VALUE cMissingERBEndTagError;
29
29
  static VALUE cERBMultipleBlocksInTagError;
30
30
  static VALUE cERBCaseWithConditionsError;
31
+ static VALUE cERBCaseInlinePatternMatchError;
31
32
  static VALUE cConditionalElementMultipleTagsError;
32
33
  static VALUE cConditionalElementConditionMismatchError;
34
+ static VALUE cUnclosedCommentError;
35
+ static VALUE cNestedCommentError;
33
36
  static VALUE cInvalidCommentClosingTagError;
34
37
  static VALUE cOmittedClosingTagError;
35
38
  static VALUE cUnclosedOpenTagError;
36
39
  static VALUE cUnclosedCloseTagError;
40
+ static VALUE cEndTagWithTrailingSolidusError;
37
41
  static VALUE cUnclosedQuoteError;
38
42
  static VALUE cMissingAttributeValueError;
43
+ static VALUE cMissingWhitespaceBetweenAttributesError;
44
+ static VALUE cUnexpectedCharacterInAttributeNameError;
45
+ static VALUE cUnexpectedCharacterInUnquotedAttributeValueError;
46
+ static VALUE cUnexpectedEqualsSignBeforeAttributeNameError;
47
+ static VALUE cUnexpectedSolidusInTagError;
39
48
  static VALUE cUnclosedERBTagError;
49
+ static VALUE cMalformedERBClosingTagError;
40
50
  static VALUE cStrayERBClosingTagError;
41
51
  static VALUE cNestedERBTagError;
42
52
  static VALUE cRenderAmbiguousLocalsError;
@@ -51,8 +61,13 @@ static VALUE cStrictLocalsBlockArgumentError;
51
61
  static VALUE cStrictLocalsSplatArgumentError;
52
62
  static VALUE cStrictLocalsMissingParenthesisError;
53
63
  static VALUE cStrictLocalsDuplicateDeclarationError;
64
+ static VALUE cHerbStateMissingParenthesisError;
65
+ static VALUE cHerbStateNonCanonicalDirectiveError;
66
+ static VALUE cHerbStateInvalidParameterError;
67
+ static VALUE cHerbStateDuplicateDeclarationError;
54
68
  static VALUE cVoidElementContentError;
55
69
  static VALUE cDotNotationCasingError;
70
+ static VALUE cTimeoutError;
56
71
 
57
72
  void rb_init_error_classes(void) {
58
73
  mErrors = rb_define_module_under(mHerb, "Errors");
@@ -69,15 +84,25 @@ void rb_init_error_classes(void) {
69
84
  cMissingERBEndTagError = rb_define_class_under(mErrors, "MissingERBEndTagError", cError);
70
85
  cERBMultipleBlocksInTagError = rb_define_class_under(mErrors, "ERBMultipleBlocksInTagError", cError);
71
86
  cERBCaseWithConditionsError = rb_define_class_under(mErrors, "ERBCaseWithConditionsError", cError);
87
+ cERBCaseInlinePatternMatchError = rb_define_class_under(mErrors, "ERBCaseInlinePatternMatchError", cError);
72
88
  cConditionalElementMultipleTagsError = rb_define_class_under(mErrors, "ConditionalElementMultipleTagsError", cError);
73
89
  cConditionalElementConditionMismatchError = rb_define_class_under(mErrors, "ConditionalElementConditionMismatchError", cError);
90
+ cUnclosedCommentError = rb_define_class_under(mErrors, "UnclosedCommentError", cError);
91
+ cNestedCommentError = rb_define_class_under(mErrors, "NestedCommentError", cError);
74
92
  cInvalidCommentClosingTagError = rb_define_class_under(mErrors, "InvalidCommentClosingTagError", cError);
75
93
  cOmittedClosingTagError = rb_define_class_under(mErrors, "OmittedClosingTagError", cError);
76
94
  cUnclosedOpenTagError = rb_define_class_under(mErrors, "UnclosedOpenTagError", cError);
77
95
  cUnclosedCloseTagError = rb_define_class_under(mErrors, "UnclosedCloseTagError", cError);
96
+ cEndTagWithTrailingSolidusError = rb_define_class_under(mErrors, "EndTagWithTrailingSolidusError", cError);
78
97
  cUnclosedQuoteError = rb_define_class_under(mErrors, "UnclosedQuoteError", cError);
79
98
  cMissingAttributeValueError = rb_define_class_under(mErrors, "MissingAttributeValueError", cError);
99
+ cMissingWhitespaceBetweenAttributesError = rb_define_class_under(mErrors, "MissingWhitespaceBetweenAttributesError", cError);
100
+ cUnexpectedCharacterInAttributeNameError = rb_define_class_under(mErrors, "UnexpectedCharacterInAttributeNameError", cError);
101
+ cUnexpectedCharacterInUnquotedAttributeValueError = rb_define_class_under(mErrors, "UnexpectedCharacterInUnquotedAttributeValueError", cError);
102
+ cUnexpectedEqualsSignBeforeAttributeNameError = rb_define_class_under(mErrors, "UnexpectedEqualsSignBeforeAttributeNameError", cError);
103
+ cUnexpectedSolidusInTagError = rb_define_class_under(mErrors, "UnexpectedSolidusInTagError", cError);
80
104
  cUnclosedERBTagError = rb_define_class_under(mErrors, "UnclosedERBTagError", cError);
105
+ cMalformedERBClosingTagError = rb_define_class_under(mErrors, "MalformedERBClosingTagError", cError);
81
106
  cStrayERBClosingTagError = rb_define_class_under(mErrors, "StrayERBClosingTagError", cError);
82
107
  cNestedERBTagError = rb_define_class_under(mErrors, "NestedERBTagError", cError);
83
108
  cRenderAmbiguousLocalsError = rb_define_class_under(mErrors, "RenderAmbiguousLocalsError", cError);
@@ -92,8 +117,13 @@ void rb_init_error_classes(void) {
92
117
  cStrictLocalsSplatArgumentError = rb_define_class_under(mErrors, "StrictLocalsSplatArgumentError", cError);
93
118
  cStrictLocalsMissingParenthesisError = rb_define_class_under(mErrors, "StrictLocalsMissingParenthesisError", cError);
94
119
  cStrictLocalsDuplicateDeclarationError = rb_define_class_under(mErrors, "StrictLocalsDuplicateDeclarationError", cError);
120
+ cHerbStateMissingParenthesisError = rb_define_class_under(mErrors, "HerbStateMissingParenthesisError", cError);
121
+ cHerbStateNonCanonicalDirectiveError = rb_define_class_under(mErrors, "HerbStateNonCanonicalDirectiveError", cError);
122
+ cHerbStateInvalidParameterError = rb_define_class_under(mErrors, "HerbStateInvalidParameterError", cError);
123
+ cHerbStateDuplicateDeclarationError = rb_define_class_under(mErrors, "HerbStateDuplicateDeclarationError", cError);
95
124
  cVoidElementContentError = rb_define_class_under(mErrors, "VoidElementContentError", cError);
96
125
  cDotNotationCasingError = rb_define_class_under(mErrors, "DotNotationCasingError", cError);
126
+ cTimeoutError = rb_define_class_under(mErrors, "TimeoutError", cError);
97
127
  }
98
128
 
99
129
  static VALUE rb_unexpected_error_from_c_struct(UNEXPECTED_ERROR_T* unexpected_error) {
@@ -132,7 +162,7 @@ static VALUE rb_unexpected_token_error_from_c_struct(UNEXPECTED_TOKEN_ERROR_T* u
132
162
 
133
163
  hb_string_T _expected_type_string = token_type_to_string(unexpected_token_error->expected_type);
134
164
  VALUE unexpected_token_error_expected_type = rb_utf8_str_new(_expected_type_string.data, _expected_type_string.length);
135
- VALUE unexpected_token_error_found = rb_token_from_c_struct(unexpected_token_error->found);
165
+ VALUE unexpected_token_error_found = rb_token_from_c_struct(unexpected_token_error->found, &HERB_DEFAULT_PARSER_OPTIONS);
136
166
 
137
167
  VALUE args[5] = {
138
168
  type,
@@ -154,7 +184,7 @@ static VALUE rb_missing_opening_tag_error_from_c_struct(MISSING_OPENING_TAG_ERRO
154
184
  VALUE location = rb_location_from_c_struct(error->location);
155
185
  VALUE message = rb_string_from_hb_string(error->message);
156
186
 
157
- VALUE missing_opening_tag_error_closing_tag = rb_token_from_c_struct(missing_opening_tag_error->closing_tag);
187
+ VALUE missing_opening_tag_error_closing_tag = rb_token_from_c_struct(missing_opening_tag_error->closing_tag, &HERB_DEFAULT_PARSER_OPTIONS);
158
188
 
159
189
  VALUE args[4] = {
160
190
  type,
@@ -175,7 +205,7 @@ static VALUE rb_missing_closing_tag_error_from_c_struct(MISSING_CLOSING_TAG_ERRO
175
205
  VALUE location = rb_location_from_c_struct(error->location);
176
206
  VALUE message = rb_string_from_hb_string(error->message);
177
207
 
178
- VALUE missing_closing_tag_error_opening_tag = rb_token_from_c_struct(missing_closing_tag_error->opening_tag);
208
+ VALUE missing_closing_tag_error_opening_tag = rb_token_from_c_struct(missing_closing_tag_error->opening_tag, &HERB_DEFAULT_PARSER_OPTIONS);
179
209
 
180
210
  VALUE args[4] = {
181
211
  type,
@@ -196,8 +226,8 @@ static VALUE rb_tag_names_mismatch_error_from_c_struct(TAG_NAMES_MISMATCH_ERROR_
196
226
  VALUE location = rb_location_from_c_struct(error->location);
197
227
  VALUE message = rb_string_from_hb_string(error->message);
198
228
 
199
- VALUE tag_names_mismatch_error_opening_tag = rb_token_from_c_struct(tag_names_mismatch_error->opening_tag);
200
- VALUE tag_names_mismatch_error_closing_tag = rb_token_from_c_struct(tag_names_mismatch_error->closing_tag);
229
+ VALUE tag_names_mismatch_error_opening_tag = rb_token_from_c_struct(tag_names_mismatch_error->opening_tag, &HERB_DEFAULT_PARSER_OPTIONS);
230
+ VALUE tag_names_mismatch_error_closing_tag = rb_token_from_c_struct(tag_names_mismatch_error->closing_tag, &HERB_DEFAULT_PARSER_OPTIONS);
201
231
 
202
232
  VALUE args[5] = {
203
233
  type,
@@ -219,7 +249,7 @@ static VALUE rb_void_element_closing_tag_error_from_c_struct(VOID_ELEMENT_CLOSIN
219
249
  VALUE location = rb_location_from_c_struct(error->location);
220
250
  VALUE message = rb_string_from_hb_string(error->message);
221
251
 
222
- VALUE void_element_closing_tag_error_tag_name = rb_token_from_c_struct(void_element_closing_tag_error->tag_name);
252
+ VALUE void_element_closing_tag_error_tag_name = rb_token_from_c_struct(void_element_closing_tag_error->tag_name, &HERB_DEFAULT_PARSER_OPTIONS);
223
253
  VALUE void_element_closing_tag_error_expected = rb_utf8_str_new(void_element_closing_tag_error->expected.data, void_element_closing_tag_error->expected.length);
224
254
  VALUE void_element_closing_tag_error_found = rb_utf8_str_new(void_element_closing_tag_error->found.data, void_element_closing_tag_error->found.length);
225
255
 
@@ -244,7 +274,7 @@ static VALUE rb_unclosed_element_error_from_c_struct(UNCLOSED_ELEMENT_ERROR_T* u
244
274
  VALUE location = rb_location_from_c_struct(error->location);
245
275
  VALUE message = rb_string_from_hb_string(error->message);
246
276
 
247
- VALUE unclosed_element_error_opening_tag = rb_token_from_c_struct(unclosed_element_error->opening_tag);
277
+ VALUE unclosed_element_error_opening_tag = rb_token_from_c_struct(unclosed_element_error->opening_tag, &HERB_DEFAULT_PARSER_OPTIONS);
248
278
 
249
279
  VALUE args[4] = {
250
280
  type,
@@ -361,6 +391,25 @@ static VALUE rb_erb_case_with_conditions_error_from_c_struct(ERB_CASE_WITH_CONDI
361
391
  return rb_class_new_instance(3, args, cERBCaseWithConditionsError);
362
392
  };
363
393
 
394
+ static VALUE rb_erb_case_inline_pattern_match_error_from_c_struct(ERB_CASE_INLINE_PATTERN_MATCH_ERROR_T* erb_case_inline_pattern_match_error) {
395
+ if (erb_case_inline_pattern_match_error == NULL) { return Qnil; }
396
+
397
+ ERROR_T* error = &erb_case_inline_pattern_match_error->base;
398
+
399
+ VALUE type = rb_string_from_hb_string(error_type_to_string(error));
400
+ VALUE location = rb_location_from_c_struct(error->location);
401
+ VALUE message = rb_string_from_hb_string(error->message);
402
+
403
+
404
+ VALUE args[3] = {
405
+ type,
406
+ location,
407
+ message
408
+ };
409
+
410
+ return rb_class_new_instance(3, args, cERBCaseInlinePatternMatchError);
411
+ };
412
+
364
413
  static VALUE rb_conditional_element_multiple_tags_error_from_c_struct(CONDITIONAL_ELEMENT_MULTIPLE_TAGS_ERROR_T* conditional_element_multiple_tags_error) {
365
414
  if (conditional_element_multiple_tags_error == NULL) { return Qnil; }
366
415
 
@@ -417,6 +466,50 @@ static VALUE rb_conditional_element_condition_mismatch_error_from_c_struct(CONDI
417
466
  return rb_class_new_instance(10, args, cConditionalElementConditionMismatchError);
418
467
  };
419
468
 
469
+ static VALUE rb_unclosed_comment_error_from_c_struct(UNCLOSED_COMMENT_ERROR_T* unclosed_comment_error) {
470
+ if (unclosed_comment_error == NULL) { return Qnil; }
471
+
472
+ ERROR_T* error = &unclosed_comment_error->base;
473
+
474
+ VALUE type = rb_string_from_hb_string(error_type_to_string(error));
475
+ VALUE location = rb_location_from_c_struct(error->location);
476
+ VALUE message = rb_string_from_hb_string(error->message);
477
+
478
+ VALUE unclosed_comment_error_comment_start = rb_token_from_c_struct(unclosed_comment_error->comment_start, &HERB_DEFAULT_PARSER_OPTIONS);
479
+
480
+ VALUE args[4] = {
481
+ type,
482
+ location,
483
+ message,
484
+ unclosed_comment_error_comment_start
485
+ };
486
+
487
+ return rb_class_new_instance(4, args, cUnclosedCommentError);
488
+ };
489
+
490
+ static VALUE rb_nested_comment_error_from_c_struct(NESTED_COMMENT_ERROR_T* nested_comment_error) {
491
+ if (nested_comment_error == NULL) { return Qnil; }
492
+
493
+ ERROR_T* error = &nested_comment_error->base;
494
+
495
+ VALUE type = rb_string_from_hb_string(error_type_to_string(error));
496
+ VALUE location = rb_location_from_c_struct(error->location);
497
+ VALUE message = rb_string_from_hb_string(error->message);
498
+
499
+ VALUE nested_comment_error_comment_start = rb_token_from_c_struct(nested_comment_error->comment_start, &HERB_DEFAULT_PARSER_OPTIONS);
500
+ VALUE nested_comment_error_nested_start = rb_token_from_c_struct(nested_comment_error->nested_start, &HERB_DEFAULT_PARSER_OPTIONS);
501
+
502
+ VALUE args[5] = {
503
+ type,
504
+ location,
505
+ message,
506
+ nested_comment_error_comment_start,
507
+ nested_comment_error_nested_start
508
+ };
509
+
510
+ return rb_class_new_instance(5, args, cNestedCommentError);
511
+ };
512
+
420
513
  static VALUE rb_invalid_comment_closing_tag_error_from_c_struct(INVALID_COMMENT_CLOSING_TAG_ERROR_T* invalid_comment_closing_tag_error) {
421
514
  if (invalid_comment_closing_tag_error == NULL) { return Qnil; }
422
515
 
@@ -426,7 +519,7 @@ static VALUE rb_invalid_comment_closing_tag_error_from_c_struct(INVALID_COMMENT_
426
519
  VALUE location = rb_location_from_c_struct(error->location);
427
520
  VALUE message = rb_string_from_hb_string(error->message);
428
521
 
429
- VALUE invalid_comment_closing_tag_error_closing_tag = rb_token_from_c_struct(invalid_comment_closing_tag_error->closing_tag);
522
+ VALUE invalid_comment_closing_tag_error_closing_tag = rb_token_from_c_struct(invalid_comment_closing_tag_error->closing_tag, &HERB_DEFAULT_PARSER_OPTIONS);
430
523
 
431
524
  VALUE args[4] = {
432
525
  type,
@@ -447,7 +540,7 @@ static VALUE rb_omitted_closing_tag_error_from_c_struct(OMITTED_CLOSING_TAG_ERRO
447
540
  VALUE location = rb_location_from_c_struct(error->location);
448
541
  VALUE message = rb_string_from_hb_string(error->message);
449
542
 
450
- VALUE omitted_closing_tag_error_opening_tag = rb_token_from_c_struct(omitted_closing_tag_error->opening_tag);
543
+ VALUE omitted_closing_tag_error_opening_tag = rb_token_from_c_struct(omitted_closing_tag_error->opening_tag, &HERB_DEFAULT_PARSER_OPTIONS);
451
544
  VALUE omitted_closing_tag_error_insertion_point = rb_position_from_c_struct(omitted_closing_tag_error->insertion_point);
452
545
 
453
546
  VALUE args[5] = {
@@ -470,7 +563,7 @@ static VALUE rb_unclosed_open_tag_error_from_c_struct(UNCLOSED_OPEN_TAG_ERROR_T*
470
563
  VALUE location = rb_location_from_c_struct(error->location);
471
564
  VALUE message = rb_string_from_hb_string(error->message);
472
565
 
473
- VALUE unclosed_open_tag_error_tag_name = rb_token_from_c_struct(unclosed_open_tag_error->tag_name);
566
+ VALUE unclosed_open_tag_error_tag_name = rb_token_from_c_struct(unclosed_open_tag_error->tag_name, &HERB_DEFAULT_PARSER_OPTIONS);
474
567
 
475
568
  VALUE args[4] = {
476
569
  type,
@@ -491,7 +584,7 @@ static VALUE rb_unclosed_close_tag_error_from_c_struct(UNCLOSED_CLOSE_TAG_ERROR_
491
584
  VALUE location = rb_location_from_c_struct(error->location);
492
585
  VALUE message = rb_string_from_hb_string(error->message);
493
586
 
494
- VALUE unclosed_close_tag_error_tag_name = rb_token_from_c_struct(unclosed_close_tag_error->tag_name);
587
+ VALUE unclosed_close_tag_error_tag_name = rb_token_from_c_struct(unclosed_close_tag_error->tag_name, &HERB_DEFAULT_PARSER_OPTIONS);
495
588
 
496
589
  VALUE args[4] = {
497
590
  type,
@@ -503,6 +596,27 @@ static VALUE rb_unclosed_close_tag_error_from_c_struct(UNCLOSED_CLOSE_TAG_ERROR_
503
596
  return rb_class_new_instance(4, args, cUnclosedCloseTagError);
504
597
  };
505
598
 
599
+ static VALUE rb_end_tag_with_trailing_solidus_error_from_c_struct(END_TAG_WITH_TRAILING_SOLIDUS_ERROR_T* end_tag_with_trailing_solidus_error) {
600
+ if (end_tag_with_trailing_solidus_error == NULL) { return Qnil; }
601
+
602
+ ERROR_T* error = &end_tag_with_trailing_solidus_error->base;
603
+
604
+ VALUE type = rb_string_from_hb_string(error_type_to_string(error));
605
+ VALUE location = rb_location_from_c_struct(error->location);
606
+ VALUE message = rb_string_from_hb_string(error->message);
607
+
608
+ VALUE end_tag_with_trailing_solidus_error_tag_name = rb_token_from_c_struct(end_tag_with_trailing_solidus_error->tag_name, &HERB_DEFAULT_PARSER_OPTIONS);
609
+
610
+ VALUE args[4] = {
611
+ type,
612
+ location,
613
+ message,
614
+ end_tag_with_trailing_solidus_error_tag_name
615
+ };
616
+
617
+ return rb_class_new_instance(4, args, cEndTagWithTrailingSolidusError);
618
+ };
619
+
506
620
  static VALUE rb_unclosed_quote_error_from_c_struct(UNCLOSED_QUOTE_ERROR_T* unclosed_quote_error) {
507
621
  if (unclosed_quote_error == NULL) { return Qnil; }
508
622
 
@@ -512,7 +626,7 @@ static VALUE rb_unclosed_quote_error_from_c_struct(UNCLOSED_QUOTE_ERROR_T* unclo
512
626
  VALUE location = rb_location_from_c_struct(error->location);
513
627
  VALUE message = rb_string_from_hb_string(error->message);
514
628
 
515
- VALUE unclosed_quote_error_opening_quote = rb_token_from_c_struct(unclosed_quote_error->opening_quote);
629
+ VALUE unclosed_quote_error_opening_quote = rb_token_from_c_struct(unclosed_quote_error->opening_quote, &HERB_DEFAULT_PARSER_OPTIONS);
516
630
 
517
631
  VALUE args[4] = {
518
632
  type,
@@ -545,6 +659,111 @@ static VALUE rb_missing_attribute_value_error_from_c_struct(MISSING_ATTRIBUTE_VA
545
659
  return rb_class_new_instance(4, args, cMissingAttributeValueError);
546
660
  };
547
661
 
662
+ static VALUE rb_missing_whitespace_between_attributes_error_from_c_struct(MISSING_WHITESPACE_BETWEEN_ATTRIBUTES_ERROR_T* missing_whitespace_between_attributes_error) {
663
+ if (missing_whitespace_between_attributes_error == NULL) { return Qnil; }
664
+
665
+ ERROR_T* error = &missing_whitespace_between_attributes_error->base;
666
+
667
+ VALUE type = rb_string_from_hb_string(error_type_to_string(error));
668
+ VALUE location = rb_location_from_c_struct(error->location);
669
+ VALUE message = rb_string_from_hb_string(error->message);
670
+
671
+ VALUE missing_whitespace_between_attributes_error_found = rb_token_from_c_struct(missing_whitespace_between_attributes_error->found, &HERB_DEFAULT_PARSER_OPTIONS);
672
+
673
+ VALUE args[4] = {
674
+ type,
675
+ location,
676
+ message,
677
+ missing_whitespace_between_attributes_error_found
678
+ };
679
+
680
+ return rb_class_new_instance(4, args, cMissingWhitespaceBetweenAttributesError);
681
+ };
682
+
683
+ static VALUE rb_unexpected_character_in_attribute_name_error_from_c_struct(UNEXPECTED_CHARACTER_IN_ATTRIBUTE_NAME_ERROR_T* unexpected_character_in_attribute_name_error) {
684
+ if (unexpected_character_in_attribute_name_error == NULL) { return Qnil; }
685
+
686
+ ERROR_T* error = &unexpected_character_in_attribute_name_error->base;
687
+
688
+ VALUE type = rb_string_from_hb_string(error_type_to_string(error));
689
+ VALUE location = rb_location_from_c_struct(error->location);
690
+ VALUE message = rb_string_from_hb_string(error->message);
691
+
692
+ VALUE unexpected_character_in_attribute_name_error_character = rb_token_from_c_struct(unexpected_character_in_attribute_name_error->character, &HERB_DEFAULT_PARSER_OPTIONS);
693
+
694
+ VALUE args[4] = {
695
+ type,
696
+ location,
697
+ message,
698
+ unexpected_character_in_attribute_name_error_character
699
+ };
700
+
701
+ return rb_class_new_instance(4, args, cUnexpectedCharacterInAttributeNameError);
702
+ };
703
+
704
+ static VALUE rb_unexpected_character_in_unquoted_attribute_value_error_from_c_struct(UNEXPECTED_CHARACTER_IN_UNQUOTED_ATTRIBUTE_VALUE_ERROR_T* unexpected_character_in_unquoted_attribute_value_error) {
705
+ if (unexpected_character_in_unquoted_attribute_value_error == NULL) { return Qnil; }
706
+
707
+ ERROR_T* error = &unexpected_character_in_unquoted_attribute_value_error->base;
708
+
709
+ VALUE type = rb_string_from_hb_string(error_type_to_string(error));
710
+ VALUE location = rb_location_from_c_struct(error->location);
711
+ VALUE message = rb_string_from_hb_string(error->message);
712
+
713
+ VALUE unexpected_character_in_unquoted_attribute_value_error_character = rb_token_from_c_struct(unexpected_character_in_unquoted_attribute_value_error->character, &HERB_DEFAULT_PARSER_OPTIONS);
714
+
715
+ VALUE args[4] = {
716
+ type,
717
+ location,
718
+ message,
719
+ unexpected_character_in_unquoted_attribute_value_error_character
720
+ };
721
+
722
+ return rb_class_new_instance(4, args, cUnexpectedCharacterInUnquotedAttributeValueError);
723
+ };
724
+
725
+ static VALUE rb_unexpected_equals_sign_before_attribute_name_error_from_c_struct(UNEXPECTED_EQUALS_SIGN_BEFORE_ATTRIBUTE_NAME_ERROR_T* unexpected_equals_sign_before_attribute_name_error) {
726
+ if (unexpected_equals_sign_before_attribute_name_error == NULL) { return Qnil; }
727
+
728
+ ERROR_T* error = &unexpected_equals_sign_before_attribute_name_error->base;
729
+
730
+ VALUE type = rb_string_from_hb_string(error_type_to_string(error));
731
+ VALUE location = rb_location_from_c_struct(error->location);
732
+ VALUE message = rb_string_from_hb_string(error->message);
733
+
734
+ VALUE unexpected_equals_sign_before_attribute_name_error_equals = rb_token_from_c_struct(unexpected_equals_sign_before_attribute_name_error->equals, &HERB_DEFAULT_PARSER_OPTIONS);
735
+
736
+ VALUE args[4] = {
737
+ type,
738
+ location,
739
+ message,
740
+ unexpected_equals_sign_before_attribute_name_error_equals
741
+ };
742
+
743
+ return rb_class_new_instance(4, args, cUnexpectedEqualsSignBeforeAttributeNameError);
744
+ };
745
+
746
+ static VALUE rb_unexpected_solidus_in_tag_error_from_c_struct(UNEXPECTED_SOLIDUS_IN_TAG_ERROR_T* unexpected_solidus_in_tag_error) {
747
+ if (unexpected_solidus_in_tag_error == NULL) { return Qnil; }
748
+
749
+ ERROR_T* error = &unexpected_solidus_in_tag_error->base;
750
+
751
+ VALUE type = rb_string_from_hb_string(error_type_to_string(error));
752
+ VALUE location = rb_location_from_c_struct(error->location);
753
+ VALUE message = rb_string_from_hb_string(error->message);
754
+
755
+ VALUE unexpected_solidus_in_tag_error_solidus = rb_token_from_c_struct(unexpected_solidus_in_tag_error->solidus, &HERB_DEFAULT_PARSER_OPTIONS);
756
+
757
+ VALUE args[4] = {
758
+ type,
759
+ location,
760
+ message,
761
+ unexpected_solidus_in_tag_error_solidus
762
+ };
763
+
764
+ return rb_class_new_instance(4, args, cUnexpectedSolidusInTagError);
765
+ };
766
+
548
767
  static VALUE rb_unclosed_erb_tag_error_from_c_struct(UNCLOSED_ERB_TAG_ERROR_T* unclosed_erb_tag_error) {
549
768
  if (unclosed_erb_tag_error == NULL) { return Qnil; }
550
769
 
@@ -554,7 +773,7 @@ static VALUE rb_unclosed_erb_tag_error_from_c_struct(UNCLOSED_ERB_TAG_ERROR_T* u
554
773
  VALUE location = rb_location_from_c_struct(error->location);
555
774
  VALUE message = rb_string_from_hb_string(error->message);
556
775
 
557
- VALUE unclosed_erb_tag_error_opening_tag = rb_token_from_c_struct(unclosed_erb_tag_error->opening_tag);
776
+ VALUE unclosed_erb_tag_error_opening_tag = rb_token_from_c_struct(unclosed_erb_tag_error->opening_tag, &HERB_DEFAULT_PARSER_OPTIONS);
558
777
 
559
778
  VALUE args[4] = {
560
779
  type,
@@ -566,6 +785,29 @@ static VALUE rb_unclosed_erb_tag_error_from_c_struct(UNCLOSED_ERB_TAG_ERROR_T* u
566
785
  return rb_class_new_instance(4, args, cUnclosedERBTagError);
567
786
  };
568
787
 
788
+ static VALUE rb_malformed_erb_closing_tag_error_from_c_struct(MALFORMED_ERB_CLOSING_TAG_ERROR_T* malformed_erb_closing_tag_error) {
789
+ if (malformed_erb_closing_tag_error == NULL) { return Qnil; }
790
+
791
+ ERROR_T* error = &malformed_erb_closing_tag_error->base;
792
+
793
+ VALUE type = rb_string_from_hb_string(error_type_to_string(error));
794
+ VALUE location = rb_location_from_c_struct(error->location);
795
+ VALUE message = rb_string_from_hb_string(error->message);
796
+
797
+ VALUE malformed_erb_closing_tag_error_opening_tag = rb_token_from_c_struct(malformed_erb_closing_tag_error->opening_tag, &HERB_DEFAULT_PARSER_OPTIONS);
798
+ VALUE malformed_erb_closing_tag_error_closing_tag = rb_token_from_c_struct(malformed_erb_closing_tag_error->closing_tag, &HERB_DEFAULT_PARSER_OPTIONS);
799
+
800
+ VALUE args[5] = {
801
+ type,
802
+ location,
803
+ message,
804
+ malformed_erb_closing_tag_error_opening_tag,
805
+ malformed_erb_closing_tag_error_closing_tag
806
+ };
807
+
808
+ return rb_class_new_instance(5, args, cMalformedERBClosingTagError);
809
+ };
810
+
569
811
  static VALUE rb_stray_erb_closing_tag_error_from_c_struct(STRAY_ERB_CLOSING_TAG_ERROR_T* stray_erb_closing_tag_error) {
570
812
  if (stray_erb_closing_tag_error == NULL) { return Qnil; }
571
813
 
@@ -594,7 +836,7 @@ static VALUE rb_nested_erb_tag_error_from_c_struct(NESTED_ERB_TAG_ERROR_T* neste
594
836
  VALUE location = rb_location_from_c_struct(error->location);
595
837
  VALUE message = rb_string_from_hb_string(error->message);
596
838
 
597
- VALUE nested_erb_tag_error_opening_tag = rb_token_from_c_struct(nested_erb_tag_error->opening_tag);
839
+ VALUE nested_erb_tag_error_opening_tag = rb_token_from_c_struct(nested_erb_tag_error->opening_tag, &HERB_DEFAULT_PARSER_OPTIONS);
598
840
  VALUE nested_erb_tag_error_nested_tag_line = ULONG2NUM(nested_erb_tag_error->nested_tag_line);
599
841
  VALUE nested_erb_tag_error_nested_tag_column = ULONG2NUM(nested_erb_tag_error->nested_tag_column);
600
842
 
@@ -860,6 +1102,90 @@ static VALUE rb_strict_locals_duplicate_declaration_error_from_c_struct(STRICT_L
860
1102
  return rb_class_new_instance(3, args, cStrictLocalsDuplicateDeclarationError);
861
1103
  };
862
1104
 
1105
+ static VALUE rb_herb_state_missing_parenthesis_error_from_c_struct(HERB_STATE_MISSING_PARENTHESIS_ERROR_T* herb_state_missing_parenthesis_error) {
1106
+ if (herb_state_missing_parenthesis_error == NULL) { return Qnil; }
1107
+
1108
+ ERROR_T* error = &herb_state_missing_parenthesis_error->base;
1109
+
1110
+ VALUE type = rb_string_from_hb_string(error_type_to_string(error));
1111
+ VALUE location = rb_location_from_c_struct(error->location);
1112
+ VALUE message = rb_string_from_hb_string(error->message);
1113
+
1114
+ VALUE herb_state_missing_parenthesis_error_rest = rb_utf8_str_new(herb_state_missing_parenthesis_error->rest.data, herb_state_missing_parenthesis_error->rest.length);
1115
+
1116
+ VALUE args[4] = {
1117
+ type,
1118
+ location,
1119
+ message,
1120
+ herb_state_missing_parenthesis_error_rest
1121
+ };
1122
+
1123
+ return rb_class_new_instance(4, args, cHerbStateMissingParenthesisError);
1124
+ };
1125
+
1126
+ static VALUE rb_herb_state_non_canonical_directive_error_from_c_struct(HERB_STATE_NON_CANONICAL_DIRECTIVE_ERROR_T* herb_state_non_canonical_directive_error) {
1127
+ if (herb_state_non_canonical_directive_error == NULL) { return Qnil; }
1128
+
1129
+ ERROR_T* error = &herb_state_non_canonical_directive_error->base;
1130
+
1131
+ VALUE type = rb_string_from_hb_string(error_type_to_string(error));
1132
+ VALUE location = rb_location_from_c_struct(error->location);
1133
+ VALUE message = rb_string_from_hb_string(error->message);
1134
+
1135
+ VALUE herb_state_non_canonical_directive_error_found = rb_utf8_str_new(herb_state_non_canonical_directive_error->found.data, herb_state_non_canonical_directive_error->found.length);
1136
+ VALUE herb_state_non_canonical_directive_error_expected = rb_utf8_str_new(herb_state_non_canonical_directive_error->expected.data, herb_state_non_canonical_directive_error->expected.length);
1137
+
1138
+ VALUE args[5] = {
1139
+ type,
1140
+ location,
1141
+ message,
1142
+ herb_state_non_canonical_directive_error_found,
1143
+ herb_state_non_canonical_directive_error_expected
1144
+ };
1145
+
1146
+ return rb_class_new_instance(5, args, cHerbStateNonCanonicalDirectiveError);
1147
+ };
1148
+
1149
+ static VALUE rb_herb_state_invalid_parameter_error_from_c_struct(HERB_STATE_INVALID_PARAMETER_ERROR_T* herb_state_invalid_parameter_error) {
1150
+ if (herb_state_invalid_parameter_error == NULL) { return Qnil; }
1151
+
1152
+ ERROR_T* error = &herb_state_invalid_parameter_error->base;
1153
+
1154
+ VALUE type = rb_string_from_hb_string(error_type_to_string(error));
1155
+ VALUE location = rb_location_from_c_struct(error->location);
1156
+ VALUE message = rb_string_from_hb_string(error->message);
1157
+
1158
+ VALUE herb_state_invalid_parameter_error_parameter = rb_utf8_str_new(herb_state_invalid_parameter_error->parameter.data, herb_state_invalid_parameter_error->parameter.length);
1159
+
1160
+ VALUE args[4] = {
1161
+ type,
1162
+ location,
1163
+ message,
1164
+ herb_state_invalid_parameter_error_parameter
1165
+ };
1166
+
1167
+ return rb_class_new_instance(4, args, cHerbStateInvalidParameterError);
1168
+ };
1169
+
1170
+ static VALUE rb_herb_state_duplicate_declaration_error_from_c_struct(HERB_STATE_DUPLICATE_DECLARATION_ERROR_T* herb_state_duplicate_declaration_error) {
1171
+ if (herb_state_duplicate_declaration_error == NULL) { return Qnil; }
1172
+
1173
+ ERROR_T* error = &herb_state_duplicate_declaration_error->base;
1174
+
1175
+ VALUE type = rb_string_from_hb_string(error_type_to_string(error));
1176
+ VALUE location = rb_location_from_c_struct(error->location);
1177
+ VALUE message = rb_string_from_hb_string(error->message);
1178
+
1179
+
1180
+ VALUE args[3] = {
1181
+ type,
1182
+ location,
1183
+ message
1184
+ };
1185
+
1186
+ return rb_class_new_instance(3, args, cHerbStateDuplicateDeclarationError);
1187
+ };
1188
+
863
1189
  static VALUE rb_void_element_content_error_from_c_struct(VOID_ELEMENT_CONTENT_ERROR_T* void_element_content_error) {
864
1190
  if (void_element_content_error == NULL) { return Qnil; }
865
1191
 
@@ -869,7 +1195,7 @@ static VALUE rb_void_element_content_error_from_c_struct(VOID_ELEMENT_CONTENT_ER
869
1195
  VALUE location = rb_location_from_c_struct(error->location);
870
1196
  VALUE message = rb_string_from_hb_string(error->message);
871
1197
 
872
- VALUE void_element_content_error_tag_name = rb_token_from_c_struct(void_element_content_error->tag_name);
1198
+ VALUE void_element_content_error_tag_name = rb_token_from_c_struct(void_element_content_error->tag_name, &HERB_DEFAULT_PARSER_OPTIONS);
873
1199
  VALUE void_element_content_error_helper_name = rb_utf8_str_new(void_element_content_error->helper_name.data, void_element_content_error->helper_name.length);
874
1200
  VALUE void_element_content_error_content_type = rb_utf8_str_new(void_element_content_error->content_type.data, void_element_content_error->content_type.length);
875
1201
 
@@ -894,7 +1220,7 @@ static VALUE rb_dot_notation_casing_error_from_c_struct(DOT_NOTATION_CASING_ERRO
894
1220
  VALUE location = rb_location_from_c_struct(error->location);
895
1221
  VALUE message = rb_string_from_hb_string(error->message);
896
1222
 
897
- VALUE dot_notation_casing_error_segment = rb_token_from_c_struct(dot_notation_casing_error->segment);
1223
+ VALUE dot_notation_casing_error_segment = rb_token_from_c_struct(dot_notation_casing_error->segment, &HERB_DEFAULT_PARSER_OPTIONS);
898
1224
 
899
1225
  VALUE args[4] = {
900
1226
  type,
@@ -906,6 +1232,27 @@ static VALUE rb_dot_notation_casing_error_from_c_struct(DOT_NOTATION_CASING_ERRO
906
1232
  return rb_class_new_instance(4, args, cDotNotationCasingError);
907
1233
  };
908
1234
 
1235
+ static VALUE rb_timeout_error_from_c_struct(TIMEOUT_ERROR_T* timeout_error) {
1236
+ if (timeout_error == NULL) { return Qnil; }
1237
+
1238
+ ERROR_T* error = &timeout_error->base;
1239
+
1240
+ VALUE type = rb_string_from_hb_string(error_type_to_string(error));
1241
+ VALUE location = rb_location_from_c_struct(error->location);
1242
+ VALUE message = rb_string_from_hb_string(error->message);
1243
+
1244
+ VALUE timeout_error_timeout_ms = ULONG2NUM(timeout_error->timeout_ms);
1245
+
1246
+ VALUE args[4] = {
1247
+ type,
1248
+ location,
1249
+ message,
1250
+ timeout_error_timeout_ms
1251
+ };
1252
+
1253
+ return rb_class_new_instance(4, args, cTimeoutError);
1254
+ };
1255
+
909
1256
 
910
1257
  VALUE rb_error_from_c_struct(ERROR_T* error) {
911
1258
  if (!error) { return Qnil; }
@@ -923,15 +1270,25 @@ VALUE rb_error_from_c_struct(ERROR_T* error) {
923
1270
  case MISSING_ERB_END_TAG_ERROR: return rb_missing_erb_end_tag_error_from_c_struct((MISSING_ERB_END_TAG_ERROR_T*) error); break;
924
1271
  case ERB_MULTIPLE_BLOCKS_IN_TAG_ERROR: return rb_erb_multiple_blocks_in_tag_error_from_c_struct((ERB_MULTIPLE_BLOCKS_IN_TAG_ERROR_T*) error); break;
925
1272
  case ERB_CASE_WITH_CONDITIONS_ERROR: return rb_erb_case_with_conditions_error_from_c_struct((ERB_CASE_WITH_CONDITIONS_ERROR_T*) error); break;
1273
+ case ERB_CASE_INLINE_PATTERN_MATCH_ERROR: return rb_erb_case_inline_pattern_match_error_from_c_struct((ERB_CASE_INLINE_PATTERN_MATCH_ERROR_T*) error); break;
926
1274
  case CONDITIONAL_ELEMENT_MULTIPLE_TAGS_ERROR: return rb_conditional_element_multiple_tags_error_from_c_struct((CONDITIONAL_ELEMENT_MULTIPLE_TAGS_ERROR_T*) error); break;
927
1275
  case CONDITIONAL_ELEMENT_CONDITION_MISMATCH_ERROR: return rb_conditional_element_condition_mismatch_error_from_c_struct((CONDITIONAL_ELEMENT_CONDITION_MISMATCH_ERROR_T*) error); break;
1276
+ case UNCLOSED_COMMENT_ERROR: return rb_unclosed_comment_error_from_c_struct((UNCLOSED_COMMENT_ERROR_T*) error); break;
1277
+ case NESTED_COMMENT_ERROR: return rb_nested_comment_error_from_c_struct((NESTED_COMMENT_ERROR_T*) error); break;
928
1278
  case INVALID_COMMENT_CLOSING_TAG_ERROR: return rb_invalid_comment_closing_tag_error_from_c_struct((INVALID_COMMENT_CLOSING_TAG_ERROR_T*) error); break;
929
1279
  case OMITTED_CLOSING_TAG_ERROR: return rb_omitted_closing_tag_error_from_c_struct((OMITTED_CLOSING_TAG_ERROR_T*) error); break;
930
1280
  case UNCLOSED_OPEN_TAG_ERROR: return rb_unclosed_open_tag_error_from_c_struct((UNCLOSED_OPEN_TAG_ERROR_T*) error); break;
931
1281
  case UNCLOSED_CLOSE_TAG_ERROR: return rb_unclosed_close_tag_error_from_c_struct((UNCLOSED_CLOSE_TAG_ERROR_T*) error); break;
1282
+ case END_TAG_WITH_TRAILING_SOLIDUS_ERROR: return rb_end_tag_with_trailing_solidus_error_from_c_struct((END_TAG_WITH_TRAILING_SOLIDUS_ERROR_T*) error); break;
932
1283
  case UNCLOSED_QUOTE_ERROR: return rb_unclosed_quote_error_from_c_struct((UNCLOSED_QUOTE_ERROR_T*) error); break;
933
1284
  case MISSING_ATTRIBUTE_VALUE_ERROR: return rb_missing_attribute_value_error_from_c_struct((MISSING_ATTRIBUTE_VALUE_ERROR_T*) error); break;
1285
+ case MISSING_WHITESPACE_BETWEEN_ATTRIBUTES_ERROR: return rb_missing_whitespace_between_attributes_error_from_c_struct((MISSING_WHITESPACE_BETWEEN_ATTRIBUTES_ERROR_T*) error); break;
1286
+ case UNEXPECTED_CHARACTER_IN_ATTRIBUTE_NAME_ERROR: return rb_unexpected_character_in_attribute_name_error_from_c_struct((UNEXPECTED_CHARACTER_IN_ATTRIBUTE_NAME_ERROR_T*) error); break;
1287
+ case UNEXPECTED_CHARACTER_IN_UNQUOTED_ATTRIBUTE_VALUE_ERROR: return rb_unexpected_character_in_unquoted_attribute_value_error_from_c_struct((UNEXPECTED_CHARACTER_IN_UNQUOTED_ATTRIBUTE_VALUE_ERROR_T*) error); break;
1288
+ case UNEXPECTED_EQUALS_SIGN_BEFORE_ATTRIBUTE_NAME_ERROR: return rb_unexpected_equals_sign_before_attribute_name_error_from_c_struct((UNEXPECTED_EQUALS_SIGN_BEFORE_ATTRIBUTE_NAME_ERROR_T*) error); break;
1289
+ case UNEXPECTED_SOLIDUS_IN_TAG_ERROR: return rb_unexpected_solidus_in_tag_error_from_c_struct((UNEXPECTED_SOLIDUS_IN_TAG_ERROR_T*) error); break;
934
1290
  case UNCLOSED_ERB_TAG_ERROR: return rb_unclosed_erb_tag_error_from_c_struct((UNCLOSED_ERB_TAG_ERROR_T*) error); break;
1291
+ case MALFORMED_ERB_CLOSING_TAG_ERROR: return rb_malformed_erb_closing_tag_error_from_c_struct((MALFORMED_ERB_CLOSING_TAG_ERROR_T*) error); break;
935
1292
  case STRAY_ERB_CLOSING_TAG_ERROR: return rb_stray_erb_closing_tag_error_from_c_struct((STRAY_ERB_CLOSING_TAG_ERROR_T*) error); break;
936
1293
  case NESTED_ERB_TAG_ERROR: return rb_nested_erb_tag_error_from_c_struct((NESTED_ERB_TAG_ERROR_T*) error); break;
937
1294
  case RENDER_AMBIGUOUS_LOCALS_ERROR: return rb_render_ambiguous_locals_error_from_c_struct((RENDER_AMBIGUOUS_LOCALS_ERROR_T*) error); break;
@@ -946,8 +1303,13 @@ VALUE rb_error_from_c_struct(ERROR_T* error) {
946
1303
  case STRICT_LOCALS_SPLAT_ARGUMENT_ERROR: return rb_strict_locals_splat_argument_error_from_c_struct((STRICT_LOCALS_SPLAT_ARGUMENT_ERROR_T*) error); break;
947
1304
  case STRICT_LOCALS_MISSING_PARENTHESIS_ERROR: return rb_strict_locals_missing_parenthesis_error_from_c_struct((STRICT_LOCALS_MISSING_PARENTHESIS_ERROR_T*) error); break;
948
1305
  case STRICT_LOCALS_DUPLICATE_DECLARATION_ERROR: return rb_strict_locals_duplicate_declaration_error_from_c_struct((STRICT_LOCALS_DUPLICATE_DECLARATION_ERROR_T*) error); break;
1306
+ case HERB_STATE_MISSING_PARENTHESIS_ERROR: return rb_herb_state_missing_parenthesis_error_from_c_struct((HERB_STATE_MISSING_PARENTHESIS_ERROR_T*) error); break;
1307
+ case HERB_STATE_NON_CANONICAL_DIRECTIVE_ERROR: return rb_herb_state_non_canonical_directive_error_from_c_struct((HERB_STATE_NON_CANONICAL_DIRECTIVE_ERROR_T*) error); break;
1308
+ case HERB_STATE_INVALID_PARAMETER_ERROR: return rb_herb_state_invalid_parameter_error_from_c_struct((HERB_STATE_INVALID_PARAMETER_ERROR_T*) error); break;
1309
+ case HERB_STATE_DUPLICATE_DECLARATION_ERROR: return rb_herb_state_duplicate_declaration_error_from_c_struct((HERB_STATE_DUPLICATE_DECLARATION_ERROR_T*) error); break;
949
1310
  case VOID_ELEMENT_CONTENT_ERROR: return rb_void_element_content_error_from_c_struct((VOID_ELEMENT_CONTENT_ERROR_T*) error); break;
950
1311
  case DOT_NOTATION_CASING_ERROR: return rb_dot_notation_casing_error_from_c_struct((DOT_NOTATION_CASING_ERROR_T*) error); break;
1312
+ case TIMEOUT_ERROR: return rb_timeout_error_from_c_struct((TIMEOUT_ERROR_T*) error); break;
951
1313
  }
952
1314
 
953
1315
  return Qnil;
@@ -1,5 +1,5 @@
1
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/ext/herb/error_helpers.h.erb
2
+ // be modified manually. See templates/ext/herb/error_helpers.h.erb
3
3
 
4
4
  #ifndef HERB_EXTENSION_ERROR_HELPERS_H
5
5
  #define HERB_EXTENSION_ERROR_HELPERS_H
data/ext/herb/extconf.rb CHANGED
@@ -7,7 +7,6 @@ extension_name = "herb"
7
7
 
8
8
  if Herb::Bootstrap.git_source? && !Herb::Bootstrap.templates_generated?
9
9
  puts "Building from source — running bootstrap..."
10
- Herb::Bootstrap.generate_templates
11
10
 
12
11
  unless Herb::Bootstrap.prism_vendored?
13
12
  prism_path = Herb::Bootstrap.find_prism_gem_path
@@ -30,6 +29,8 @@ if Herb::Bootstrap.git_source? && !Herb::Bootstrap.templates_generated?
30
29
  Herb::Bootstrap.vendor_prism(prism_gem_path: prism_path)
31
30
  end
32
31
 
32
+ Herb::Bootstrap.generate_templates
33
+
33
34
  root_path = Herb::Bootstrap::ROOT_PATH
34
35
  sha = `git -C #{root_path} rev-parse --short HEAD 2>/dev/null`.strip
35
36
 
@@ -101,7 +102,8 @@ core_src_files = [
101
102
  "extension.c",
102
103
  "nodes.c",
103
104
  "error_helpers.c",
104
- "extension_helpers.c"
105
+ "extension_helpers.c",
106
+ "parser_options_helpers.c"
105
107
  ]
106
108
 
107
109
  $srcs = core_src_files + herb_src_files + prism_main_files + prism_util_files