herb 0.10.4 → 0.11.0

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 (784) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +16 -6
  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 +1240 -790
  284. data/exe/herb +2 -0
  285. data/ext/herb/error_helpers.c +355 -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 -89
  289. data/ext/herb/extension_helpers.c +81 -42
  290. data/ext/herb/extension_helpers.h +4 -1
  291. data/ext/herb/nodes.c +826 -358
  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 +2 -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 +1342 -105
  327. data/lib/herb/backend.rb +73 -0
  328. data/lib/herb/bootstrap.rb +3 -7
  329. data/lib/herb/cli.rb +550 -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 +175 -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 +346 -108
  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 +854 -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 +128 -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 +1326 -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 +2256 -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} +121 -93
  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 -257
  422. data/lib/herb/ensure_installed.rb +43 -0
  423. data/lib/herb/errors.rb +646 -157
  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 +65 -46
  432. data/lib/herb/position.rb +19 -0
  433. data/lib/herb/prism_inspect.rb +1 -4
  434. data/lib/herb/project.rb +28 -15
  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 +662 -89
  483. data/sig/herb/backend.rbs +52 -0
  484. data/sig/herb/colors.rbs +3 -0
  485. data/sig/herb/configuration.rbs +27 -3
  486. data/sig/herb/dev/assets.rbs +27 -0
  487. data/sig/herb/dev/classifier.rbs +57 -0
  488. data/sig/herb/dev/embedded.rbs +21 -0
  489. data/sig/herb/dev/pipeline.rbs +118 -0
  490. data/sig/herb/dev/protocol.rbs +78 -0
  491. data/sig/herb/dev/runner.rbs +61 -23
  492. data/sig/herb/dev/server.rbs +49 -22
  493. data/sig/herb/dev/server_entry.rbs +46 -21
  494. data/sig/herb/dev/watcher.rbs +84 -0
  495. data/sig/herb/dev.rbs +58 -0
  496. data/sig/herb/diagnostic/formatter.rbs +28 -0
  497. data/sig/herb/diagnostic.rbs +88 -0
  498. data/sig/herb/diff/operation.rbs +36 -0
  499. data/sig/herb/diff/result.rbs +36 -0
  500. data/sig/herb/diff.rbs +6 -0
  501. data/sig/herb/engine/collector.rbs +48 -0
  502. data/sig/herb/engine/compiler.rbs +62 -23
  503. data/sig/herb/engine/component_tags/constant_resolver.rbs +19 -0
  504. data/sig/herb/engine/component_tags/partial_resolver.rbs +30 -0
  505. data/sig/herb/engine/component_tags/resolver.rbs +25 -0
  506. data/sig/herb/engine/component_tags/visitor.rbs +69 -0
  507. data/sig/herb/engine/css_inliner/inliner.rbs +65 -0
  508. data/sig/herb/engine/css_inliner/visitor.rbs +87 -0
  509. data/sig/herb/engine/errors.rbs +68 -0
  510. data/sig/herb/engine/helpers.rbs +28 -0
  511. data/sig/herb/engine/inline_render/inliner.rbs +39 -0
  512. data/sig/herb/engine/inline_render/visitor.rbs +104 -0
  513. data/sig/herb/engine/runtime/entry.rbs +43 -0
  514. data/sig/herb/engine/runtime/error_page.rbs +115 -0
  515. data/sig/herb/engine/runtime/html_safe_assertions.rbs +99 -0
  516. data/sig/herb/engine/runtime/journal/summary.rbs +172 -0
  517. data/sig/herb/engine/runtime/journal.rbs +126 -0
  518. data/sig/herb/engine/runtime/middleware.rbs +96 -0
  519. data/sig/herb/engine/runtime/observations.rbs +38 -0
  520. data/sig/herb/engine/runtime/report.rbs +97 -0
  521. data/sig/herb/engine/runtime/session.rbs +233 -0
  522. data/sig/herb/engine/runtime.rbs +14 -0
  523. data/sig/herb/engine/scoped_style/channel.rbs +45 -0
  524. data/sig/herb/engine/scoped_style/collector.rbs +45 -0
  525. data/sig/herb/engine/scoped_style/visitor.rbs +220 -0
  526. data/sig/herb/engine/slots/annotation.rbs +72 -0
  527. data/sig/herb/engine/slots/bindings.rbs +34 -0
  528. data/sig/herb/engine/slots/callee.rbs +62 -0
  529. data/sig/herb/engine/slots/component_definitions.rbs +19 -0
  530. data/sig/herb/engine/slots/components/async.rbs +20 -0
  531. data/sig/herb/engine/slots/components/base.rbs +60 -0
  532. data/sig/herb/engine/slots/components/deferred.rbs +29 -0
  533. data/sig/herb/engine/slots/components/fallback.rbs +21 -0
  534. data/sig/herb/engine/slots/components/fragment.rbs +34 -0
  535. data/sig/herb/engine/slots/components/lazy.rbs +20 -0
  536. data/sig/herb/engine/slots/components.rbs +30 -0
  537. data/sig/herb/engine/slots/dependencies/channel.rbs +51 -0
  538. data/sig/herb/engine/slots/dependencies.rbs +94 -0
  539. data/sig/herb/engine/slots/dynamics_compiler.rbs +349 -0
  540. data/sig/herb/engine/slots/identifier.rbs +19 -0
  541. data/sig/herb/engine/slots/manifest/channel.rbs +49 -0
  542. data/sig/herb/engine/slots/manifest/collector.rbs +45 -0
  543. data/sig/herb/engine/slots/markers.rbs +85 -0
  544. data/sig/herb/engine/slots/render_bindings.rbs +69 -0
  545. data/sig/herb/engine/slots/schema_compiler.rbs +62 -0
  546. data/sig/herb/engine/slots/state_anchor.rbs +41 -0
  547. data/sig/herb/engine/slots/state_compiler.rbs +258 -0
  548. data/sig/herb/engine/slots/state_directives.rbs +278 -0
  549. data/sig/herb/engine/slots/state_kinds.rbs +24 -0
  550. data/sig/herb/engine/slots/state_operators.rbs +19 -0
  551. data/sig/herb/engine/slots/state_overrides.rbs +33 -0
  552. data/sig/herb/engine/slots/state_predicates.rbs +16 -0
  553. data/sig/herb/engine/slots/state_transforms.rbs +15 -0
  554. data/sig/herb/engine/slots/statics.rbs +67 -0
  555. data/sig/herb/engine/slots/subtree.rbs +49 -0
  556. data/sig/herb/engine/slots/subtree_compiler.rbs +130 -0
  557. data/sig/herb/engine/slots/types.rbs +46 -0
  558. data/sig/herb/engine/slots/visitor.rbs +599 -0
  559. data/sig/herb/engine/validators/accessibility_validator.rbs +1 -1
  560. data/sig/herb/engine/validators/base.rbs +28 -0
  561. data/sig/herb/engine/validators/generator_template_validator.rbs +19 -0
  562. data/sig/herb/engine/validators/nesting_validator.rbs +1 -1
  563. data/sig/herb/engine/validators/render_validator.rbs +2 -6
  564. data/sig/herb/engine/validators/security_validator.rbs +1 -3
  565. data/sig/herb/engine/validators.rbs +21 -0
  566. data/sig/herb/engine/visitors/auto_close_omitted_tags_visitor.rbs +26 -0
  567. data/sig/herb/engine/visitors/content_for_visitor.rbs +52 -0
  568. data/sig/herb/engine/{debug_visitor.rbs → visitors/debug_visitor.rbs} +26 -15
  569. data/sig/herb/engine/visitors/html_safe_assertions_visitor.rbs +100 -0
  570. data/sig/herb/engine/visitors/instrumentation_visitor.rbs +111 -0
  571. data/sig/herb/engine/visitors/optimize_visitor.rbs +246 -0
  572. data/sig/herb/engine/visitors/remove_comments_visitor.rbs +66 -0
  573. data/sig/herb/engine/visitors/source_attribution_visitor.rbs +90 -0
  574. data/sig/herb/engine.rbs +47 -41
  575. data/sig/herb/ensure_installed.rbs +9 -0
  576. data/sig/herb/errors.rbs +293 -0
  577. data/sig/herb/fingerprint.rbs +37 -0
  578. data/sig/herb/html/elements.rbs +19 -0
  579. data/sig/herb/html/util.rbs +15 -1
  580. data/sig/herb/lex_result.rbs +0 -6
  581. data/sig/herb/locate.rbs +89 -0
  582. data/sig/herb/location.rbs +12 -0
  583. data/sig/herb/parse_result.rbs +10 -8
  584. data/sig/herb/parser_options.rbs +47 -21
  585. data/sig/herb/position.rbs +11 -0
  586. data/sig/herb/range.rbs +3 -0
  587. data/sig/herb/ruby_program.rbs +51 -0
  588. data/sig/herb/source_path.rbs +132 -0
  589. data/sig/herb/token.rbs +5 -2
  590. data/sig/herb/visitor/context/origin.rbs +51 -0
  591. data/sig/herb/visitor/context/replacements.rbs +39 -0
  592. data/sig/herb/visitor/context.rbs +83 -0
  593. data/sig/herb/visitor/context_aware.rbs +32 -0
  594. data/sig/herb/visitor/diagnostics.rbs +82 -0
  595. data/sig/herb/visitor/experimental.rbs +23 -0
  596. data/sig/herb/visitor/parser_option_requirements.rbs +76 -0
  597. data/sig/herb/visitor/stack.rbs +91 -0
  598. data/sig/herb/visitor.rbs +22 -0
  599. data/sig/herb/warnings.rbs +10 -0
  600. data/sig/herb.rbs +27 -10
  601. data/sig/serialized_ast_errors.rbs +58 -1
  602. data/sig/serialized_ast_nodes.rbs +58 -2
  603. data/src/analyze/action_view/attribute_extraction_helpers.c +73 -36
  604. data/src/analyze/action_view/generated_handlers.c +37 -1
  605. data/src/analyze/action_view/generated_handlers.h +2 -1
  606. data/src/analyze/action_view/helper_registry.c +1353 -58
  607. data/src/analyze/action_view/registry.c +10 -17
  608. data/src/analyze/action_view/stylesheet_link_tag.c +40 -0
  609. data/src/analyze/action_view/tag_helper_node_builders.c +57 -0
  610. data/src/analyze/action_view/tag_helpers.c +423 -93
  611. data/src/analyze/analyze.c +301 -64
  612. data/src/analyze/analyze_helpers.c +420 -23
  613. data/src/analyze/builders.c +79 -51
  614. data/src/analyze/conditional_elements.c +13 -8
  615. data/src/analyze/conditional_open_tags.c +11 -5
  616. data/src/analyze/control_type.c +16 -1
  617. data/src/analyze/herb_directives.c +701 -0
  618. data/src/analyze/invalid_structures.c +11 -7
  619. data/src/analyze/iteration_nodes.c +306 -0
  620. data/src/analyze/missing_end.c +116 -32
  621. data/src/analyze/parse_errors.c +8 -3
  622. data/src/analyze/postfix_conditionals.c +98 -63
  623. data/src/analyze/prism_annotate.c +13 -4
  624. data/src/analyze/render_nodes.c +345 -123
  625. data/src/analyze/strict_locals.c +30 -26
  626. data/src/analyze/ternary_conditionals.c +95 -70
  627. data/src/analyze/transform.c +43 -1
  628. data/src/ast/ast_node.c +3 -13
  629. data/src/ast/ast_nodes.c +911 -112
  630. data/src/ast/ast_pretty_print.c +161 -2
  631. data/src/diff/herb_diff.c +8 -0
  632. data/src/diff/herb_diff_attributes.c +1 -0
  633. data/src/diff/herb_diff_children.c +4 -3
  634. data/src/diff/herb_diff_helpers.c +7 -1
  635. data/src/diff/herb_diff_nodes.c +186 -71
  636. data/src/diff/herb_hash_tree.c +99 -1
  637. data/src/errors.c +1096 -128
  638. data/src/extract.c +30 -8
  639. data/src/herb.c +30 -11
  640. data/src/include/analyze/action_view/attribute_extraction_helpers.h +1 -1
  641. data/src/include/analyze/action_view/helper_registry.h +28 -4
  642. data/src/include/analyze/action_view/tag_helper_handler.h +1 -1
  643. data/src/include/analyze/action_view/tag_helper_node_builders.h +7 -0
  644. data/src/include/analyze/analyze.h +11 -0
  645. data/src/include/analyze/builders.h +16 -0
  646. data/src/include/analyze/helpers.h +23 -2
  647. data/src/include/analyze/herb_directive_kinds.h +41 -0
  648. data/src/include/analyze/herb_directives.h +14 -0
  649. data/src/include/analyze/iteration_nodes.h +11 -0
  650. data/src/include/analyze/prism_annotate.h +3 -3
  651. data/src/include/analyze/ternary_conditionals.h +2 -0
  652. data/src/include/ast/ast_node.h +1 -5
  653. data/src/include/ast/ast_nodes.h +76 -2
  654. data/src/include/ast/ast_pretty_print.h +1 -1
  655. data/src/include/diff/herb_diff.h +11 -0
  656. data/src/include/errors.h +156 -39
  657. data/src/include/extract.h +11 -0
  658. data/src/include/herb.h +6 -0
  659. data/src/include/lexer/erb_openers.h +29 -0
  660. data/src/include/lexer/lexer_peek_helpers.h +8 -1
  661. data/src/include/lexer/lexer_struct.h +4 -0
  662. data/src/include/lexer/token.h +3 -0
  663. data/src/include/lexer/token_struct.h +8 -6
  664. data/src/include/lib/hb_allocator.h +2 -1
  665. data/src/include/lib/hb_array.h +2 -0
  666. data/src/include/lib/hb_foreach.h +1 -1
  667. data/src/include/lib/hb_string.h +7 -0
  668. data/src/include/parser/dot_notation.h +1 -1
  669. data/src/include/parser/foreign_content_elements.h +32 -0
  670. data/src/include/parser/parser.h +16 -30
  671. data/src/include/parser/parser_helpers.h +13 -11
  672. data/src/include/parser/parser_options.h +41 -0
  673. data/src/include/prism/ruby_parser.h +6 -0
  674. data/src/include/util/html_elements.h +85 -0
  675. data/src/include/util/html_util.h +1 -0
  676. data/src/include/version.h +1 -1
  677. data/src/lexer/lexer_peek_helpers.c +15 -1
  678. data/src/lexer/token.c +83 -1
  679. data/src/lexer.c +196 -12
  680. data/src/lib/hb_allocator.c +2 -0
  681. data/src/lib/hb_array.c +26 -0
  682. data/src/lib/hb_string.c +26 -0
  683. data/src/main.c +1 -1
  684. data/src/parser/dot_notation.c +4 -3
  685. data/src/parser/match_tags.c +66 -1
  686. data/src/parser/parser_helpers.c +69 -37
  687. data/src/parser.c +606 -383
  688. data/src/parser_options_defaults.c +30 -0
  689. data/src/prism/prism_helpers.c +3 -0
  690. data/src/prism/ruby_parser.c +49 -0
  691. data/src/util/html_util.c +11 -58
  692. data/src/visitor.c +77 -1
  693. data/templates/ext/herb/error_helpers.c.erb +1 -1
  694. data/templates/ext/herb/nodes.c.erb +18 -13
  695. data/templates/ext/herb/nodes.h.erb +2 -1
  696. data/templates/ext/herb/parser_options_helpers.c.erb +69 -0
  697. data/templates/ext/herb/parser_options_helpers.h.erb +11 -0
  698. data/templates/java/nodes.c.erb +20 -16
  699. data/templates/java/nodes.h.erb +3 -2
  700. data/templates/java/org/herb/ParserOptions.java.erb +24 -0
  701. data/templates/java/org/herb/ast/HelperRegistry.java.erb +67 -31
  702. data/templates/java/org/herb/ast/HelperType.java.erb +29 -0
  703. data/templates/java/org/herb/ast/Nodes.java.erb +11 -7
  704. data/templates/java/parser_options_helpers.c.erb +45 -0
  705. data/templates/java/parser_options_helpers.h.erb +10 -0
  706. data/templates/javascript/packages/client/src/state-kinds.ts.erb +49 -0
  707. data/templates/javascript/packages/client/src/state-operators.ts.erb +15 -0
  708. data/templates/javascript/packages/client/src/state-predicates.ts.erb +27 -0
  709. data/templates/javascript/packages/client/src/state-transforms.ts.erb +19 -0
  710. data/templates/javascript/packages/core/src/action-view-helpers.ts.erb +47 -0
  711. data/templates/javascript/packages/core/src/built-in-components.ts.erb +67 -0
  712. data/templates/javascript/packages/core/src/errors.ts.erb +9 -3
  713. data/templates/javascript/packages/core/src/foreign-content-elements.ts.erb +18 -0
  714. data/templates/javascript/packages/core/src/html-constants.ts.erb +32 -0
  715. data/templates/javascript/packages/core/src/html-elements.ts.erb +41 -0
  716. data/templates/javascript/packages/core/src/node-type-guards.ts.erb +11 -7
  717. data/templates/javascript/packages/core/src/nodes.ts.erb +82 -19
  718. data/templates/javascript/packages/core/src/parser-options.ts.erb +41 -0
  719. data/templates/javascript/packages/core/src/visitor.ts.erb +1 -1
  720. data/templates/javascript/packages/node/extension/error_helpers.cpp.erb +3 -3
  721. data/templates/javascript/packages/node/extension/nodes.cpp.erb +17 -12
  722. data/templates/javascript/packages/node/extension/nodes.h.erb +3 -3
  723. data/templates/javascript/packages/node/extension/parser_options_helpers.cpp.erb +41 -0
  724. data/templates/javascript/packages/node/extension/parser_options_helpers.h.erb +12 -0
  725. data/templates/lib/herb/action_view/helper_registry.rb.erb +77 -3
  726. data/templates/lib/herb/ast/nodes.rb.erb +16 -6
  727. data/templates/lib/herb/engine/slots/component_definitions.rb.erb +38 -0
  728. data/templates/lib/herb/engine/slots/state_kinds.rb.erb +37 -0
  729. data/templates/lib/herb/engine/slots/state_operators.rb.erb +26 -0
  730. data/templates/lib/herb/engine/slots/state_predicates.rb.erb +39 -0
  731. data/templates/lib/herb/engine/slots/state_transforms.rb.erb +27 -0
  732. data/templates/lib/herb/errors.rb.erb +34 -6
  733. data/templates/lib/herb/html/elements.rb.erb +12 -0
  734. data/templates/lib/herb/parser_options.rb.erb +32 -0
  735. data/templates/lib/herb/visitor.rb.erb +7 -1
  736. data/templates/rust/herb-printer/src/printer_visitor.rs.erb +14 -0
  737. data/templates/rust/src/action_view_helpers.rs.erb +38 -0
  738. data/templates/rust/src/ast/nodes.rs.erb +24 -31
  739. data/templates/rust/src/errors.rs.erb +1 -1
  740. data/templates/rust/src/nodes.rs.erb +58 -26
  741. data/templates/rust/src/parser_options.rs.erb +16 -0
  742. data/templates/rust/src/prism/generated_deserialize.rs.erb +109 -0
  743. data/templates/rust/src/prism/generated_prettyprint.rs.erb +153 -0
  744. data/templates/rust/src/union_types.rs.erb +7 -1
  745. data/templates/rust/src/visitor.rs.erb +1 -1
  746. data/templates/src/analyze/action_view/helper_registry.c.erb +22 -0
  747. data/templates/src/analyze/missing_end.c.erb +13 -5
  748. data/templates/src/ast/ast_nodes.c.erb +41 -2
  749. data/templates/src/diff/herb_diff_nodes.c.erb +44 -8
  750. data/templates/src/errors.c.erb +8 -3
  751. data/templates/src/include/analyze/action_view/helper_registry.h.erb +19 -0
  752. data/templates/src/include/analyze/herb_directive_kinds.h.erb +25 -0
  753. data/templates/src/include/errors.h.erb +3 -1
  754. data/templates/src/include/parser/foreign_content_elements.h.erb +23 -0
  755. data/templates/src/include/parser/parser_options.h.erb +21 -0
  756. data/templates/src/include/util/html_elements.h.erb +28 -0
  757. data/templates/src/parser_options_defaults.c.erb +9 -0
  758. data/templates/template.rb +564 -9
  759. data/templates/wasm/error_helpers.cpp.erb +4 -4
  760. data/templates/wasm/nodes.cpp.erb +12 -12
  761. data/templates/wasm/nodes.h.erb +3 -3
  762. data/templates/wasm/parser_options_helpers.cpp.erb +25 -0
  763. data/templates/wasm/parser_options_helpers.h.erb +12 -0
  764. metadata +306 -27
  765. data/config/action_view_helpers/actionview/form_helper/button.yml +0 -38
  766. data/config/action_view_helpers/actionview/form_helper/submit.yml +0 -35
  767. data/lib/herb/ast.rb +0 -7
  768. data/lib/herb/diff_operation.rb +0 -34
  769. data/lib/herb/diff_result.rb +0 -59
  770. data/lib/herb/engine/error_formatter.rb +0 -432
  771. data/lib/herb/engine/parser_error_overlay.rb +0 -773
  772. data/lib/herb/engine/validation_error_overlay.rb +0 -182
  773. data/lib/herb/engine/validation_errors.rb +0 -65
  774. data/lib/herb/engine/validator.rb +0 -80
  775. data/sig/herb/ast.rbs +0 -6
  776. data/sig/herb/diff_operation.rbs +0 -34
  777. data/sig/herb/diff_result.rbs +0 -34
  778. data/sig/herb/engine/debug.rbs +0 -38
  779. data/sig/herb/engine/error_formatter.rbs +0 -47
  780. data/sig/herb/engine/parser_error_overlay.rbs +0 -41
  781. data/sig/herb/engine/validation_error_overlay.rbs +0 -35
  782. data/sig/herb/engine/validation_errors.rbs +0 -45
  783. data/sig/herb/engine/validator.rbs +0 -41
  784. data/sig/herb_c_extension.rbs +0 -10
data/config.yml CHANGED
@@ -1,505 +1,812 @@
1
+ ---
1
2
  errors:
2
3
  fields:
3
- - name: message
4
- type: string
4
+ - name: "message"
5
+ type: "string"
5
6
 
6
- - name: start
7
- type: position
7
+ - name: "start"
8
+ type: "position"
8
9
 
9
- - name: end
10
- type: position
10
+ - name: "end"
11
+ type: "position"
11
12
 
12
13
  types:
13
- - name: UnexpectedError
14
+ - name: "UnexpectedError"
14
15
  message:
15
16
  template: "%s. Expected: %s, found: %s."
16
17
  arguments:
17
- - description
18
- - expected
19
- - found
18
+ - "description"
19
+ - "expected"
20
+ - "found"
20
21
 
21
22
  fields:
22
- - name: description
23
- type: string
23
+ - name: "description"
24
+ type: "string"
24
25
 
25
- - name: expected
26
- type: string
26
+ - name: "expected"
27
+ type: "string"
27
28
 
28
- - name: found
29
- type: string
29
+ - name: "found"
30
+ type: "string"
30
31
 
31
- - name: UnexpectedTokenError
32
+ - name: "UnexpectedTokenError"
32
33
  message:
33
34
  template: "Found %s when expecting %s at (%u:%u)."
34
35
  arguments:
35
- - token_type_to_friendly_string(found->type)
36
- - token_type_to_friendly_string(expected_type)
37
- - found->location.start.line
38
- - found->location.start.column
36
+ - "token_type_to_friendly_string(found->type)"
37
+ - "token_type_to_friendly_string(expected_type)"
38
+ - "found->location.start.line"
39
+ - "found->location.start.column"
39
40
 
40
41
  fields:
41
- - name: expected_type
42
- type: token_type
42
+ - name: "expected_type"
43
+ type: "token_type"
43
44
 
44
- - name: found
45
- type: token
45
+ - name: "found"
46
+ type: "token"
46
47
 
47
- - name: MissingOpeningTagError
48
+ - name: "MissingOpeningTagError"
48
49
  message:
49
50
  template: "Found closing tag `</%s>` at (%u:%u) without a matching opening tag in the same scope."
50
51
  arguments:
51
- - closing_tag->value
52
- - closing_tag->location.start.line
53
- - closing_tag->location.start.column
54
-
52
+ - "closing_tag->value"
53
+ - "closing_tag->location.start.line"
54
+ - "closing_tag->location.start.column"
55
+ suggestion:
56
+ template: "Add the matching opening tag, or remove this closing tag."
55
57
  fields:
56
- - name: closing_tag
57
- type: token
58
+ - name: "closing_tag"
59
+ type: "token"
58
60
 
59
- - name: MissingClosingTagError
61
+ - name: "MissingClosingTagError"
60
62
  message:
61
63
  template: "Opening tag `<%s>` at (%u:%u) doesn't have a matching closing tag `</%s>` in the same scope."
62
64
  arguments:
63
- - opening_tag->value
64
- - opening_tag->location.start.line
65
- - opening_tag->location.start.column
66
- - opening_tag->value
67
-
65
+ - "opening_tag->value"
66
+ - "opening_tag->location.start.line"
67
+ - "opening_tag->location.start.column"
68
+ - "opening_tag->value"
69
+ suggestion:
70
+ template: "Add the closing tag, or make it self-closing."
68
71
  fields:
69
- - name: opening_tag
70
- type: token
72
+ - name: "opening_tag"
73
+ type: "token"
71
74
 
72
- - name: TagNamesMismatchError
75
+ - name: "TagNamesMismatchError"
73
76
  message:
74
77
  template: "Opening tag `<%s>` at (%u:%u) closed with `</%s>` at (%u:%u)."
75
78
  arguments:
76
- - opening_tag->value
77
- - opening_tag->location.start.line
78
- - opening_tag->location.start.column
79
- - closing_tag->value
80
- - closing_tag->location.start.line
81
- - closing_tag->location.start.column
82
-
79
+ - "opening_tag->value"
80
+ - "opening_tag->location.start.line"
81
+ - "opening_tag->location.start.column"
82
+ - "closing_tag->value"
83
+ - "closing_tag->location.start.line"
84
+ - "closing_tag->location.start.column"
85
+ suggestion:
86
+ template: "Change the closing tag to `</%s>`."
87
+ arguments:
88
+ - "opening_tag->value"
83
89
  fields:
84
- - name: opening_tag
85
- type: token
90
+ - name: "opening_tag"
91
+ type: "token"
86
92
 
87
- - name: closing_tag
88
- type: token
93
+ - name: "closing_tag"
94
+ type: "token"
89
95
 
90
- - name: VoidElementClosingTagError
96
+ - name: "VoidElementClosingTagError"
91
97
  message:
92
98
  template: "`%s` is a void element and should not be used as a closing tag. Use `<%s>` or `<%s />` instead of `</%s>`."
93
99
  arguments:
94
- - tag_name->value
95
- - tag_name->value
96
- - tag_name->value
97
- - tag_name->value
98
-
100
+ - "tag_name->value"
101
+ - "tag_name->value"
102
+ - "tag_name->value"
103
+ - "tag_name->value"
104
+ suggestion:
105
+ template: "A void element cannot have a closing tag. Remove it, or write `<%s />`."
106
+ arguments:
107
+ - "tag_name->value"
99
108
  fields:
100
- - name: tag_name
101
- type: token
109
+ - name: "tag_name"
110
+ type: "token"
102
111
 
103
- - name: expected
104
- type: string
112
+ - name: "expected"
113
+ type: "string"
105
114
 
106
- - name: found
107
- type: string
115
+ - name: "found"
116
+ type: "string"
108
117
 
109
- - name: UnclosedElementError
118
+ - name: "UnclosedElementError"
110
119
  message:
111
120
  template: "Tag `<%s>` opened at (%u:%u) was never closed before the end of document."
112
121
  arguments:
113
- - opening_tag->value
114
- - opening_tag->location.start.line
115
- - opening_tag->location.start.column
116
-
122
+ - "opening_tag->value"
123
+ - "opening_tag->location.start.line"
124
+ - "opening_tag->location.start.column"
125
+ suggestion:
126
+ template: "Close this element before the end of the template."
117
127
  fields:
118
- - name: opening_tag
119
- type: token
128
+ - name: "opening_tag"
129
+ type: "token"
120
130
 
121
- - name: RubyParseError
131
+ - name: "RubyParseError"
122
132
  message:
123
133
  template: "%s: %s"
124
134
  arguments:
125
- - diagnostic_id
126
- - error_message
127
-
135
+ - "diagnostic_id"
136
+ - "error_message"
137
+ suggestion:
138
+ template: "Check the Ruby syntax inside the ERB tag."
128
139
  fields:
129
- - name: error_message
130
- type: string
140
+ - name: "error_message"
141
+ type: "string"
131
142
 
132
- - name: diagnostic_id
133
- type: string
143
+ - name: "diagnostic_id"
144
+ type: "string"
134
145
 
135
- - name: level
136
- type: string
146
+ - name: "level"
147
+ type: "string"
137
148
 
138
- - name: ERBControlFlowScopeError
149
+ - name: "ERBControlFlowScopeError"
139
150
  message:
140
151
  template: "%s appears outside its control flow block. Keep ERB control flow statements together within the same HTML scope (tag, attribute, or content)."
141
152
  arguments:
142
- - keyword
153
+ - "keyword"
143
154
 
144
155
  fields:
145
- - name: keyword
146
- type: string
156
+ - name: "keyword"
157
+ type: "string"
147
158
 
148
- - name: MissingERBEndTagError
159
+ - name: "MissingERBEndTagError"
149
160
  message:
150
161
  template: "%s started here but never closed with an end tag. The end tag may be in a different scope."
151
162
  arguments:
152
- - keyword
163
+ - "keyword"
153
164
 
154
165
  fields:
155
- - name: keyword
156
- type: string
166
+ - name: "keyword"
167
+ type: "string"
157
168
 
158
- - name: ERBMultipleBlocksInTagError
169
+ - name: "ERBMultipleBlocksInTagError"
159
170
  message:
160
171
  template: "Multiple unclosed control flow blocks in a single ERB tag. Split each block into its own ERB tag, or close all blocks within the same tag."
161
172
  arguments: []
162
173
 
163
174
  fields: []
164
175
 
165
- - name: ERBCaseWithConditionsError
176
+ - name: "ERBCaseWithConditionsError"
166
177
  message:
167
- template: "A `case` statement with `when`/`in` conditions in a single ERB tag cannot be reliably parsed, compiled, and formatted. Use separate ERB tags for `case` and its conditions (e.g., `<% case x %>` followed by `<% when y %>`)."
178
+ template: "A `case` statement with `when`/`in` conditions in a single ERB tag cannot be reliably parsed, compiled, and formatted. Use separate ERB tags for `case` and its conditions (e.g., `<% case x %>` followed by `<% when y %>`), or set `strict: false` to allow this."
168
179
  arguments: []
169
180
 
170
181
  fields: []
171
182
 
172
- - name: ConditionalElementMultipleTagsError
183
+ - name: "ERBCaseInlinePatternMatchError"
184
+ message:
185
+ template: "A `case` statement and its first `in` pattern on the same line read as Ruby's one-line pattern match, not as a `case`/`in`. Put the `in` pattern on its own line, or in its own ERB tag (e.g., `<% case x %>` followed by `<% in y %>`)."
186
+ arguments: []
187
+
188
+ fields: []
189
+
190
+ - name: "ConditionalElementMultipleTagsError"
173
191
  message:
174
192
  template: "Conditional element pattern detected at (%zu:%zu) but the conditional block contains multiple HTML tags. Each conditional element must wrap exactly one opening and one closing tag. Consider nesting the conditionals individually."
175
193
  arguments:
176
- - line
177
- - column
194
+ - "line"
195
+ - "column"
178
196
 
179
197
  fields:
180
- - name: line
181
- type: size_t
198
+ - name: "line"
199
+ type: "size_t"
182
200
 
183
- - name: column
184
- type: size_t
201
+ - name: "column"
202
+ type: "size_t"
185
203
 
186
- - name: ConditionalElementConditionMismatchError
204
+ - name: "ConditionalElementConditionMismatchError"
187
205
  message:
188
206
  template: "Conditional element `<%s>` has mismatched conditions: opening uses `%s` at (%zu:%zu) but closing uses `%s` at (%zu:%zu). Both conditions must be identical."
189
207
  arguments:
190
- - tag_name
191
- - open_condition
192
- - open_line
193
- - open_column
194
- - close_condition
195
- - close_line
196
- - close_column
208
+ - "tag_name"
209
+ - "open_condition"
210
+ - "open_line"
211
+ - "open_column"
212
+ - "close_condition"
213
+ - "close_line"
214
+ - "close_column"
197
215
 
198
216
  fields:
199
- - name: tag_name
200
- type: string
217
+ - name: "tag_name"
218
+ type: "string"
201
219
 
202
- - name: open_condition
203
- type: string
220
+ - name: "open_condition"
221
+ type: "string"
204
222
 
205
- - name: open_line
206
- type: size_t
223
+ - name: "open_line"
224
+ type: "size_t"
207
225
 
208
- - name: open_column
209
- type: size_t
226
+ - name: "open_column"
227
+ type: "size_t"
210
228
 
211
- - name: close_condition
212
- type: string
229
+ - name: "close_condition"
230
+ type: "string"
213
231
 
214
- - name: close_line
215
- type: size_t
232
+ - name: "close_line"
233
+ type: "size_t"
216
234
 
217
- - name: close_column
218
- type: size_t
235
+ - name: "close_column"
236
+ type: "size_t"
219
237
 
220
- - name: InvalidCommentClosingTagError
238
+ - name: "UnclosedCommentError"
239
+ message:
240
+ template: "Comment opened at (%u:%u) is missing its closing `-->`."
241
+ arguments:
242
+ - "comment_start->location.start.line"
243
+ - "comment_start->location.start.column"
244
+ suggestion:
245
+ template: "Add `-->` where the comment should end."
246
+ fields:
247
+ - name: "comment_start"
248
+ type: "token"
249
+
250
+ - name: "NestedCommentError"
251
+ message:
252
+ template: "Comment opened at (%u:%u) contains another `<!--` at (%u:%u)."
253
+ arguments:
254
+ - "comment_start->location.start.line"
255
+ - "comment_start->location.start.column"
256
+ - "nested_start->location.start.line"
257
+ - "nested_start->location.start.column"
258
+ suggestion:
259
+ template: "Comments cannot nest. The outer comment ends at the first `-->`, so remove the inner `<!--` or close the outer comment before it."
260
+ fields:
261
+ - name: "comment_start"
262
+ type: "token"
263
+
264
+ - name: "nested_start"
265
+ type: "token"
266
+
267
+ - name: "InvalidCommentClosingTagError"
221
268
  message:
222
269
  template: "Invalid comment closing tag `%s` at (%u:%u). Use `-->` instead of `--!>`."
223
270
  arguments:
224
- - closing_tag->value
225
- - closing_tag->location.start.line
226
- - closing_tag->location.start.column
271
+ - "closing_tag->value"
272
+ - "closing_tag->location.start.line"
273
+ - "closing_tag->location.start.column"
227
274
 
228
275
  fields:
229
- - name: closing_tag
230
- type: token
276
+ - name: "closing_tag"
277
+ type: "token"
231
278
 
232
- - name: OmittedClosingTagError
279
+ - name: "OmittedClosingTagError"
233
280
  message:
234
281
  template: "Element `<%s>` at (%u:%u) has its closing tag omitted. While valid HTML, consider adding an explicit `</%s>` closing tag at (%u:%u) for clarity, or set `strict: false` to allow this."
235
282
  arguments:
236
- - opening_tag->value
237
- - opening_tag->location.start.line
238
- - opening_tag->location.start.column
239
- - opening_tag->value
240
- - insertion_point.line
241
- - insertion_point.column
283
+ - "opening_tag->value"
284
+ - "opening_tag->location.start.line"
285
+ - "opening_tag->location.start.column"
286
+ - "opening_tag->value"
287
+ - "insertion_point.line"
288
+ - "insertion_point.column"
242
289
 
243
290
  fields:
244
- - name: opening_tag
245
- type: token
291
+ - name: "opening_tag"
292
+ type: "token"
246
293
 
247
- - name: insertion_point
248
- type: position
294
+ - name: "insertion_point"
295
+ type: "position"
249
296
 
250
- - name: UnclosedOpenTagError
297
+ - name: "UnclosedOpenTagError"
251
298
  message:
252
299
  template: "Opening tag `<%s>` at (%u:%u) is missing closing `>`."
253
300
  arguments:
254
- - tag_name->value
255
- - tag_name->location.start.line
256
- - tag_name->location.start.column
301
+ - "tag_name->value"
302
+ - "tag_name->location.start.line"
303
+ - "tag_name->location.start.column"
257
304
 
258
305
  fields:
259
- - name: tag_name
260
- type: token
306
+ - name: "tag_name"
307
+ type: "token"
261
308
 
262
- - name: UnclosedCloseTagError
309
+ - name: "UnclosedCloseTagError"
263
310
  message:
264
311
  template: "Closing tag `</%s>` at (%u:%u) is missing closing `>`."
265
312
  arguments:
266
- - tag_name->value
267
- - tag_name->location.start.line
268
- - tag_name->location.start.column
313
+ - "tag_name->value"
314
+ - "tag_name->location.start.line"
315
+ - "tag_name->location.start.column"
269
316
 
270
317
  fields:
271
- - name: tag_name
272
- type: token
318
+ - name: "tag_name"
319
+ type: "token"
273
320
 
274
- - name: UnclosedQuoteError
321
+ - name: "EndTagWithTrailingSolidusError"
322
+ message:
323
+ template: "Closing tag `</%s>` at (%u:%u) ends with `/>` instead of `>`."
324
+ arguments:
325
+ - "tag_name->value"
326
+ - "tag_name->location.start.line"
327
+ - "tag_name->location.start.column"
328
+ suggestion:
329
+ template: "Close it with `>`. A closing tag cannot self-close."
330
+ fields:
331
+ - name: "tag_name"
332
+ type: "token"
333
+
334
+ - name: "UnclosedQuoteError"
275
335
  message:
276
336
  template: "Attribute value opened with %s at (%u:%u) was never closed."
277
337
  arguments:
278
- - opening_quote->value
279
- - opening_quote->location.start.line
280
- - opening_quote->location.start.column
338
+ - "opening_quote->value"
339
+ - "opening_quote->location.start.line"
340
+ - "opening_quote->location.start.column"
281
341
 
282
342
  fields:
283
- - name: opening_quote
284
- type: token
343
+ - name: "opening_quote"
344
+ type: "token"
285
345
 
286
- - name: MissingAttributeValueError
346
+ - name: "MissingAttributeValueError"
287
347
  message:
288
348
  template: "Attribute `%s` at (%u:%u) is missing a value after the equals sign."
289
349
  arguments:
290
- - attribute_name
291
- - start.line
292
- - start.column
350
+ - "attribute_name"
351
+ - "start.line"
352
+ - "start.column"
353
+ suggestion:
354
+ template: "Give `%s` a value, or drop the equals sign."
355
+ arguments:
356
+ - "attribute_name"
357
+ fields:
358
+ - name: "attribute_name"
359
+ type: "string"
360
+
361
+ - name: "MissingWhitespaceBetweenAttributesError"
362
+ message:
363
+ template: "Missing whitespace between attributes at (%u:%u). `%s` is parsed as the start of a new attribute."
364
+ arguments:
365
+ - "found->location.start.line"
366
+ - "found->location.start.column"
367
+ - "found->value"
368
+ suggestion:
369
+ template: "Add a space before it."
370
+ fields:
371
+ - name: "found"
372
+ type: "token"
373
+
374
+ - name: "UnexpectedCharacterInAttributeNameError"
375
+ message:
376
+ template: "Unexpected `%s` in attribute name at (%u:%u)."
377
+ arguments:
378
+ - "character->value"
379
+ - "character->location.start.line"
380
+ - "character->location.start.column"
381
+ suggestion:
382
+ template: "Quotes cannot appear in an attribute name. Check the quoting of the previous attribute value."
383
+ fields:
384
+ - name: "character"
385
+ type: "token"
386
+
387
+ - name: "UnexpectedCharacterInUnquotedAttributeValueError"
388
+ message:
389
+ template: "Unexpected `%s` in unquoted attribute value at (%u:%u)."
390
+ arguments:
391
+ - "character->value"
392
+ - "character->location.start.line"
393
+ - "character->location.start.column"
394
+ suggestion:
395
+ template: "Wrap the value in quotes."
396
+ fields:
397
+ - name: "character"
398
+ type: "token"
399
+
400
+ - name: "UnexpectedEqualsSignBeforeAttributeNameError"
401
+ message:
402
+ template: "Unexpected `=` before attribute name at (%u:%u)."
403
+ arguments:
404
+ - "equals->location.start.line"
405
+ - "equals->location.start.column"
406
+ suggestion:
407
+ template: "Remove the `=`, or put an attribute name in front of it."
408
+ fields:
409
+ - name: "equals"
410
+ type: "token"
293
411
 
412
+ - name: "UnexpectedSolidusInTagError"
413
+ message:
414
+ template: "Unexpected `/` in tag at (%u:%u)."
415
+ arguments:
416
+ - "solidus->location.start.line"
417
+ - "solidus->location.start.column"
418
+ suggestion:
419
+ template: "Remove it, or use `/>` to self-close the tag."
294
420
  fields:
295
- - name: attribute_name
296
- type: string
421
+ - name: "solidus"
422
+ type: "token"
297
423
 
298
- - name: UnclosedERBTagError
424
+ - name: "UnclosedERBTagError"
299
425
  message:
300
426
  template: "ERB tag `%s` at (%u:%u) is missing closing `%%>`."
301
427
  arguments:
302
- - opening_tag->value
303
- - opening_tag->location.start.line
304
- - opening_tag->location.start.column
428
+ - "opening_tag->value"
429
+ - "opening_tag->location.start.line"
430
+ - "opening_tag->location.start.column"
305
431
 
306
432
  fields:
307
- - name: opening_tag
308
- type: token
433
+ - name: "opening_tag"
434
+ type: "token"
309
435
 
310
- - name: StrayERBClosingTagError
436
+ - name: "MalformedERBClosingTagError"
437
+ message:
438
+ template: "ERB tag `%s` at (%u:%u) is closed with `%s` at (%u:%u) instead of `%%>`."
439
+ arguments:
440
+ - "opening_tag->value"
441
+ - "opening_tag->location.start.line"
442
+ - "opening_tag->location.start.column"
443
+ - "closing_tag->value"
444
+ - "closing_tag->location.start.line"
445
+ - "closing_tag->location.start.column"
446
+
447
+ fields:
448
+ - name: "opening_tag"
449
+ type: "token"
450
+
451
+ - name: "closing_tag"
452
+ type: "token"
453
+
454
+ - name: "StrayERBClosingTagError"
311
455
  message:
312
456
  template: "Stray `%%>` found at (%u:%u). This closing delimiter is not part of an ERB tag and will be treated as plain text. If you want a literal `%%>`, use the HTML entities `&percnt;&gt;` instead."
313
457
  arguments:
314
- - start.line
315
- - start.column
458
+ - "start.line"
459
+ - "start.column"
316
460
 
317
461
  fields: []
318
462
 
319
- - name: NestedERBTagError
463
+ - name: "NestedERBTagError"
320
464
  message:
321
465
  template: "ERB tag `%s` at (%u:%u) was terminated by nested `<%%` tag at (%zu:%zu). Nesting `<%%` tags is not supported."
322
466
  arguments:
323
- - opening_tag->value
324
- - opening_tag->location.start.line
325
- - opening_tag->location.start.column
326
- - nested_tag_line
327
- - nested_tag_column
467
+ - "opening_tag->value"
468
+ - "opening_tag->location.start.line"
469
+ - "opening_tag->location.start.column"
470
+ - "nested_tag_line"
471
+ - "nested_tag_column"
328
472
 
329
473
  fields:
330
- - name: opening_tag
331
- type: token
474
+ - name: "opening_tag"
475
+ type: "token"
332
476
 
333
- - name: nested_tag_line
334
- type: size_t
477
+ - name: "nested_tag_line"
478
+ type: "size_t"
335
479
 
336
- - name: nested_tag_column
337
- type: size_t
480
+ - name: "nested_tag_column"
481
+ type: "size_t"
338
482
 
339
- - name: RenderAmbiguousLocalsError
483
+ - name: "RenderAmbiguousLocalsError"
340
484
  message:
341
485
  template: "Did you mean `render partial: '%s', locals: { ... }`? Using `render '%s', locals: { ... }` passes a local variable named `locals` to the partial instead of setting the `locals:` option."
342
486
  arguments:
343
- - partial
344
- - partial
487
+ - "partial"
488
+ - "partial"
345
489
 
346
490
  fields:
347
- - name: partial
348
- type: string
491
+ - name: "partial"
492
+ type: "string"
349
493
 
350
- - name: RenderMissingLocalsError
494
+ - name: "RenderMissingLocalsError"
351
495
  message:
352
496
  template: "Wrap `%s` in `locals: { ... }` when using `partial:`. Use `render partial: '%s', locals: { %s }` instead. Without `locals:`, these keyword arguments are ignored."
353
497
  arguments:
354
- - keywords
355
- - partial
356
- - keywords
498
+ - "keywords"
499
+ - "partial"
500
+ - "keywords"
357
501
 
358
502
  fields:
359
- - name: partial
360
- type: string
503
+ - name: "partial"
504
+ type: "string"
361
505
 
362
- - name: keywords
363
- type: string
506
+ - name: "keywords"
507
+ type: "string"
364
508
 
365
- - name: RenderNoArgumentsError
509
+ - name: "RenderNoArgumentsError"
366
510
  message:
367
511
  template: "No arguments passed to `render`. It needs a partial name, a keyword argument like `partial:`, `template:`, or `layout:`, or a renderable object."
368
512
  arguments: []
369
513
 
370
514
  fields: []
371
515
 
372
- - name: RenderConflictingPartialError
516
+ - name: "RenderConflictingPartialError"
373
517
  message:
374
518
  template: "Both a positional partial `'%s'` and a keyword `partial: '%s'` were passed to `render`. Use one form or the other, not both."
375
519
  arguments:
376
- - positional_partial
377
- - keyword_partial
520
+ - "positional_partial"
521
+ - "keyword_partial"
378
522
 
379
523
  fields:
380
- - name: positional_partial
381
- type: string
524
+ - name: "positional_partial"
525
+ type: "string"
382
526
 
383
- - name: keyword_partial
384
- type: string
527
+ - name: "keyword_partial"
528
+ type: "string"
385
529
 
386
- - name: RenderInvalidAsOptionError
530
+ - name: "RenderInvalidAsOptionError"
387
531
  message:
388
532
  template: "The `as:` value `'%s'` is not a valid Ruby identifier. Use a name that starts with a lowercase letter or underscore, like `as: :item`."
389
533
  arguments:
390
- - as_value
534
+ - "as_value"
391
535
 
392
536
  fields:
393
- - name: as_value
394
- type: string
537
+ - name: "as_value"
538
+ type: "string"
395
539
 
396
- - name: RenderObjectAndCollectionError
540
+ - name: "RenderObjectAndCollectionError"
397
541
  message:
398
542
  template: "The `object:` and `collection:` options are mutually exclusive. Use one or the other in your `render` call."
399
543
  arguments: []
400
544
 
401
545
  fields: []
402
546
 
403
- - name: RenderLayoutWithoutBlockError
547
+ - name: "RenderLayoutWithoutBlockError"
404
548
  message:
405
549
  template: "Layout rendering needs a block. Use `render layout: '%s' do ... end` so the layout has content to wrap."
406
550
  arguments:
407
- - layout
551
+ - "layout"
408
552
 
409
553
  fields:
410
- - name: layout
411
- type: string
554
+ - name: "layout"
555
+ type: "string"
412
556
 
413
- - name: StrictLocalsPositionalArgumentError
557
+ - name: "StrictLocalsPositionalArgumentError"
414
558
  message:
415
559
  template: "Strict locals only support keyword arguments. Positional argument `%s` is not allowed. Use keyword argument format: `%s:`."
416
560
  arguments:
417
- - name
418
- - name
561
+ - "name"
562
+ - "name"
419
563
 
420
564
  fields:
421
- - name: name
422
- type: string
565
+ - name: "name"
566
+ type: "string"
423
567
 
424
- - name: StrictLocalsBlockArgumentError
568
+ - name: "StrictLocalsBlockArgumentError"
425
569
  message:
426
570
  template: "Strict locals only support keyword arguments. Block argument `&%s` is not allowed."
427
571
  arguments:
428
- - name
572
+ - "name"
429
573
 
430
574
  fields:
431
- - name: name
432
- type: string
575
+ - name: "name"
576
+ type: "string"
433
577
 
434
- - name: StrictLocalsSplatArgumentError
578
+ - name: "StrictLocalsSplatArgumentError"
435
579
  message:
436
580
  template: "Strict locals only support keyword arguments. Splat argument `*%s` is not allowed."
437
581
  arguments:
438
- - name
582
+ - "name"
439
583
 
440
584
  fields:
441
- - name: name
442
- type: string
585
+ - name: "name"
586
+ type: "string"
443
587
 
444
- - name: StrictLocalsMissingParenthesisError
588
+ - name: "StrictLocalsMissingParenthesisError"
445
589
  message:
446
590
  template: "Strict locals declaration requires parentheses. Expected `locals: (...)` but got `locals: %s`."
447
591
  arguments:
448
- - rest
592
+ - "rest"
449
593
 
450
594
  fields:
451
- - name: rest
452
- type: string
595
+ - name: "rest"
596
+ type: "string"
453
597
 
454
- - name: StrictLocalsDuplicateDeclarationError
598
+ - name: "StrictLocalsDuplicateDeclarationError"
455
599
  message:
456
600
  template: "Duplicate strict locals declaration. Only the first `<%# locals: (...) %>` declaration is used by Rails."
457
601
  arguments: []
458
602
 
459
603
  fields: []
460
604
 
461
- - name: VoidElementContentError
605
+ - name: "HerbStateMissingParenthesisError"
606
+ message:
607
+ template: "The `herb:state` directive requires parentheses. Expected `herb:state (...)` but got `herb:state %s`."
608
+ arguments:
609
+ - "rest"
610
+
611
+ fields:
612
+ - name: "rest"
613
+ type: "string"
614
+
615
+ - name: "HerbStateNonCanonicalDirectiveError"
616
+ message:
617
+ template: "The `herb:state` directive has to be spelled `<%%# herb:state (...) %%>`. Found `%s` where `%s` was expected."
618
+ arguments:
619
+ - "found"
620
+ - "expected"
621
+
622
+ fields:
623
+ - name: "found"
624
+ type: "string"
625
+
626
+ - name: "expected"
627
+ type: "string"
628
+
629
+ - name: "HerbStateInvalidParameterError"
630
+ message:
631
+ template: "The `herb:state` directive only declares keyword arguments with defaults. `%s` is not one. Declare each state with a default, like `(pending: false)`."
632
+ arguments:
633
+ - "parameter"
634
+
635
+ fields:
636
+ - name: "parameter"
637
+ type: "string"
638
+
639
+ - name: "HerbStateDuplicateDeclarationError"
640
+ message:
641
+ template: "This scope already declares its states. Merge these states into the first `<%# herb:state (...) %>` directive of the scope, so every state of the scope reads from one declaration."
642
+ arguments: []
643
+
644
+ fields: []
645
+
646
+ - name: "VoidElementContentError"
462
647
  message:
463
648
  template: "Void element `%s` cannot have content. `%s` does not accept %s for content."
464
649
  arguments:
465
- - tag_name->value
466
- - helper_name
467
- - content_type
650
+ - "tag_name->value"
651
+ - "helper_name"
652
+ - "content_type"
468
653
 
469
654
  fields:
470
- - name: tag_name
471
- type: token
655
+ - name: "tag_name"
656
+ type: "token"
472
657
 
473
- - name: helper_name
474
- type: string
658
+ - name: "helper_name"
659
+ type: "string"
475
660
 
476
- - name: content_type
477
- type: string
661
+ - name: "content_type"
662
+ type: "string"
478
663
 
479
- - name: DotNotationCasingError
664
+ - name: "DotNotationCasingError"
480
665
  message:
481
666
  template: "Dot-notation component tags require the first segment to start with an uppercase letter. `%s` does not start with an uppercase letter."
482
667
  arguments:
483
- - segment->value
668
+ - "segment->value"
484
669
 
485
670
  fields:
486
- - name: segment
487
- type: token
671
+ - name: "segment"
672
+ type: "token"
488
673
 
489
- - name: TimeoutError
674
+ - name: "TimeoutError"
490
675
  message:
491
676
  template: "Parsing timed out after %zu ms."
492
677
  arguments:
493
- - timeout_ms
678
+ - "timeout_ms"
494
679
 
495
680
  fields:
496
- - name: timeout_ms
497
- type: size_t
681
+ - name: "timeout_ms"
682
+ type: "size_t"
498
683
 
499
684
  warnings:
500
685
  fields: []
501
686
  types: []
502
687
 
688
+ parser_options:
689
+ fields:
690
+ - name: "action_view_helpers"
691
+ type: "boolean"
692
+ default: false
693
+ description: "Whether ActionView tag helper transformation was enabled during parsing."
694
+
695
+ - name: "analyze"
696
+ type: "boolean"
697
+ default: true
698
+ description: "Whether analysis was performed during parsing."
699
+
700
+ - name: "arena_stats"
701
+ type: "boolean"
702
+ const_name: "CAPTURE_ARENA_STATS"
703
+ default: false
704
+ only: ["ruby"]
705
+ description: "Whether arena allocation statistics were captured during parsing."
706
+
707
+ - name: "dot_notation_tags"
708
+ type: "boolean"
709
+ default: false
710
+ description: "Whether dot-notation component tags (e.g. Dialog.Button) are parsed as HTML elements."
711
+
712
+ - name: "erb_openers"
713
+ type: "string_array"
714
+ c_name: "erb_openers"
715
+ count_name: "erb_opener_count"
716
+ lex: true
717
+ skip: ["java"]
718
+ description: "ERB tag openers recognized in addition to the built-in ones, written without the leading `<%`."
719
+
720
+ - name: "herb_directives"
721
+ type: "boolean"
722
+ default: false
723
+ description: "Whether `<%# herb: %>` directive nodes were parsed during parsing."
724
+
725
+ - name: "html"
726
+ type: "boolean"
727
+ default: true
728
+ description: "Whether HTML tag parsing is enabled during parsing. When false, HTML-like content is treated as literal text."
729
+
730
+ - name: "iteration_nodes"
731
+ type: "boolean"
732
+ default: false
733
+ description: "Whether iteration nodes were parsed during parsing."
734
+
735
+ - name: "max_errors"
736
+ type: "uint32"
737
+ default: 25
738
+ nullable: true
739
+ null_sentinel: 0
740
+ description: "Maximum number of errors to report. nil/null means unlimited."
741
+
742
+ - name: "prism_nodes"
743
+ type: "boolean"
744
+ default: false
745
+ description: "Whether Prism node serialization was enabled during parsing."
746
+
747
+ - name: "prism_nodes_deep"
748
+ type: "boolean"
749
+ default: false
750
+ description: "Whether deep Prism node serialization was enabled during parsing."
751
+
752
+ - name: "prism_program"
753
+ type: "boolean"
754
+ default: false
755
+ description: "Whether the full Prism ProgramNode was serialized on the DocumentNode."
756
+
757
+ - name: "render_nodes"
758
+ type: "boolean"
759
+ default: false
760
+ description: "Whether ActionView render call detection was enabled during parsing."
761
+
762
+ - name: "strict"
763
+ type: "boolean"
764
+ default: true
765
+ description: "Whether strict mode was enabled during parsing."
766
+
767
+ - name: "strict_locals"
768
+ type: "boolean"
769
+ default: false
770
+ description: "Whether strict locals analysis was enabled during parsing."
771
+
772
+ - name: "timeout"
773
+ type: "uint32"
774
+ c_name: "timeout_ms"
775
+ default_ms: 1000
776
+ ruby_unit: "seconds"
777
+ description: "Parse timeout in milliseconds. 0 disables the timeout."
778
+
779
+ - name: "track_locations"
780
+ type: "boolean"
781
+ default: true
782
+ description: "Whether `location` and `range` were materialized during parsing."
783
+
784
+ - name: "track_whitespace"
785
+ type: "boolean"
786
+ default: false
787
+ description: "Whether whitespace tracking was enabled during parsing."
788
+
789
+ - name: "transform_conditionals"
790
+ type: "boolean"
791
+ default: false
792
+ description: "Whether postfix conditional transformation was enabled during parsing."
793
+
794
+ internal_fields:
795
+ - name: "deadline_ms"
796
+ type: "uint64"
797
+ default: 0
798
+
799
+ - name: "error_count"
800
+ type: "pointer_uint32"
801
+
802
+ - name: "start_column"
803
+ type: "uint32"
804
+ default: 0
805
+
806
+ - name: "start_line"
807
+ type: "uint32"
808
+ default: 0
809
+
503
810
  nodes:
504
811
  # fields:
505
812
  # - name: type
@@ -523,365 +830,382 @@ nodes:
523
830
  # # type: range
524
831
 
525
832
  types:
526
- - name: DocumentNode
833
+ - name: "DocumentNode"
527
834
  fields:
528
- - name: children
529
- type: array
530
- kind: Node
835
+ - name: "children"
836
+ type: "array"
837
+ kind: "Node"
531
838
 
532
- - name: prism_context
533
- type: prism_context
839
+ - name: "prism_context"
840
+ type: "prism_context"
534
841
 
535
- - name: prism_node
536
- type: prism_node
842
+ - name: "prism_node"
843
+ type: "prism_node"
537
844
 
538
- - name: LiteralNode
845
+ - name: "LiteralNode"
539
846
  fields:
540
- - name: content
541
- type: string
847
+ - name: "content"
848
+ type: "string"
542
849
 
543
- - name: HTMLOpenTagNode
850
+ - name: "HTMLOpenTagNode"
544
851
  fields:
545
- - name: tag_opening
546
- type: token
852
+ - name: "tag_opening"
853
+ type: "token"
547
854
 
548
- - name: tag_name
549
- type: token
855
+ - name: "tag_name"
856
+ type: "token"
550
857
 
551
- - name: tag_closing
552
- type: token
858
+ - name: "tag_closing"
859
+ type: "token"
553
860
 
554
- - name: children
555
- type: array
556
- kind: Node
861
+ - name: "children"
862
+ type: "array"
863
+ kind: "Node"
557
864
 
558
- - name: is_void
559
- type: boolean
865
+ - name: "is_void"
866
+ type: "boolean"
560
867
 
561
- - name: HTMLConditionalOpenTagNode
868
+ - name: "HTMLConditionalOpenTagNode"
562
869
  fields:
563
- - name: conditional
564
- type: node
870
+ - name: "conditional"
871
+ type: "node"
565
872
  kind:
566
- - ERBIfNode
567
- - ERBUnlessNode
873
+ - "ERBIfNode"
874
+ - "ERBUnlessNode"
568
875
 
569
- - name: tag_name
570
- type: token
876
+ - name: "tag_name"
877
+ type: "token"
571
878
 
572
- - name: is_void
573
- type: boolean
879
+ - name: "is_void"
880
+ type: "boolean"
574
881
 
575
- - name: HTMLCloseTagNode
882
+ - name: "HTMLCloseTagNode"
576
883
  fields:
577
- - name: tag_opening
578
- type: token
884
+ - name: "tag_opening"
885
+ type: "token"
579
886
 
580
- - name: tag_name
581
- type: token
887
+ - name: "tag_name"
888
+ type: "token"
582
889
 
583
- - name: children
584
- type: array
585
- kind: WhitespaceNode
890
+ - name: "children"
891
+ type: "array"
892
+ kind: "WhitespaceNode"
586
893
 
587
- - name: tag_closing
588
- type: token
894
+ - name: "tag_closing"
895
+ type: "token"
589
896
 
590
- - name: HTMLOmittedCloseTagNode
897
+ - name: "HTMLOmittedCloseTagNode"
591
898
  fields:
592
- - name: tag_name
593
- type: token
899
+ - name: "tag_name"
900
+ type: "token"
594
901
 
595
- - name: HTMLVirtualCloseTagNode
902
+ - name: "HTMLVirtualCloseTagNode"
596
903
  fields:
597
- - name: tag_name
598
- type: token
904
+ - name: "tag_name"
905
+ type: "token"
599
906
 
600
- - name: HTMLElementNode
907
+ - name: "HTMLElementNode"
601
908
  fields:
602
- - name: open_tag
603
- type: node
909
+ - name: "open_tag"
910
+ type: "node"
604
911
  kind:
605
- - HTMLOpenTagNode
606
- - HTMLConditionalOpenTagNode
607
- - ERBOpenTagNode
912
+ - "HTMLOpenTagNode"
913
+ - "HTMLConditionalOpenTagNode"
914
+ - "ERBOpenTagNode"
608
915
 
609
- - name: tag_name
610
- type: token
916
+ - name: "tag_name"
917
+ type: "token"
611
918
 
612
- - name: body
613
- type: array
614
- kind: Node
919
+ - name: "body"
920
+ type: "array"
921
+ kind: "Node"
615
922
 
616
- - name: close_tag
617
- type: node
923
+ - name: "close_tag"
924
+ type: "node"
925
+ writable: true
618
926
  kind:
619
- - HTMLCloseTagNode
620
- - HTMLOmittedCloseTagNode
621
- - HTMLVirtualCloseTagNode
622
- - ERBEndNode
927
+ - "HTMLCloseTagNode"
928
+ - "HTMLOmittedCloseTagNode"
929
+ - "HTMLVirtualCloseTagNode"
930
+ - "ERBEndNode"
623
931
 
624
- - name: is_void
625
- type: boolean
932
+ - name: "is_void"
933
+ type: "boolean"
626
934
 
627
- - name: element_source
628
- type: element_source
935
+ - name: "element_source"
936
+ type: "element_source"
629
937
 
630
- - name: HTMLConditionalElementNode
938
+ - name: "HTMLConditionalElementNode"
631
939
  fields:
632
- - name: condition
633
- type: string
940
+ - name: "condition"
941
+ type: "string"
634
942
 
635
- - name: open_conditional
636
- type: node
943
+ - name: "open_conditional"
944
+ type: "node"
637
945
  kind:
638
- - ERBIfNode
639
- - ERBUnlessNode
946
+ - "ERBIfNode"
947
+ - "ERBUnlessNode"
640
948
 
641
- - name: open_tag
642
- type: borrowed_node
643
- kind: HTMLOpenTagNode
949
+ - name: "open_tag"
950
+ type: "borrowed_node"
951
+ kind: "HTMLOpenTagNode"
644
952
 
645
- - name: body
646
- type: array
647
- kind: Node
953
+ - name: "body"
954
+ type: "array"
955
+ kind: "Node"
648
956
 
649
- - name: close_tag
650
- type: borrowed_node
957
+ - name: "close_tag"
958
+ type: "borrowed_node"
651
959
  kind:
652
- - HTMLCloseTagNode
653
- - HTMLOmittedCloseTagNode
960
+ - "HTMLCloseTagNode"
961
+ - "HTMLOmittedCloseTagNode"
654
962
 
655
- - name: close_conditional
656
- type: node
963
+ - name: "close_conditional"
964
+ type: "node"
657
965
  kind:
658
- - ERBIfNode
659
- - ERBUnlessNode
966
+ - "ERBIfNode"
967
+ - "ERBUnlessNode"
660
968
 
661
- - name: tag_name
662
- type: token
969
+ - name: "tag_name"
970
+ type: "token"
663
971
 
664
- - name: element_source
665
- type: element_source
972
+ - name: "element_source"
973
+ type: "element_source"
666
974
 
667
- - name: HTMLAttributeValueNode
975
+ - name: "HTMLAttributeValueNode"
668
976
  fields:
669
- - name: open_quote
670
- type: token
977
+ - name: "open_quote"
978
+ type: "token"
671
979
 
672
- - name: children
673
- type: array
674
- kind: Node
980
+ - name: "children"
981
+ type: "array"
982
+ kind: "Node"
675
983
 
676
- - name: close_quote
677
- type: token
984
+ - name: "close_quote"
985
+ type: "token"
678
986
 
679
- - name: quoted
680
- type: boolean
987
+ - name: "quoted"
988
+ type: "boolean"
681
989
 
682
- - name: HTMLAttributeNameNode
990
+ - name: "HTMLAttributeNameNode"
683
991
  fields:
684
- - name: children
685
- type: array
992
+ - name: "children"
993
+ type: "array"
686
994
  kind:
687
- - LiteralNode
688
- - ERBContentNode
995
+ - "LiteralNode"
996
+ - "ERBContentNode"
997
+ - "ERBCommentNode"
689
998
 
690
- - name: HTMLAttributeNode
999
+ - name: "HTMLAttributeNode"
691
1000
  fields:
692
- - name: name
693
- type: node
694
- kind: HTMLAttributeNameNode
1001
+ - name: "name"
1002
+ type: "node"
1003
+ kind: "HTMLAttributeNameNode"
695
1004
 
696
- - name: equals
697
- type: token
1005
+ - name: "equals"
1006
+ type: "token"
698
1007
 
699
- - name: value
700
- type: node
701
- kind: HTMLAttributeValueNode
1008
+ - name: "value"
1009
+ type: "node"
1010
+ kind: "HTMLAttributeValueNode"
702
1011
 
703
- - name: RubyLiteralNode
1012
+ - name: "RubyLiteralNode"
704
1013
  fields:
705
- - name: content
706
- type: string
1014
+ - name: "content"
1015
+ type: "string"
707
1016
 
708
- - name: RubyHTMLAttributesSplatNode
1017
+ - name: "RubyHTMLAttributesSplatNode"
709
1018
  fields:
710
- - name: content
711
- type: string
1019
+ - name: "content"
1020
+ type: "string"
712
1021
 
713
- - name: prefix
714
- type: string
1022
+ - name: "prefix"
1023
+ type: "string"
715
1024
 
716
- - name: ERBOpenTagNode
1025
+ - name: "ERBOpenTagNode"
717
1026
  fields:
718
- - name: tag_opening
719
- type: token
1027
+ - name: "tag_opening"
1028
+ type: "token"
720
1029
 
721
- - name: content
722
- type: token
1030
+ - name: "content"
1031
+ type: "token"
723
1032
 
724
- - name: tag_closing
725
- type: token
1033
+ - name: "tag_closing"
1034
+ type: "token"
726
1035
 
727
- - name: tag_name
728
- type: token
1036
+ - name: "tag_name"
1037
+ type: "token"
729
1038
 
730
- - name: children
731
- type: array
732
- kind: Node
1039
+ - name: "children"
1040
+ type: "array"
1041
+ kind: "Node"
733
1042
 
734
- - name: HTMLTextNode
1043
+ - name: "HTMLTextNode"
735
1044
  fields:
736
- - name: content
737
- type: string
1045
+ - name: "content"
1046
+ type: "string"
738
1047
 
739
- - name: HTMLCommentNode
1048
+ - name: "HTMLCommentNode"
740
1049
  fields:
741
- - name: comment_start
742
- type: token
1050
+ - name: "comment_start"
1051
+ type: "token"
743
1052
 
744
- - name: children
745
- type: array
746
- kind: Node
1053
+ - name: "children"
1054
+ type: "array"
1055
+ kind: "Node"
747
1056
 
748
- - name: comment_end
749
- type: token
1057
+ - name: "comment_end"
1058
+ type: "token"
750
1059
 
751
- - name: HTMLDoctypeNode
1060
+ - name: "HTMLDoctypeNode"
752
1061
  fields:
753
- - name: tag_opening
754
- type: token
1062
+ - name: "tag_opening"
1063
+ type: "token"
755
1064
 
756
- - name: children
757
- type: array
758
- kind: Node
1065
+ - name: "children"
1066
+ type: "array"
1067
+ kind: "Node"
759
1068
 
760
- - name: tag_closing
761
- type: token
1069
+ - name: "tag_closing"
1070
+ type: "token"
762
1071
 
763
- - name: XMLDeclarationNode
1072
+ - name: "XMLDeclarationNode"
764
1073
  fields:
765
- - name: tag_opening
766
- type: token
1074
+ - name: "tag_opening"
1075
+ type: "token"
767
1076
 
768
- - name: children
769
- type: array
770
- kind: Node
1077
+ - name: "children"
1078
+ type: "array"
1079
+ kind: "Node"
771
1080
 
772
- - name: tag_closing
773
- type: token
1081
+ - name: "tag_closing"
1082
+ type: "token"
774
1083
 
775
- - name: CDATANode
1084
+ - name: "XMLProcessingInstructionNode"
776
1085
  fields:
777
- - name: tag_opening
778
- type: token
1086
+ - name: "tag_opening"
1087
+ type: "token"
1088
+
1089
+ - name: "target"
1090
+ type: "token"
779
1091
 
780
- - name: children
781
- type: array
782
- kind: Node
1092
+ - name: "children"
1093
+ type: "array"
1094
+ kind: "Node"
783
1095
 
784
- - name: tag_closing
785
- type: token
1096
+ - name: "tag_closing"
1097
+ type: "token"
786
1098
 
787
- - name: WhitespaceNode
1099
+ - name: "CDATANode"
788
1100
  fields:
789
- - name: value
790
- type: token
1101
+ - name: "tag_opening"
1102
+ type: "token"
1103
+
1104
+ - name: "children"
1105
+ type: "array"
1106
+ kind: "Node"
1107
+
1108
+ - name: "tag_closing"
1109
+ type: "token"
791
1110
 
792
- - name: ERBContentNode
1111
+ - name: "WhitespaceNode"
793
1112
  fields:
794
- - name: tag_opening
795
- type: token
1113
+ - name: "value"
1114
+ type: "token"
796
1115
 
797
- - name: content
798
- type: token
1116
+ - name: "ERBContentNode"
1117
+ fields:
1118
+ - name: "tag_opening"
1119
+ type: "token"
1120
+
1121
+ - name: "content"
1122
+ type: "token"
799
1123
 
800
- - name: tag_closing
801
- type: token
1124
+ - name: "tag_closing"
1125
+ type: "token"
802
1126
 
803
- - name: analyzed_ruby
804
- type: analyzed_ruby
1127
+ - name: "analyzed_ruby"
1128
+ type: "analyzed_ruby"
805
1129
 
806
- - name: parsed
807
- type: boolean
1130
+ - name: "parsed"
1131
+ type: "boolean"
808
1132
 
809
- - name: valid
810
- type: boolean
1133
+ - name: "valid"
1134
+ type: "boolean"
811
1135
 
812
- - name: prism_node
813
- type: prism_node
1136
+ - name: "prism_node"
1137
+ type: "prism_node"
814
1138
 
815
- - name: ERBEndNode
1139
+ - name: "ERBEndNode"
816
1140
  fields:
817
- - name: tag_opening
818
- type: token
1141
+ - name: "tag_opening"
1142
+ type: "token"
819
1143
 
820
- - name: content
821
- type: token
1144
+ - name: "content"
1145
+ type: "token"
822
1146
 
823
- - name: tag_closing
824
- type: token
1147
+ - name: "tag_closing"
1148
+ type: "token"
825
1149
 
826
- - name: ERBElseNode
1150
+ - name: "ERBElseNode"
827
1151
  fields:
828
- - name: tag_opening
829
- type: token
1152
+ - name: "tag_opening"
1153
+ type: "token"
830
1154
 
831
- - name: content
832
- type: token
1155
+ - name: "content"
1156
+ type: "token"
833
1157
 
834
- - name: tag_closing
835
- type: token
1158
+ - name: "tag_closing"
1159
+ type: "token"
836
1160
 
837
- - name: statements
838
- type: array
839
- kind: Node
1161
+ - name: "statements"
1162
+ type: "array"
1163
+ kind: "Node"
840
1164
 
841
- - name: ERBIfNode
1165
+ - name: "ERBIfNode"
842
1166
  fields:
843
- - name: tag_opening
844
- type: token
1167
+ - name: "tag_opening"
1168
+ type: "token"
845
1169
 
846
- - name: content
847
- type: token
1170
+ - name: "content"
1171
+ type: "token"
848
1172
 
849
- - name: tag_closing
850
- type: token
1173
+ - name: "tag_closing"
1174
+ type: "token"
851
1175
 
852
- - name: then_keyword
853
- type: location
1176
+ - name: "then_keyword"
1177
+ type: "location"
854
1178
 
855
1179
  # - name: predicate
856
1180
  # type: prism_node
857
1181
 
858
- - name: prism_node
859
- type: prism_node
1182
+ - name: "prism_node"
1183
+ type: "prism_node"
860
1184
 
861
- - name: statements
862
- type: array
863
- kind: Node
1185
+ - name: "statements"
1186
+ type: "array"
1187
+ kind: "Node"
864
1188
 
865
- - name: subsequent
866
- type: node
1189
+ - name: "subsequent"
1190
+ type: "node"
867
1191
  kind:
868
- - ERBIfNode
869
- - ERBElseNode
1192
+ - "ERBIfNode"
1193
+ - "ERBElseNode"
870
1194
 
871
- - name: end_node
872
- type: node
873
- kind: ERBEndNode
1195
+ - name: "end_node"
1196
+ type: "node"
1197
+ kind: "ERBEndNode"
874
1198
 
875
- - name: ERBBlockNode
1199
+ - name: "ERBBlockNode"
876
1200
  fields:
877
- - name: tag_opening
878
- type: token
1201
+ - name: "tag_opening"
1202
+ type: "token"
879
1203
 
880
- - name: content
881
- type: token
1204
+ - name: "content"
1205
+ type: "token"
882
1206
 
883
- - name: tag_closing
884
- type: token
1207
+ - name: "tag_closing"
1208
+ type: "token"
885
1209
 
886
1210
  # - name: block_type
887
1211
  # type: string
@@ -889,182 +1213,238 @@ nodes:
889
1213
  # - name: opener
890
1214
  # type: prism_node
891
1215
 
892
- - name: prism_node
893
- type: prism_node
1216
+ - name: "prism_node"
1217
+ type: "prism_node"
894
1218
 
895
- - name: body
896
- type: array
897
- kind: Node
1219
+ - name: "body"
1220
+ type: "array"
1221
+ kind: "Node"
898
1222
 
899
- - name: block_arguments
900
- type: array
1223
+ - name: "block_arguments"
1224
+ type: "array"
901
1225
  kind:
902
- - RubyParameterNode
1226
+ - "RubyParameterNode"
903
1227
 
904
- - name: rescue_clause
905
- type: node
906
- kind: ERBRescueNode
1228
+ - name: "rescue_clause"
1229
+ type: "node"
1230
+ kind: "ERBRescueNode"
907
1231
 
908
- - name: else_clause
909
- type: node
910
- kind: ERBElseNode
1232
+ - name: "else_clause"
1233
+ type: "node"
1234
+ kind: "ERBElseNode"
911
1235
 
912
- - name: ensure_clause
913
- type: node
914
- kind: ERBEnsureNode
1236
+ - name: "ensure_clause"
1237
+ type: "node"
1238
+ kind: "ERBEnsureNode"
915
1239
 
916
- - name: end_node
917
- type: node
918
- kind: ERBEndNode
1240
+ - name: "end_node"
1241
+ type: "node"
1242
+ kind: "ERBEndNode"
919
1243
 
920
- - name: ERBWhenNode
1244
+ - name: "ERBIterationBlockNode"
921
1245
  fields:
922
- - name: tag_opening
923
- type: token
1246
+ - name: "tag_opening"
1247
+ type: "token"
1248
+
1249
+ - name: "content"
1250
+ type: "token"
1251
+
1252
+ - name: "tag_closing"
1253
+ type: "token"
1254
+
1255
+ - name: "prism_node"
1256
+ type: "prism_node"
1257
+
1258
+ - name: "receiver"
1259
+ type: "token"
1260
+
1261
+ - name: "call_operator"
1262
+ type: "token"
1263
+
1264
+ - name: "message"
1265
+ type: "token"
1266
+
1267
+ - name: "arguments"
1268
+ type: "array"
1269
+ kind:
1270
+ - "RubyLiteralNode"
1271
+
1272
+ - name: "block_opening"
1273
+ type: "token"
1274
+
1275
+ - name: "body"
1276
+ type: "array"
1277
+ kind: "Node"
1278
+
1279
+ - name: "block_arguments"
1280
+ type: "array"
1281
+ kind:
1282
+ - "RubyParameterNode"
1283
+
1284
+ - name: "rescue_clause"
1285
+ type: "node"
1286
+ kind: "ERBRescueNode"
924
1287
 
925
- - name: content
926
- type: token
1288
+ - name: "else_clause"
1289
+ type: "node"
1290
+ kind: "ERBElseNode"
927
1291
 
928
- - name: tag_closing
929
- type: token
1292
+ - name: "ensure_clause"
1293
+ type: "node"
1294
+ kind: "ERBEnsureNode"
930
1295
 
931
- - name: then_keyword
932
- type: location
1296
+ - name: "end_node"
1297
+ type: "node"
1298
+ kind: "ERBEndNode"
1299
+
1300
+ - name: "ERBWhenNode"
1301
+ fields:
1302
+ - name: "tag_opening"
1303
+ type: "token"
1304
+
1305
+ - name: "content"
1306
+ type: "token"
1307
+
1308
+ - name: "tag_closing"
1309
+ type: "token"
1310
+
1311
+ - name: "then_keyword"
1312
+ type: "location"
933
1313
 
934
1314
  # - name: conditions
935
1315
  # type: array
936
1316
  # kind: prism_node
937
1317
 
938
- - name: statements
939
- type: array
940
- kind: Node
1318
+ - name: "statements"
1319
+ type: "array"
1320
+ kind: "Node"
941
1321
 
942
- - name: ERBCaseNode
1322
+ - name: "ERBCaseNode"
943
1323
  fields:
944
- - name: tag_opening
945
- type: token
1324
+ - name: "tag_opening"
1325
+ type: "token"
946
1326
 
947
- - name: content
948
- type: token
1327
+ - name: "content"
1328
+ type: "token"
949
1329
 
950
- - name: tag_closing
951
- type: token
1330
+ - name: "tag_closing"
1331
+ type: "token"
952
1332
 
953
- - name: children
954
- type: array
955
- kind: Node
1333
+ - name: "children"
1334
+ type: "array"
1335
+ kind: "Node"
956
1336
 
957
1337
  # - name: predicate
958
1338
  # type: prism_node
959
1339
 
960
- - name: prism_node
961
- type: prism_node
1340
+ - name: "prism_node"
1341
+ type: "prism_node"
962
1342
 
963
- - name: conditions
964
- type: array
965
- kind: ERBWhenNode
1343
+ - name: "conditions"
1344
+ type: "array"
1345
+ kind: "ERBWhenNode"
966
1346
 
967
- - name: else_clause
968
- type: node
969
- kind: ERBElseNode
1347
+ - name: "else_clause"
1348
+ type: "node"
1349
+ kind: "ERBElseNode"
970
1350
 
971
- - name: end_node
972
- type: node
973
- kind: ERBEndNode
1351
+ - name: "end_node"
1352
+ type: "node"
1353
+ kind: "ERBEndNode"
974
1354
 
975
- - name: ERBCaseMatchNode
1355
+ - name: "ERBCaseMatchNode"
976
1356
  fields:
977
- - name: tag_opening
978
- type: token
1357
+ - name: "tag_opening"
1358
+ type: "token"
979
1359
 
980
- - name: content
981
- type: token
1360
+ - name: "content"
1361
+ type: "token"
982
1362
 
983
- - name: tag_closing
984
- type: token
1363
+ - name: "tag_closing"
1364
+ type: "token"
985
1365
 
986
- - name: children
987
- type: array
988
- kind: Node
1366
+ - name: "children"
1367
+ type: "array"
1368
+ kind: "Node"
989
1369
 
990
1370
  # - name: predicate
991
1371
  # type: prism_node
992
1372
 
993
- - name: prism_node
994
- type: prism_node
1373
+ - name: "prism_node"
1374
+ type: "prism_node"
995
1375
 
996
- - name: conditions
997
- type: array
998
- kind: ERBInNode
1376
+ - name: "conditions"
1377
+ type: "array"
1378
+ kind: "ERBInNode"
999
1379
 
1000
- - name: else_clause
1001
- type: node
1002
- kind: ERBElseNode
1380
+ - name: "else_clause"
1381
+ type: "node"
1382
+ kind: "ERBElseNode"
1003
1383
 
1004
- - name: end_node
1005
- type: node
1006
- kind: ERBEndNode
1384
+ - name: "end_node"
1385
+ type: "node"
1386
+ kind: "ERBEndNode"
1007
1387
 
1008
- - name: ERBWhileNode
1388
+ - name: "ERBWhileNode"
1009
1389
  fields:
1010
- - name: tag_opening
1011
- type: token
1390
+ - name: "tag_opening"
1391
+ type: "token"
1012
1392
 
1013
- - name: content
1014
- type: token
1393
+ - name: "content"
1394
+ type: "token"
1015
1395
 
1016
- - name: tag_closing
1017
- type: token
1396
+ - name: "tag_closing"
1397
+ type: "token"
1018
1398
 
1019
1399
  # - name: predicate
1020
1400
  # type: prism_node
1021
1401
 
1022
- - name: prism_node
1023
- type: prism_node
1402
+ - name: "prism_node"
1403
+ type: "prism_node"
1024
1404
 
1025
- - name: statements
1026
- type: array
1027
- kind: Node
1405
+ - name: "statements"
1406
+ type: "array"
1407
+ kind: "Node"
1028
1408
 
1029
- - name: end_node
1030
- type: node
1031
- kind: ERBEndNode
1409
+ - name: "end_node"
1410
+ type: "node"
1411
+ kind: "ERBEndNode"
1032
1412
 
1033
- - name: ERBUntilNode
1413
+ - name: "ERBUntilNode"
1034
1414
  fields:
1035
- - name: tag_opening
1036
- type: token
1415
+ - name: "tag_opening"
1416
+ type: "token"
1037
1417
 
1038
- - name: content
1039
- type: token
1418
+ - name: "content"
1419
+ type: "token"
1040
1420
 
1041
- - name: tag_closing
1042
- type: token
1421
+ - name: "tag_closing"
1422
+ type: "token"
1043
1423
 
1044
1424
  # - name: predicate
1045
1425
  # type: prism_node
1046
1426
 
1047
- - name: prism_node
1048
- type: prism_node
1427
+ - name: "prism_node"
1428
+ type: "prism_node"
1049
1429
 
1050
- - name: statements
1051
- type: array
1052
- kind: Node
1430
+ - name: "statements"
1431
+ type: "array"
1432
+ kind: "Node"
1053
1433
 
1054
- - name: end_node
1055
- type: node
1056
- kind: ERBEndNode
1434
+ - name: "end_node"
1435
+ type: "node"
1436
+ kind: "ERBEndNode"
1057
1437
 
1058
- - name: ERBForNode
1438
+ - name: "ERBForNode"
1059
1439
  fields:
1060
- - name: tag_opening
1061
- type: token
1440
+ - name: "tag_opening"
1441
+ type: "token"
1062
1442
 
1063
- - name: content
1064
- type: token
1443
+ - name: "content"
1444
+ type: "token"
1065
1445
 
1066
- - name: tag_closing
1067
- type: token
1446
+ - name: "tag_closing"
1447
+ type: "token"
1068
1448
 
1069
1449
  # - name: index
1070
1450
  # type: prism_node
@@ -1072,27 +1452,27 @@ nodes:
1072
1452
  # - name: collection
1073
1453
  # type: prism_node
1074
1454
 
1075
- - name: prism_node
1076
- type: prism_node
1455
+ - name: "prism_node"
1456
+ type: "prism_node"
1077
1457
 
1078
- - name: statements
1079
- type: array
1080
- kind: Node
1458
+ - name: "statements"
1459
+ type: "array"
1460
+ kind: "Node"
1081
1461
 
1082
- - name: end_node
1083
- type: node
1084
- kind: ERBEndNode
1462
+ - name: "end_node"
1463
+ type: "node"
1464
+ kind: "ERBEndNode"
1085
1465
 
1086
- - name: ERBRescueNode
1466
+ - name: "ERBRescueNode"
1087
1467
  fields:
1088
- - name: tag_opening
1089
- type: token
1468
+ - name: "tag_opening"
1469
+ type: "token"
1090
1470
 
1091
- - name: content
1092
- type: token
1471
+ - name: "content"
1472
+ type: "token"
1093
1473
 
1094
- - name: tag_closing
1095
- type: token
1474
+ - name: "tag_closing"
1475
+ type: "token"
1096
1476
 
1097
1477
  # - name: exceptions
1098
1478
  # type: array
@@ -1101,270 +1481,340 @@ nodes:
1101
1481
  # - name: reference
1102
1482
  # type: prism_node
1103
1483
 
1104
- - name: statements
1105
- type: array
1106
- kind: Node
1484
+ - name: "statements"
1485
+ type: "array"
1486
+ kind: "Node"
1107
1487
 
1108
- - name: subsequent
1109
- type: node
1110
- kind: ERBRescueNode
1488
+ - name: "subsequent"
1489
+ type: "node"
1490
+ kind: "ERBRescueNode"
1111
1491
 
1112
- - name: ERBEnsureNode
1492
+ - name: "ERBEnsureNode"
1113
1493
  fields:
1114
- - name: tag_opening
1115
- type: token
1494
+ - name: "tag_opening"
1495
+ type: "token"
1116
1496
 
1117
- - name: content
1118
- type: token
1497
+ - name: "content"
1498
+ type: "token"
1119
1499
 
1120
- - name: tag_closing
1121
- type: token
1500
+ - name: "tag_closing"
1501
+ type: "token"
1122
1502
 
1123
- - name: statements
1124
- type: array
1125
- kind: Node
1503
+ - name: "statements"
1504
+ type: "array"
1505
+ kind: "Node"
1126
1506
 
1127
- - name: ERBBeginNode
1507
+ - name: "ERBBeginNode"
1128
1508
  fields:
1129
- - name: tag_opening
1130
- type: token
1509
+ - name: "tag_opening"
1510
+ type: "token"
1131
1511
 
1132
- - name: content
1133
- type: token
1512
+ - name: "content"
1513
+ type: "token"
1134
1514
 
1135
- - name: tag_closing
1136
- type: token
1515
+ - name: "tag_closing"
1516
+ type: "token"
1137
1517
 
1138
- - name: prism_node
1139
- type: prism_node
1518
+ - name: "prism_node"
1519
+ type: "prism_node"
1140
1520
 
1141
- - name: statements
1142
- type: array
1143
- kind: Node
1521
+ - name: "statements"
1522
+ type: "array"
1523
+ kind: "Node"
1144
1524
 
1145
- - name: rescue_clause
1146
- type: node
1147
- kind: ERBRescueNode
1525
+ - name: "rescue_clause"
1526
+ type: "node"
1527
+ kind: "ERBRescueNode"
1148
1528
 
1149
- - name: else_clause
1150
- type: node
1151
- kind: ERBElseNode
1529
+ - name: "else_clause"
1530
+ type: "node"
1531
+ kind: "ERBElseNode"
1152
1532
 
1153
- - name: ensure_clause
1154
- type: node
1155
- kind: ERBEnsureNode
1533
+ - name: "ensure_clause"
1534
+ type: "node"
1535
+ kind: "ERBEnsureNode"
1156
1536
 
1157
- - name: end_node
1158
- type: node
1159
- kind: ERBEndNode
1537
+ - name: "end_node"
1538
+ type: "node"
1539
+ kind: "ERBEndNode"
1160
1540
 
1161
- - name: ERBUnlessNode
1541
+ - name: "ERBUnlessNode"
1162
1542
  fields:
1163
- - name: tag_opening
1164
- type: token
1543
+ - name: "tag_opening"
1544
+ type: "token"
1165
1545
 
1166
- - name: content
1167
- type: token
1546
+ - name: "content"
1547
+ type: "token"
1168
1548
 
1169
- - name: tag_closing
1170
- type: token
1549
+ - name: "tag_closing"
1550
+ type: "token"
1171
1551
 
1172
- - name: then_keyword
1173
- type: location
1552
+ - name: "then_keyword"
1553
+ type: "location"
1174
1554
 
1175
1555
  # - name: predicate
1176
1556
  # type: prism_node
1177
1557
 
1178
- - name: prism_node
1179
- type: prism_node
1558
+ - name: "prism_node"
1559
+ type: "prism_node"
1180
1560
 
1181
- - name: statements
1182
- type: array
1183
- kind: Node
1561
+ - name: "statements"
1562
+ type: "array"
1563
+ kind: "Node"
1184
1564
 
1185
- - name: else_clause
1186
- type: node
1187
- kind: ERBElseNode
1565
+ - name: "else_clause"
1566
+ type: "node"
1567
+ kind: "ERBElseNode"
1188
1568
 
1189
- - name: end_node
1190
- type: node
1191
- kind: ERBEndNode
1569
+ - name: "end_node"
1570
+ type: "node"
1571
+ kind: "ERBEndNode"
1192
1572
 
1193
- - name: RubyRenderLocalNode
1573
+ - name: "RubyRenderLocalNode"
1194
1574
  fields:
1195
- - name: name
1196
- type: token
1575
+ - name: "name"
1576
+ type: "token"
1197
1577
 
1198
- - name: value
1199
- type: node
1200
- kind: RubyLiteralNode
1578
+ - name: "value"
1579
+ type: "node"
1580
+ kind: "RubyLiteralNode"
1201
1581
 
1202
- - name: RubyRenderKeywordsNode
1582
+ - name: "RubyRenderKeywordsNode"
1203
1583
  fields:
1204
- - name: partial
1205
- type: token
1584
+ - name: "partial"
1585
+ type: "token"
1586
+
1587
+ - name: "template_path"
1588
+ type: "token"
1206
1589
 
1207
- - name: template_path
1208
- type: token
1590
+ - name: "layout"
1591
+ type: "token"
1209
1592
 
1210
- - name: layout
1211
- type: token
1593
+ - name: "file"
1594
+ type: "token"
1212
1595
 
1213
- - name: file
1214
- type: token
1596
+ - name: "inline_template"
1597
+ type: "token"
1215
1598
 
1216
- - name: inline_template
1217
- type: token
1599
+ - name: "body"
1600
+ type: "token"
1218
1601
 
1219
- - name: body
1220
- type: token
1602
+ - name: "plain"
1603
+ type: "token"
1221
1604
 
1222
- - name: plain
1223
- type: token
1605
+ - name: "html"
1606
+ type: "token"
1224
1607
 
1225
- - name: html
1226
- type: token
1608
+ - name: "renderable"
1609
+ type: "token"
1227
1610
 
1228
- - name: renderable
1229
- type: token
1611
+ - name: "collection"
1612
+ type: "token"
1230
1613
 
1231
- - name: collection
1232
- type: token
1614
+ - name: "object"
1615
+ type: "token"
1233
1616
 
1234
- - name: object
1235
- type: token
1617
+ - name: "as_name"
1618
+ type: "token"
1236
1619
 
1237
- - name: as_name
1238
- type: token
1620
+ - name: "spacer_template"
1621
+ type: "token"
1239
1622
 
1240
- - name: spacer_template
1241
- type: token
1623
+ - name: "formats"
1624
+ type: "token"
1242
1625
 
1243
- - name: formats
1244
- type: token
1626
+ - name: "variants"
1627
+ type: "token"
1245
1628
 
1246
- - name: variants
1247
- type: token
1629
+ - name: "handlers"
1630
+ type: "token"
1248
1631
 
1249
- - name: handlers
1250
- type: token
1632
+ - name: "content_type"
1633
+ type: "token"
1251
1634
 
1252
- - name: content_type
1253
- type: token
1635
+ - name: "locals"
1636
+ type: "array"
1637
+ kind:
1638
+ - "RubyRenderLocalNode"
1254
1639
 
1255
- - name: locals
1256
- type: array
1640
+ - name: "state"
1641
+ type: "array"
1257
1642
  kind:
1258
- - RubyRenderLocalNode
1643
+ - "HerbStateDeclarationNode"
1644
+
1645
+ - name: "state_location"
1646
+ type: "location"
1259
1647
 
1260
- - name: ERBRenderNode
1648
+ - name: "ERBRenderNode"
1261
1649
  fields:
1262
- - name: tag_opening
1263
- type: token
1650
+ - name: "tag_opening"
1651
+ type: "token"
1264
1652
 
1265
- - name: content
1266
- type: token
1653
+ - name: "content"
1654
+ type: "token"
1267
1655
 
1268
- - name: tag_closing
1269
- type: token
1656
+ - name: "tag_closing"
1657
+ type: "token"
1270
1658
 
1271
- - name: analyzed_ruby
1272
- type: analyzed_ruby
1659
+ - name: "analyzed_ruby"
1660
+ type: "analyzed_ruby"
1273
1661
 
1274
- - name: prism_node
1275
- type: prism_node
1662
+ - name: "prism_node"
1663
+ type: "prism_node"
1276
1664
 
1277
- - name: keywords
1278
- type: node
1279
- kind: RubyRenderKeywordsNode
1665
+ - name: "keywords"
1666
+ type: "node"
1667
+ kind: "RubyRenderKeywordsNode"
1280
1668
 
1281
- - name: body
1282
- type: array
1283
- kind: Node
1669
+ - name: "body"
1670
+ type: "array"
1671
+ kind: "Node"
1284
1672
 
1285
- - name: block_arguments
1286
- type: array
1673
+ - name: "block_arguments"
1674
+ type: "array"
1287
1675
  kind:
1288
- - RubyParameterNode
1676
+ - "RubyParameterNode"
1289
1677
 
1290
- - name: rescue_clause
1291
- type: node
1292
- kind: ERBRescueNode
1678
+ - name: "rescue_clause"
1679
+ type: "node"
1680
+ kind: "ERBRescueNode"
1293
1681
 
1294
- - name: else_clause
1295
- type: node
1296
- kind: ERBElseNode
1682
+ - name: "else_clause"
1683
+ type: "node"
1684
+ kind: "ERBElseNode"
1297
1685
 
1298
- - name: ensure_clause
1299
- type: node
1300
- kind: ERBEnsureNode
1686
+ - name: "ensure_clause"
1687
+ type: "node"
1688
+ kind: "ERBEnsureNode"
1301
1689
 
1302
- - name: end_node
1303
- type: node
1304
- kind: ERBEndNode
1690
+ - name: "end_node"
1691
+ type: "node"
1692
+ kind: "ERBEndNode"
1305
1693
 
1306
- - name: RubyParameterNode
1694
+ - name: "RubyParameterNode"
1307
1695
  fields:
1308
- - name: name
1309
- type: token
1696
+ - name: "name"
1697
+ type: "token"
1310
1698
 
1311
- - name: default_value
1312
- type: node
1313
- kind: RubyLiteralNode
1699
+ - name: "default_value"
1700
+ type: "node"
1701
+ kind: "RubyLiteralNode"
1314
1702
 
1315
- - name: kind
1316
- type: string
1703
+ - name: "kind"
1704
+ type: "string"
1317
1705
 
1318
- - name: required
1319
- type: boolean
1706
+ - name: "required"
1707
+ type: "boolean"
1320
1708
 
1321
- - name: ERBStrictLocalsNode
1709
+ - name: "ERBStrictLocalsNode"
1322
1710
  fields:
1323
- - name: tag_opening
1324
- type: token
1711
+ - name: "tag_opening"
1712
+ type: "token"
1325
1713
 
1326
- - name: content
1327
- type: token
1714
+ - name: "content"
1715
+ type: "token"
1328
1716
 
1329
- - name: tag_closing
1330
- type: token
1717
+ - name: "tag_closing"
1718
+ type: "token"
1331
1719
 
1332
- - name: analyzed_ruby
1333
- type: analyzed_ruby
1720
+ - name: "analyzed_ruby"
1721
+ type: "analyzed_ruby"
1334
1722
 
1335
- - name: prism_node
1336
- type: prism_node
1723
+ - name: "prism_node"
1724
+ type: "prism_node"
1337
1725
 
1338
- - name: locals
1339
- type: array
1726
+ - name: "locals"
1727
+ type: "array"
1340
1728
  kind:
1341
- - RubyParameterNode
1729
+ - "RubyParameterNode"
1730
+
1731
+ - name: "ERBYieldNode"
1732
+ fields:
1733
+ - name: "tag_opening"
1734
+ type: "token"
1735
+
1736
+ - name: "content"
1737
+ type: "token"
1738
+
1739
+ - name: "tag_closing"
1740
+ type: "token"
1741
+
1742
+ - name: "ERBInNode"
1743
+ fields:
1744
+ - name: "tag_opening"
1745
+ type: "token"
1746
+
1747
+ - name: "content"
1748
+ type: "token"
1342
1749
 
1343
- - name: ERBYieldNode
1750
+ - name: "tag_closing"
1751
+ type: "token"
1752
+
1753
+ - name: "then_keyword"
1754
+ type: "location"
1755
+
1756
+ - name: "statements"
1757
+ type: "array"
1758
+ kind: "Node"
1759
+
1760
+ - name: "HerbDirectiveNode"
1344
1761
  fields:
1345
- - name: tag_opening
1346
- type: token
1762
+ - name: "tag_opening"
1763
+ type: "token"
1764
+
1765
+ - name: "content"
1766
+ type: "token"
1347
1767
 
1348
- - name: content
1349
- type: token
1768
+ - name: "tag_closing"
1769
+ type: "token"
1350
1770
 
1351
- - name: tag_closing
1352
- type: token
1771
+ - name: "key"
1772
+ type: "token"
1353
1773
 
1354
- - name: ERBInNode
1774
+ - name: "arguments"
1775
+ type: "token"
1776
+
1777
+ - name: "HerbStateDeclarationNode"
1355
1778
  fields:
1356
- - name: tag_opening
1357
- type: token
1779
+ - name: "name"
1780
+ type: "token"
1781
+
1782
+ - name: "default_value"
1783
+ type: "node"
1784
+ kind: "RubyLiteralNode"
1358
1785
 
1359
- - name: content
1360
- type: token
1786
+ - name: "kind"
1787
+ type: "string"
1788
+
1789
+ - name: "HerbStateDirectiveNode"
1790
+ fields:
1791
+ - name: "tag_opening"
1792
+ type: "token"
1361
1793
 
1362
- - name: tag_closing
1363
- type: token
1794
+ - name: "content"
1795
+ type: "token"
1796
+
1797
+ - name: "tag_closing"
1798
+ type: "token"
1799
+
1800
+ - name: "key"
1801
+ type: "token"
1802
+
1803
+ - name: "signature"
1804
+ type: "token"
1805
+
1806
+ - name: "states"
1807
+ type: "array"
1808
+ kind:
1809
+ - "HerbStateDeclarationNode"
1810
+
1811
+ - name: "ERBCommentNode"
1812
+ fields:
1813
+ - name: "tag_opening"
1814
+ type: "token"
1364
1815
 
1365
- - name: then_keyword
1366
- type: location
1816
+ - name: "content"
1817
+ type: "token"
1367
1818
 
1368
- - name: statements
1369
- type: array
1370
- kind: Node
1819
+ - name: "tag_closing"
1820
+ type: "token"