herb 0.10.1 → 0.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (793) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +17 -7
  3. data/README.md +36 -119
  4. data/Rakefile +2 -11
  5. data/config/action_view_helpers/actioncable/action_cable_helper/action_cable_meta_tag.yml +12 -8
  6. data/config/action_view_helpers/actionpack/content_security_policy/content_security_policy?.yml +9 -6
  7. data/config/action_view_helpers/actionpack/content_security_policy/content_security_policy_nonce.yml +9 -6
  8. data/config/action_view_helpers/actionpack/polymorphic_routes/polymorphic_path.yml +20 -12
  9. data/config/action_view_helpers/actionpack/polymorphic_routes/polymorphic_url.yml +30 -18
  10. data/config/action_view_helpers/actionpack/request_forgery_protection/form_authenticity_token.yml +15 -9
  11. data/config/action_view_helpers/actionpack/request_forgery_protection/protect_against_forgery?.yml +9 -6
  12. data/config/action_view_helpers/actiontext/content_helper/render_action_text_content.yml +15 -9
  13. data/config/action_view_helpers/actiontext/content_helper/sanitize_action_text_content.yml +15 -9
  14. data/config/action_view_helpers/actiontext/tag_helper/rich_textarea_tag.yml +34 -22
  15. data/config/action_view_helpers/actionview/active_model_helper/error_message.yml +9 -6
  16. data/config/action_view_helpers/actionview/active_model_helper/error_wrapping.yml +9 -6
  17. data/config/action_view_helpers/actionview/active_model_helper/object.yml +9 -6
  18. data/config/action_view_helpers/actionview/asset_tag_helper/apply_stylesheet_media_default.yml +9 -6
  19. data/config/action_view_helpers/actionview/asset_tag_helper/audio_tag.yml +40 -27
  20. data/config/action_view_helpers/actionview/asset_tag_helper/auto_discovery_link_tag.yml +37 -23
  21. data/config/action_view_helpers/actionview/asset_tag_helper/auto_include_nonce.yml +9 -6
  22. data/config/action_view_helpers/actionview/asset_tag_helper/auto_include_nonce_for_scripts.yml +9 -6
  23. data/config/action_view_helpers/actionview/asset_tag_helper/auto_include_nonce_for_styles.yml +9 -6
  24. data/config/action_view_helpers/actionview/asset_tag_helper/favicon_link_tag.yml +32 -22
  25. data/config/action_view_helpers/actionview/asset_tag_helper/image_decoding.yml +9 -6
  26. data/config/action_view_helpers/actionview/asset_tag_helper/image_loading.yml +9 -6
  27. data/config/action_view_helpers/actionview/asset_tag_helper/image_tag.yml +67 -46
  28. data/config/action_view_helpers/actionview/asset_tag_helper/javascript_include_tag.yml +58 -39
  29. data/config/action_view_helpers/actionview/asset_tag_helper/picture_tag.yml +22 -14
  30. data/config/action_view_helpers/actionview/asset_tag_helper/preload_link_tag.yml +45 -30
  31. data/config/action_view_helpers/actionview/asset_tag_helper/preload_links_header.yml +9 -6
  32. data/config/action_view_helpers/actionview/asset_tag_helper/stylesheet_link_tag.yml +49 -30
  33. data/config/action_view_helpers/actionview/asset_tag_helper/video_tag.yml +53 -35
  34. data/config/action_view_helpers/actionview/asset_url_helper/asset_path.yml +16 -10
  35. data/config/action_view_helpers/actionview/asset_url_helper/asset_url.yml +16 -10
  36. data/config/action_view_helpers/actionview/asset_url_helper/audio_path.yml +16 -10
  37. data/config/action_view_helpers/actionview/asset_url_helper/audio_url.yml +16 -10
  38. data/config/action_view_helpers/actionview/asset_url_helper/compute_asset_extname.yml +9 -6
  39. data/config/action_view_helpers/actionview/asset_url_helper/compute_asset_host.yml +9 -6
  40. data/config/action_view_helpers/actionview/asset_url_helper/compute_asset_path.yml +9 -6
  41. data/config/action_view_helpers/actionview/asset_url_helper/font_path.yml +16 -10
  42. data/config/action_view_helpers/actionview/asset_url_helper/font_url.yml +16 -10
  43. data/config/action_view_helpers/actionview/asset_url_helper/image_path.yml +16 -10
  44. data/config/action_view_helpers/actionview/asset_url_helper/image_url.yml +16 -10
  45. data/config/action_view_helpers/actionview/asset_url_helper/javascript_path.yml +16 -10
  46. data/config/action_view_helpers/actionview/asset_url_helper/javascript_url.yml +16 -10
  47. data/config/action_view_helpers/actionview/asset_url_helper/public_compute_asset_path.yml +9 -6
  48. data/config/action_view_helpers/actionview/asset_url_helper/stylesheet_path.yml +16 -10
  49. data/config/action_view_helpers/actionview/asset_url_helper/stylesheet_url.yml +16 -10
  50. data/config/action_view_helpers/actionview/asset_url_helper/video_path.yml +16 -10
  51. data/config/action_view_helpers/actionview/asset_url_helper/video_url.yml +16 -10
  52. data/config/action_view_helpers/actionview/atom_feed_helper/atom_feed.yml +52 -27
  53. data/config/action_view_helpers/actionview/cache_helper/cache.yml +25 -15
  54. data/config/action_view_helpers/actionview/cache_helper/cache_fragment_name.yml +9 -6
  55. data/config/action_view_helpers/actionview/cache_helper/cache_if.yml +20 -12
  56. data/config/action_view_helpers/actionview/cache_helper/cache_unless.yml +20 -12
  57. data/config/action_view_helpers/actionview/cache_helper/caching_predicate.yml +9 -6
  58. data/config/action_view_helpers/actionview/cache_helper/digest_path_from_template.yml +9 -6
  59. data/config/action_view_helpers/actionview/cache_helper/fragment_for.yml +9 -6
  60. data/config/action_view_helpers/actionview/cache_helper/fragment_name_with_digest.yml +9 -6
  61. data/config/action_view_helpers/actionview/cache_helper/read_fragment_for.yml +9 -6
  62. data/config/action_view_helpers/actionview/cache_helper/uncacheable.yml +9 -6
  63. data/config/action_view_helpers/actionview/cache_helper/write_fragment_for.yml +9 -6
  64. data/config/action_view_helpers/actionview/capture_helper/capture.yml +9 -6
  65. data/config/action_view_helpers/actionview/capture_helper/content_for.yml +20 -12
  66. data/config/action_view_helpers/actionview/capture_helper/content_for_predicate.yml +15 -9
  67. data/config/action_view_helpers/actionview/capture_helper/provide.yml +15 -9
  68. data/config/action_view_helpers/actionview/capture_helper/with_output_buffer.yml +9 -6
  69. data/config/action_view_helpers/actionview/content_exfiltration_prevention_helper/prepend_content_exfiltration_prevention.yml +9 -6
  70. data/config/action_view_helpers/actionview/content_exfiltration_prevention_helper/prevent_content_exfiltration.yml +9 -6
  71. data/config/action_view_helpers/actionview/controller_helper/action_name.yml +9 -6
  72. data/config/action_view_helpers/actionview/controller_helper/assign_controller.yml +9 -6
  73. data/config/action_view_helpers/actionview/controller_helper/controller.yml +9 -6
  74. data/config/action_view_helpers/actionview/controller_helper/controller_name.yml +9 -6
  75. data/config/action_view_helpers/actionview/controller_helper/controller_path.yml +9 -6
  76. data/config/action_view_helpers/actionview/controller_helper/cookies.yml +9 -6
  77. data/config/action_view_helpers/actionview/controller_helper/flash.yml +9 -6
  78. data/config/action_view_helpers/actionview/controller_helper/headers.yml +9 -6
  79. data/config/action_view_helpers/actionview/controller_helper/logger.yml +9 -6
  80. data/config/action_view_helpers/actionview/controller_helper/params.yml +9 -6
  81. data/config/action_view_helpers/actionview/controller_helper/request.yml +9 -6
  82. data/config/action_view_helpers/actionview/controller_helper/request_forgery_protection_token.yml +9 -6
  83. data/config/action_view_helpers/actionview/controller_helper/response.yml +9 -6
  84. data/config/action_view_helpers/actionview/controller_helper/session.yml +9 -6
  85. data/config/action_view_helpers/actionview/csp_helper/csp_meta_tag.yml +18 -11
  86. data/config/action_view_helpers/actionview/csrf_helper/csrf_meta_tags.yml +16 -10
  87. data/config/action_view_helpers/actionview/date_helper/date_select.yml +85 -51
  88. data/config/action_view_helpers/actionview/date_helper/datetime_select.yml +65 -39
  89. data/config/action_view_helpers/actionview/date_helper/distance_of_time_in_words.yml +30 -18
  90. data/config/action_view_helpers/actionview/date_helper/relative_time_in_words.yml +35 -21
  91. data/config/action_view_helpers/actionview/date_helper/select_date.yml +50 -30
  92. data/config/action_view_helpers/actionview/date_helper/select_datetime.yml +65 -39
  93. data/config/action_view_helpers/actionview/date_helper/select_day.yml +40 -24
  94. data/config/action_view_helpers/actionview/date_helper/select_hour.yml +50 -30
  95. data/config/action_view_helpers/actionview/date_helper/select_minute.yml +40 -24
  96. data/config/action_view_helpers/actionview/date_helper/select_month.yml +60 -36
  97. data/config/action_view_helpers/actionview/date_helper/select_second.yml +35 -21
  98. data/config/action_view_helpers/actionview/date_helper/select_time.yml +55 -33
  99. data/config/action_view_helpers/actionview/date_helper/select_year.yml +45 -27
  100. data/config/action_view_helpers/actionview/date_helper/time_ago_in_words.yml +21 -13
  101. data/config/action_view_helpers/actionview/date_helper/time_select.yml +60 -36
  102. data/config/action_view_helpers/actionview/date_helper/time_tag.yml +32 -20
  103. data/config/action_view_helpers/actionview/debug_helper/debug.yml +15 -9
  104. data/config/action_view_helpers/actionview/form_builder/button.yml +60 -0
  105. data/config/action_view_helpers/actionview/form_builder/submit.yml +48 -0
  106. data/config/action_view_helpers/actionview/form_helper/apply_form_for_options.yml +9 -6
  107. data/config/action_view_helpers/actionview/form_helper/checkbox.yml +41 -25
  108. data/config/action_view_helpers/actionview/form_helper/color_field.yml +25 -15
  109. data/config/action_view_helpers/actionview/form_helper/date_field.yml +35 -21
  110. data/config/action_view_helpers/actionview/form_helper/datetime_field.yml +41 -25
  111. data/config/action_view_helpers/actionview/form_helper/email_field.yml +25 -15
  112. data/config/action_view_helpers/actionview/form_helper/emitted_hidden_id.yml +9 -6
  113. data/config/action_view_helpers/actionview/form_helper/fields.yml +37 -18
  114. data/config/action_view_helpers/actionview/form_helper/fields_for.yml +33 -15
  115. data/config/action_view_helpers/actionview/form_helper/file_field.yml +45 -27
  116. data/config/action_view_helpers/actionview/form_helper/form_for.yml +45 -24
  117. data/config/action_view_helpers/actionview/form_helper/form_with.yml +56 -30
  118. data/config/action_view_helpers/actionview/form_helper/form_with_generates_ids.yml +9 -6
  119. data/config/action_view_helpers/actionview/form_helper/form_with_generates_remote_forms.yml +9 -6
  120. data/config/action_view_helpers/actionview/form_helper/hidden_field.yml +25 -15
  121. data/config/action_view_helpers/actionview/form_helper/label.yml +52 -27
  122. data/config/action_view_helpers/actionview/form_helper/month_field.yml +25 -15
  123. data/config/action_view_helpers/actionview/form_helper/multipart.yml +9 -6
  124. data/config/action_view_helpers/actionview/form_helper/multiple_file_field_include_hidden.yml +9 -6
  125. data/config/action_view_helpers/actionview/form_helper/number_field.yml +45 -27
  126. data/config/action_view_helpers/actionview/form_helper/password_field.yml +25 -15
  127. data/config/action_view_helpers/actionview/form_helper/radio_button.yml +30 -18
  128. data/config/action_view_helpers/actionview/form_helper/range_field.yml +45 -27
  129. data/config/action_view_helpers/actionview/form_helper/search_field.yml +25 -15
  130. data/config/action_view_helpers/actionview/form_helper/telephone_field.yml +26 -16
  131. data/config/action_view_helpers/actionview/form_helper/text_field.yml +25 -15
  132. data/config/action_view_helpers/actionview/form_helper/textarea.yml +31 -19
  133. data/config/action_view_helpers/actionview/form_helper/time_field.yml +40 -24
  134. data/config/action_view_helpers/actionview/form_helper/url_field.yml +25 -15
  135. data/config/action_view_helpers/actionview/form_helper/week_field.yml +25 -15
  136. data/config/action_view_helpers/actionview/form_options_helper/collection_checkboxes.yml +58 -31
  137. data/config/action_view_helpers/actionview/form_options_helper/collection_radio_buttons.yml +57 -30
  138. data/config/action_view_helpers/actionview/form_options_helper/collection_select.yml +65 -39
  139. data/config/action_view_helpers/actionview/form_options_helper/grouped_collection_select.yml +65 -39
  140. data/config/action_view_helpers/actionview/form_options_helper/grouped_options_for_select.yml +35 -21
  141. data/config/action_view_helpers/actionview/form_options_helper/option_groups_from_collection_for_select.yml +40 -24
  142. data/config/action_view_helpers/actionview/form_options_helper/options_for_select.yml +20 -12
  143. data/config/action_view_helpers/actionview/form_options_helper/options_from_collection_for_select.yml +30 -18
  144. data/config/action_view_helpers/actionview/form_options_helper/select.yml +60 -36
  145. data/config/action_view_helpers/actionview/form_options_helper/time_zone_options_for_select.yml +25 -15
  146. data/config/action_view_helpers/actionview/form_options_helper/time_zone_select.yml +50 -30
  147. data/config/action_view_helpers/actionview/form_options_helper/weekday_options_for_select.yml +30 -18
  148. data/config/action_view_helpers/actionview/form_options_helper/weekday_select.yml +30 -18
  149. data/config/action_view_helpers/actionview/form_tag_helper/button_tag.yml +39 -21
  150. data/config/action_view_helpers/actionview/form_tag_helper/checkbox_tag.yml +33 -21
  151. data/config/action_view_helpers/actionview/form_tag_helper/color_field_tag.yml +26 -17
  152. data/config/action_view_helpers/actionview/form_tag_helper/date_field_tag.yml +27 -17
  153. data/config/action_view_helpers/actionview/form_tag_helper/datetime_field_tag.yml +28 -18
  154. data/config/action_view_helpers/actionview/form_tag_helper/default_enforce_utf8.yml +9 -6
  155. data/config/action_view_helpers/actionview/form_tag_helper/email_field_tag.yml +27 -17
  156. data/config/action_view_helpers/actionview/form_tag_helper/embed_authenticity_token_in_remote_forms.yml +9 -6
  157. data/config/action_view_helpers/actionview/form_tag_helper/field_id.yml +30 -18
  158. data/config/action_view_helpers/actionview/form_tag_helper/field_name.yml +30 -18
  159. data/config/action_view_helpers/actionview/form_tag_helper/field_set_tag.yml +23 -15
  160. data/config/action_view_helpers/actionview/form_tag_helper/file_field_tag.yml +35 -22
  161. data/config/action_view_helpers/actionview/form_tag_helper/form_tag.yml +38 -24
  162. data/config/action_view_helpers/actionview/form_tag_helper/hidden_field_tag.yml +27 -17
  163. data/config/action_view_helpers/actionview/form_tag_helper/image_submit_tag.yml +31 -21
  164. data/config/action_view_helpers/actionview/form_tag_helper/label_tag.yml +33 -17
  165. data/config/action_view_helpers/actionview/form_tag_helper/month_field_tag.yml +27 -17
  166. data/config/action_view_helpers/actionview/form_tag_helper/number_field_tag.yml +47 -29
  167. data/config/action_view_helpers/actionview/form_tag_helper/password_field_tag.yml +27 -17
  168. data/config/action_view_helpers/actionview/form_tag_helper/radio_button_tag.yml +32 -20
  169. data/config/action_view_helpers/actionview/form_tag_helper/range_field_tag.yml +47 -29
  170. data/config/action_view_helpers/actionview/form_tag_helper/search_field_tag.yml +27 -17
  171. data/config/action_view_helpers/actionview/form_tag_helper/select_tag.yml +47 -29
  172. data/config/action_view_helpers/actionview/form_tag_helper/submit_tag.yml +33 -21
  173. data/config/action_view_helpers/actionview/form_tag_helper/telephone_field_tag.yml +28 -18
  174. data/config/action_view_helpers/actionview/form_tag_helper/text_field_tag.yml +27 -17
  175. data/config/action_view_helpers/actionview/form_tag_helper/textarea_tag.yml +31 -20
  176. data/config/action_view_helpers/actionview/form_tag_helper/time_field_tag.yml +27 -17
  177. data/config/action_view_helpers/actionview/form_tag_helper/url_field_tag.yml +27 -17
  178. data/config/action_view_helpers/actionview/form_tag_helper/utf8_enforcer_tag.yml +9 -6
  179. data/config/action_view_helpers/actionview/form_tag_helper/week_field_tag.yml +28 -18
  180. data/config/action_view_helpers/actionview/javascript_helper/escape_javascript.yml +16 -10
  181. data/config/action_view_helpers/actionview/javascript_helper/javascript_cdata_section.yml +9 -6
  182. data/config/action_view_helpers/actionview/javascript_helper/javascript_tag.yml +41 -27
  183. data/config/action_view_helpers/actionview/number_helper/number_to_currency.yml +29 -18
  184. data/config/action_view_helpers/actionview/number_helper/number_to_human.yml +25 -15
  185. data/config/action_view_helpers/actionview/number_helper/number_to_human_size.yml +20 -12
  186. data/config/action_view_helpers/actionview/number_helper/number_to_percentage.yml +20 -12
  187. data/config/action_view_helpers/actionview/number_helper/number_to_phone.yml +33 -20
  188. data/config/action_view_helpers/actionview/number_helper/number_with_delimiter.yml +21 -13
  189. data/config/action_view_helpers/actionview/number_helper/number_with_precision.yml +25 -15
  190. data/config/action_view_helpers/actionview/output_safety_helper/raw.yml +15 -9
  191. data/config/action_view_helpers/actionview/output_safety_helper/safe_join.yml +20 -12
  192. data/config/action_view_helpers/actionview/output_safety_helper/to_sentence.yml +24 -15
  193. data/config/action_view_helpers/actionview/record_identifier/dom_class.yml +20 -12
  194. data/config/action_view_helpers/actionview/record_identifier/dom_id.yml +20 -12
  195. data/config/action_view_helpers/actionview/record_identifier/dom_target.yml +15 -9
  196. data/config/action_view_helpers/actionview/record_identifier/model_name_from_record_or_class.yml +9 -6
  197. data/config/action_view_helpers/actionview/rendering_helper/render.yml +108 -22
  198. data/config/action_view_helpers/actionview/sanitize_helper/sanitize.yml +25 -15
  199. data/config/action_view_helpers/actionview/sanitize_helper/sanitize_css.yml +15 -9
  200. data/config/action_view_helpers/actionview/sanitize_helper/sanitizer_vendor.yml +9 -6
  201. data/config/action_view_helpers/actionview/sanitize_helper/strip_links.yml +15 -9
  202. data/config/action_view_helpers/actionview/sanitize_helper/strip_tags.yml +15 -9
  203. data/config/action_view_helpers/actionview/tag_helper/cdata_section.yml +15 -9
  204. data/config/action_view_helpers/actionview/tag_helper/content_tag.yml +59 -38
  205. data/config/action_view_helpers/actionview/tag_helper/escape_once.yml +15 -9
  206. data/config/action_view_helpers/actionview/tag_helper/tag.yml +54 -31
  207. data/config/action_view_helpers/actionview/tag_helper/token_list.yml +16 -10
  208. data/config/action_view_helpers/actionview/text_helper/concat.yml +15 -9
  209. data/config/action_view_helpers/actionview/text_helper/current_cycle.yml +15 -9
  210. data/config/action_view_helpers/actionview/text_helper/cycle.yml +23 -14
  211. data/config/action_view_helpers/actionview/text_helper/excerpt.yml +33 -20
  212. data/config/action_view_helpers/actionview/text_helper/highlight.yml +37 -18
  213. data/config/action_view_helpers/actionview/text_helper/pluralize.yml +30 -18
  214. data/config/action_view_helpers/actionview/text_helper/reset_cycle.yml +15 -9
  215. data/config/action_view_helpers/actionview/text_helper/safe_concat.yml +9 -6
  216. data/config/action_view_helpers/actionview/text_helper/simple_format.yml +33 -20
  217. data/config/action_view_helpers/actionview/text_helper/truncate.yml +38 -23
  218. data/config/action_view_helpers/actionview/text_helper/word_wrap.yml +25 -15
  219. data/config/action_view_helpers/actionview/translation_helper/debug_missing_translation.yml +9 -6
  220. data/config/action_view_helpers/actionview/translation_helper/localize.yml +26 -16
  221. data/config/action_view_helpers/actionview/translation_helper/translate.yml +31 -19
  222. data/config/action_view_helpers/actionview/url_helper/button_to.yml +57 -33
  223. data/config/action_view_helpers/actionview/url_helper/button_to_generates_button_tag.yml +9 -6
  224. data/config/action_view_helpers/actionview/url_helper/current_page?.yml +25 -15
  225. data/config/action_view_helpers/actionview/url_helper/link_to.yml +76 -53
  226. data/config/action_view_helpers/actionview/url_helper/link_to_if.yml +54 -20
  227. data/config/action_view_helpers/actionview/url_helper/link_to_unless.yml +54 -20
  228. data/config/action_view_helpers/actionview/url_helper/link_to_unless_current.yml +49 -17
  229. data/config/action_view_helpers/actionview/url_helper/mail_to.yml +60 -34
  230. data/config/action_view_helpers/actionview/url_helper/phone_to.yml +40 -22
  231. data/config/action_view_helpers/actionview/url_helper/sms_to.yml +45 -25
  232. data/config/action_view_helpers/actionview/url_helper/url_for.yml +15 -9
  233. data/config/action_view_helpers/importmap-rails/importmap_tags_helper/javascript_import_module_tag.yml +32 -0
  234. data/config/action_view_helpers/importmap-rails/importmap_tags_helper/javascript_importmap_module_preload_tags.yml +39 -0
  235. data/config/action_view_helpers/importmap-rails/importmap_tags_helper/javascript_importmap_tags.yml +35 -0
  236. data/config/action_view_helpers/importmap-rails/importmap_tags_helper/javascript_inline_importmap_tag.yml +32 -0
  237. data/config/action_view_helpers/importmap-rails/importmap_tags_helper/javascript_module_preload_tag.yml +35 -0
  238. data/config/action_view_helpers/turbo-rails/drive_helper/turbo_exempts_page_from_cache.yml +9 -6
  239. data/config/action_view_helpers/turbo-rails/drive_helper/turbo_exempts_page_from_cache_tag.yml +12 -8
  240. data/config/action_view_helpers/turbo-rails/drive_helper/turbo_exempts_page_from_preview.yml +9 -6
  241. data/config/action_view_helpers/turbo-rails/drive_helper/turbo_exempts_page_from_preview_tag.yml +12 -8
  242. data/config/action_view_helpers/turbo-rails/drive_helper/turbo_page_requires_reload.yml +9 -6
  243. data/config/action_view_helpers/turbo-rails/drive_helper/turbo_page_requires_reload_tag.yml +12 -8
  244. data/config/action_view_helpers/turbo-rails/drive_helper/turbo_refresh_method_tag.yml +17 -11
  245. data/config/action_view_helpers/turbo-rails/drive_helper/turbo_refresh_scroll_tag.yml +17 -11
  246. data/config/action_view_helpers/turbo-rails/drive_helper/turbo_refreshes_with.yml +20 -12
  247. data/config/action_view_helpers/turbo-rails/frames_helper/turbo_frame_tag.yml +54 -33
  248. data/config/action_view_helpers/turbo-rails/includes_helper/turbo_include_tags.yml +9 -6
  249. data/config/action_view_helpers/turbo-rails/streams_action_helper/turbo_stream_action_tag.yml +32 -20
  250. data/config/action_view_helpers/turbo-rails/streams_action_helper/turbo_stream_refresh_tag.yml +18 -11
  251. data/config/action_view_helpers/turbo-rails/streams_helper/turbo_stream.yml +9 -6
  252. data/config/action_view_helpers/turbo-rails/streams_helper/turbo_stream_from.yml +28 -18
  253. data/config/html_elements.yml +597 -0
  254. data/config/options.yml +1 -0
  255. data/config/slots/components.yml +52 -0
  256. data/config/state/kind.yml +61 -0
  257. data/config/state/operators.yml +27 -0
  258. data/config/state/predicates.yml +39 -0
  259. data/config/state/transforms.yml +18 -0
  260. data/config/view_context_methods/actionview/base/annotate_rendered_view_with_filenames.yml +4 -4
  261. data/config/view_context_methods/actionview/base/assign.yml +4 -4
  262. data/config/view_context_methods/actionview/base/assigns.yml +4 -4
  263. data/config/view_context_methods/actionview/base/automatically_disable_submit_tag.yml +4 -4
  264. data/config/view_context_methods/actionview/base/compiled_method_container.yml +4 -4
  265. data/config/view_context_methods/actionview/base/config.yml +4 -4
  266. data/config/view_context_methods/actionview/base/default_form_builder.yml +4 -4
  267. data/config/view_context_methods/actionview/base/default_formats.yml +4 -4
  268. data/config/view_context_methods/actionview/base/field_error_proc.yml +4 -4
  269. data/config/view_context_methods/actionview/base/formats.yml +4 -4
  270. data/config/view_context_methods/actionview/base/in_rendering_context.yml +4 -4
  271. data/config/view_context_methods/actionview/base/locale.yml +4 -4
  272. data/config/view_context_methods/actionview/base/lookup_context.yml +4 -4
  273. data/config/view_context_methods/actionview/base/output_buffer.yml +4 -4
  274. data/config/view_context_methods/actionview/base/prefix_partial_path_with_controller_namespace.yml +4 -4
  275. data/config/view_context_methods/actionview/base/remove_hidden_field_autocomplete.yml +4 -4
  276. data/config/view_context_methods/actionview/base/streaming_completion_on_exception.yml +4 -4
  277. data/config/view_context_methods/actionview/base/view_flow.yml +4 -4
  278. data/config/view_context_methods/actionview/base/view_paths.yml +4 -4
  279. data/config/view_context_methods/actionview/base/view_renderer.yml +4 -4
  280. data/config/view_context_methods/actionview/template/local_assigns.yml +4 -4
  281. data/config/view_context_methods/activemodel/conversion/convert_to_model.yml +4 -4
  282. data/config/view_context_methods/activesupport/benchmarkable/benchmark.yml +4 -4
  283. data/config.yml +1249 -786
  284. data/exe/herb +2 -0
  285. data/ext/herb/error_helpers.c +379 -17
  286. data/ext/herb/error_helpers.h +1 -1
  287. data/ext/herb/extconf.rb +4 -2
  288. data/ext/herb/extension.c +137 -74
  289. data/ext/herb/extension_helpers.c +81 -35
  290. data/ext/herb/extension_helpers.h +4 -1
  291. data/ext/herb/nodes.c +859 -374
  292. data/ext/herb/nodes.h +3 -2
  293. data/ext/herb/parser_options_helpers.c +151 -0
  294. data/ext/herb/parser_options_helpers.h +14 -0
  295. data/herb.gemspec +3 -2
  296. data/lib/herb/action_view/helper_registry.rb +1358 -62
  297. data/lib/herb/analysis/partial_declaration.rb +140 -0
  298. data/lib/herb/analysis/partial_index.rb +189 -0
  299. data/lib/herb/analysis/partial_resolution.rb +161 -0
  300. data/lib/herb/analysis/partial_resolver.rb +144 -0
  301. data/lib/herb/analysis/project_index.rb +152 -0
  302. data/lib/herb/{action_view → analysis}/render_analyzer.rb +287 -77
  303. data/lib/herb/analysis/render_graph/ancestor_chain.rb +27 -0
  304. data/lib/herb/analysis/render_graph/builder.rb +376 -0
  305. data/lib/herb/analysis/render_graph/call_frame.rb +9 -0
  306. data/lib/herb/analysis/render_graph/call_site_location.rb +23 -0
  307. data/lib/herb/analysis/render_graph/inferred_signature.rb +21 -0
  308. data/lib/herb/analysis/render_graph/partial_call_site.rb +40 -0
  309. data/lib/herb/analysis/render_graph/partial_context.rb +46 -0
  310. data/lib/herb/analysis/render_graph/template_roots.rb +31 -0
  311. data/lib/herb/analysis/render_graph.rb +285 -0
  312. data/lib/herb/analysis/ruby_locals_index/local.rb +25 -0
  313. data/lib/herb/analysis/ruby_locals_index/named_reference.rb +22 -0
  314. data/lib/herb/analysis/ruby_locals_index/offset_table.rb +44 -0
  315. data/lib/herb/analysis/ruby_locals_index/reference_collector.rb +80 -0
  316. data/lib/herb/analysis/ruby_locals_index/state_locals.rb +49 -0
  317. data/lib/herb/analysis/ruby_locals_index.rb +165 -0
  318. data/lib/herb/analysis/ruby_reference.rb +67 -0
  319. data/lib/herb/analysis/template_dependencies/dependency_collector.rb +179 -0
  320. data/lib/herb/analysis/template_dependencies/node_dependency_collector.rb +309 -0
  321. data/lib/herb/analysis/template_dependencies.rb +562 -0
  322. data/lib/herb/ast/erb_render_node.rb +26 -94
  323. data/lib/herb/ast/helpers.rb +90 -10
  324. data/lib/herb/ast/herb_directive_node.rb +18 -0
  325. data/lib/herb/ast/node.rb +32 -2
  326. data/lib/herb/ast/nodes.rb +1368 -105
  327. data/lib/herb/backend.rb +73 -0
  328. data/lib/herb/bootstrap.rb +8 -8
  329. data/lib/herb/cli.rb +555 -32
  330. data/lib/herb/colors.rb +14 -0
  331. data/lib/herb/configuration.rb +71 -35
  332. data/lib/herb/defaults.yml +2 -1
  333. data/lib/herb/dev/assets.rb +57 -0
  334. data/lib/herb/dev/classifier.rb +84 -0
  335. data/lib/herb/dev/embedded.rb +27 -0
  336. data/lib/herb/dev/pipeline.rb +305 -0
  337. data/lib/herb/dev/protocol.rb +221 -0
  338. data/lib/herb/dev/runner.rb +180 -175
  339. data/lib/herb/dev/server.rb +89 -26
  340. data/lib/herb/dev/server_entry.rb +41 -6
  341. data/lib/herb/dev/watcher.rb +181 -0
  342. data/lib/herb/dev.rb +163 -0
  343. data/lib/herb/diagnostic/formatter.rb +88 -0
  344. data/lib/herb/diagnostic.rb +172 -0
  345. data/lib/herb/diff/operation.rb +36 -0
  346. data/lib/herb/diff/result.rb +62 -0
  347. data/lib/herb/diff.rb +10 -0
  348. data/lib/herb/engine/collector.rb +62 -0
  349. data/lib/herb/engine/compiler.rb +387 -113
  350. data/lib/herb/engine/component_tags/constant_resolver.rb +28 -0
  351. data/lib/herb/engine/component_tags/partial_resolver.rb +54 -0
  352. data/lib/herb/engine/component_tags/resolver.rb +32 -0
  353. data/lib/herb/engine/component_tags/visitor.rb +231 -0
  354. data/lib/herb/engine/css_inliner/inliner.rb +101 -0
  355. data/lib/herb/engine/css_inliner/visitor.rb +174 -0
  356. data/lib/herb/engine/errors.rb +122 -0
  357. data/lib/herb/engine/helpers.rb +82 -0
  358. data/lib/herb/engine/inline_render/inliner.rb +122 -0
  359. data/lib/herb/engine/inline_render/visitor.rb +267 -0
  360. data/lib/herb/engine/runtime/entry.rb +62 -0
  361. data/lib/herb/engine/runtime/error_page.rb +362 -0
  362. data/lib/herb/engine/runtime/html_safe_assertions.rb +217 -0
  363. data/lib/herb/engine/runtime/journal/summary.rb +227 -0
  364. data/lib/herb/engine/runtime/journal.rb +379 -0
  365. data/lib/herb/engine/runtime/middleware.rb +212 -0
  366. data/lib/herb/engine/runtime/observations.rb +73 -0
  367. data/lib/herb/engine/runtime/report.rb +204 -0
  368. data/lib/herb/engine/runtime/session.rb +437 -0
  369. data/lib/herb/engine/runtime.rb +21 -0
  370. data/lib/herb/engine/scoped_style/channel.rb +66 -0
  371. data/lib/herb/engine/scoped_style/collector.rb +74 -0
  372. data/lib/herb/engine/scoped_style/visitor.rb +533 -0
  373. data/lib/herb/engine/slots/annotation.rb +98 -0
  374. data/lib/herb/engine/slots/bindings.rb +61 -0
  375. data/lib/herb/engine/slots/callee.rb +118 -0
  376. data/lib/herb/engine/slots/component_definitions.rb +67 -0
  377. data/lib/herb/engine/slots/components/async.rb +24 -0
  378. data/lib/herb/engine/slots/components/base.rb +132 -0
  379. data/lib/herb/engine/slots/components/deferred.rb +81 -0
  380. data/lib/herb/engine/slots/components/fallback.rb +27 -0
  381. data/lib/herb/engine/slots/components/fragment.rb +99 -0
  382. data/lib/herb/engine/slots/components/lazy.rb +24 -0
  383. data/lib/herb/engine/slots/components.rb +52 -0
  384. data/lib/herb/engine/slots/dependencies/channel.rb +72 -0
  385. data/lib/herb/engine/slots/dependencies.rb +269 -0
  386. data/lib/herb/engine/slots/dynamics_compiler.rb +864 -0
  387. data/lib/herb/engine/slots/identifier.rb +35 -0
  388. data/lib/herb/engine/slots/manifest/channel.rb +74 -0
  389. data/lib/herb/engine/slots/manifest/collector.rb +75 -0
  390. data/lib/herb/engine/slots/markers.rb +152 -0
  391. data/lib/herb/engine/slots/render_bindings.rb +141 -0
  392. data/lib/herb/engine/slots/schema_compiler.rb +94 -0
  393. data/lib/herb/engine/slots/state_anchor.rb +94 -0
  394. data/lib/herb/engine/slots/state_compiler.rb +1325 -0
  395. data/lib/herb/engine/slots/state_directives.rb +854 -0
  396. data/lib/herb/engine/slots/state_kinds.rb +54 -0
  397. data/lib/herb/engine/slots/state_operators.rb +36 -0
  398. data/lib/herb/engine/slots/state_overrides.rb +79 -0
  399. data/lib/herb/engine/slots/state_predicates.rb +65 -0
  400. data/lib/herb/engine/slots/state_transforms.rb +42 -0
  401. data/lib/herb/engine/slots/statics.rb +185 -0
  402. data/lib/herb/engine/slots/subtree.rb +82 -0
  403. data/lib/herb/engine/slots/subtree_compiler.rb +255 -0
  404. data/lib/herb/engine/slots/types.rb +42 -0
  405. data/lib/herb/engine/slots/visitor.rb +2267 -0
  406. data/lib/herb/engine/validators/accessibility_validator.rb +3 -3
  407. data/lib/herb/engine/validators/base.rb +36 -0
  408. data/lib/herb/engine/validators/generator_template_validator.rb +39 -0
  409. data/lib/herb/engine/validators/nesting_validator.rb +3 -3
  410. data/lib/herb/engine/validators/render_validator.rb +13 -33
  411. data/lib/herb/engine/validators/security_validator.rb +3 -17
  412. data/lib/herb/engine/validators.rb +43 -0
  413. data/lib/herb/engine/visitors/auto_close_omitted_tags_visitor.rb +48 -0
  414. data/lib/herb/engine/visitors/content_for_visitor.rb +127 -0
  415. data/lib/herb/engine/{debug_visitor.rb → visitors/debug_visitor.rb} +122 -94
  416. data/lib/herb/engine/visitors/html_safe_assertions_visitor.rb +281 -0
  417. data/lib/herb/engine/visitors/instrumentation_visitor.rb +290 -0
  418. data/lib/herb/engine/visitors/optimize_visitor.rb +728 -0
  419. data/lib/herb/engine/visitors/remove_comments_visitor.rb +106 -0
  420. data/lib/herb/engine/visitors/source_attribution_visitor.rb +177 -0
  421. data/lib/herb/engine.rb +218 -259
  422. data/lib/herb/ensure_installed.rb +43 -0
  423. data/lib/herb/errors.rb +681 -153
  424. data/lib/herb/fingerprint.rb +82 -0
  425. data/lib/herb/html/elements.rb +18 -0
  426. data/lib/herb/html/util.rb +21 -2
  427. data/lib/herb/lex_result.rb +0 -10
  428. data/lib/herb/locate.rb +163 -0
  429. data/lib/herb/location.rb +20 -0
  430. data/lib/herb/parse_result.rb +17 -11
  431. data/lib/herb/parser_options.rb +69 -40
  432. data/lib/herb/position.rb +19 -0
  433. data/lib/herb/prism_inspect.rb +1 -4
  434. data/lib/herb/project.rb +39 -23
  435. data/lib/herb/range.rb +5 -0
  436. data/lib/herb/result.rb +2 -2
  437. data/lib/herb/ruby_program.rb +110 -0
  438. data/lib/herb/source_path.rb +232 -0
  439. data/lib/herb/token.rb +14 -3
  440. data/lib/herb/version.rb +1 -1
  441. data/lib/herb/visitor/context/origin.rb +52 -0
  442. data/lib/herb/visitor/context/replacements.rb +59 -0
  443. data/lib/herb/visitor/context.rb +169 -0
  444. data/lib/herb/visitor/context_aware.rb +45 -0
  445. data/lib/herb/visitor/diagnostics.rb +148 -0
  446. data/lib/herb/visitor/experimental.rb +33 -0
  447. data/lib/herb/visitor/parser_option_requirements.rb +151 -0
  448. data/lib/herb/visitor/stack.rb +192 -0
  449. data/lib/herb/visitor.rb +47 -1
  450. data/lib/herb/warnings.rb +25 -0
  451. data/lib/herb.rb +74 -63
  452. data/sig/herb/action_view/helper_registry.rbs +82 -10
  453. data/sig/herb/analysis/partial_declaration.rbs +80 -0
  454. data/sig/herb/analysis/partial_index.rbs +66 -0
  455. data/sig/herb/analysis/partial_resolution.rbs +57 -0
  456. data/sig/herb/analysis/partial_resolver.rbs +76 -0
  457. data/sig/herb/analysis/project_index.rbs +57 -0
  458. data/sig/herb/{action_view → analysis}/render_analyzer.rbs +25 -4
  459. data/sig/herb/analysis/render_graph/ancestor_chain.rbs +22 -0
  460. data/sig/herb/analysis/render_graph/builder.rbs +180 -0
  461. data/sig/herb/analysis/render_graph/call_frame.rbs +26 -0
  462. data/sig/herb/analysis/render_graph/call_site_location.rbs +28 -0
  463. data/sig/herb/analysis/render_graph/inferred_signature.rbs +27 -0
  464. data/sig/herb/analysis/render_graph/partial_call_site.rbs +36 -0
  465. data/sig/herb/analysis/render_graph/partial_context.rbs +31 -0
  466. data/sig/herb/analysis/render_graph/template_roots.rbs +32 -0
  467. data/sig/herb/analysis/render_graph.rbs +83 -0
  468. data/sig/herb/analysis/ruby_locals_index/local.rbs +21 -0
  469. data/sig/herb/analysis/ruby_locals_index/named_reference.rbs +20 -0
  470. data/sig/herb/analysis/ruby_locals_index/offset_table.rbs +26 -0
  471. data/sig/herb/analysis/ruby_locals_index/reference_collector.rbs +40 -0
  472. data/sig/herb/analysis/ruby_locals_index/state_locals.rbs +19 -0
  473. data/sig/herb/analysis/ruby_locals_index.rbs +62 -0
  474. data/sig/herb/analysis/ruby_reference.rbs +28 -0
  475. data/sig/herb/analysis/template_dependencies/dependency_collector.rbs +52 -0
  476. data/sig/herb/analysis/template_dependencies/node_dependency_collector.rbs +81 -0
  477. data/sig/herb/analysis/template_dependencies.rbs +125 -0
  478. data/sig/herb/ast/erb_render_node.rbs +10 -2
  479. data/sig/herb/ast/helpers.rbs +31 -1
  480. data/sig/herb/ast/herb_directive_node.rbs +13 -0
  481. data/sig/herb/ast/node.rbs +9 -0
  482. data/sig/herb/ast/nodes.rbs +668 -89
  483. data/sig/herb/backend.rbs +52 -0
  484. data/sig/herb/bootstrap.rbs +2 -0
  485. data/sig/herb/colors.rbs +3 -0
  486. data/sig/herb/configuration.rbs +27 -3
  487. data/sig/herb/dev/assets.rbs +27 -0
  488. data/sig/herb/dev/classifier.rbs +57 -0
  489. data/sig/herb/dev/embedded.rbs +21 -0
  490. data/sig/herb/dev/pipeline.rbs +118 -0
  491. data/sig/herb/dev/protocol.rbs +78 -0
  492. data/sig/herb/dev/runner.rbs +64 -23
  493. data/sig/herb/dev/server.rbs +49 -22
  494. data/sig/herb/dev/server_entry.rbs +46 -21
  495. data/sig/herb/dev/watcher.rbs +84 -0
  496. data/sig/herb/dev.rbs +58 -0
  497. data/sig/herb/diagnostic/formatter.rbs +28 -0
  498. data/sig/herb/diagnostic.rbs +88 -0
  499. data/sig/herb/diff/operation.rbs +36 -0
  500. data/sig/herb/diff/result.rbs +36 -0
  501. data/sig/herb/diff.rbs +6 -0
  502. data/sig/herb/engine/collector.rbs +48 -0
  503. data/sig/herb/engine/compiler.rbs +74 -24
  504. data/sig/herb/engine/component_tags/constant_resolver.rbs +19 -0
  505. data/sig/herb/engine/component_tags/partial_resolver.rbs +30 -0
  506. data/sig/herb/engine/component_tags/resolver.rbs +25 -0
  507. data/sig/herb/engine/component_tags/visitor.rbs +69 -0
  508. data/sig/herb/engine/css_inliner/inliner.rbs +65 -0
  509. data/sig/herb/engine/css_inliner/visitor.rbs +87 -0
  510. data/sig/herb/engine/errors.rbs +68 -0
  511. data/sig/herb/engine/helpers.rbs +28 -0
  512. data/sig/herb/engine/inline_render/inliner.rbs +39 -0
  513. data/sig/herb/engine/inline_render/visitor.rbs +104 -0
  514. data/sig/herb/engine/runtime/entry.rbs +43 -0
  515. data/sig/herb/engine/runtime/error_page.rbs +115 -0
  516. data/sig/herb/engine/runtime/html_safe_assertions.rbs +99 -0
  517. data/sig/herb/engine/runtime/journal/summary.rbs +172 -0
  518. data/sig/herb/engine/runtime/journal.rbs +126 -0
  519. data/sig/herb/engine/runtime/middleware.rbs +96 -0
  520. data/sig/herb/engine/runtime/observations.rbs +38 -0
  521. data/sig/herb/engine/runtime/report.rbs +97 -0
  522. data/sig/herb/engine/runtime/session.rbs +233 -0
  523. data/sig/herb/engine/runtime.rbs +14 -0
  524. data/sig/herb/engine/scoped_style/channel.rbs +45 -0
  525. data/sig/herb/engine/scoped_style/collector.rbs +45 -0
  526. data/sig/herb/engine/scoped_style/visitor.rbs +220 -0
  527. data/sig/herb/engine/slots/annotation.rbs +72 -0
  528. data/sig/herb/engine/slots/bindings.rbs +34 -0
  529. data/sig/herb/engine/slots/callee.rbs +62 -0
  530. data/sig/herb/engine/slots/component_definitions.rbs +19 -0
  531. data/sig/herb/engine/slots/components/async.rbs +20 -0
  532. data/sig/herb/engine/slots/components/base.rbs +60 -0
  533. data/sig/herb/engine/slots/components/deferred.rbs +29 -0
  534. data/sig/herb/engine/slots/components/fallback.rbs +21 -0
  535. data/sig/herb/engine/slots/components/fragment.rbs +34 -0
  536. data/sig/herb/engine/slots/components/lazy.rbs +20 -0
  537. data/sig/herb/engine/slots/components.rbs +30 -0
  538. data/sig/herb/engine/slots/dependencies/channel.rbs +51 -0
  539. data/sig/herb/engine/slots/dependencies.rbs +94 -0
  540. data/sig/herb/engine/slots/dynamics_compiler.rbs +352 -0
  541. data/sig/herb/engine/slots/identifier.rbs +19 -0
  542. data/sig/herb/engine/slots/manifest/channel.rbs +49 -0
  543. data/sig/herb/engine/slots/manifest/collector.rbs +45 -0
  544. data/sig/herb/engine/slots/markers.rbs +99 -0
  545. data/sig/herb/engine/slots/render_bindings.rbs +69 -0
  546. data/sig/herb/engine/slots/schema_compiler.rbs +62 -0
  547. data/sig/herb/engine/slots/state_anchor.rbs +41 -0
  548. data/sig/herb/engine/slots/state_compiler.rbs +258 -0
  549. data/sig/herb/engine/slots/state_directives.rbs +278 -0
  550. data/sig/herb/engine/slots/state_kinds.rbs +24 -0
  551. data/sig/herb/engine/slots/state_operators.rbs +19 -0
  552. data/sig/herb/engine/slots/state_overrides.rbs +33 -0
  553. data/sig/herb/engine/slots/state_predicates.rbs +16 -0
  554. data/sig/herb/engine/slots/state_transforms.rbs +15 -0
  555. data/sig/herb/engine/slots/statics.rbs +67 -0
  556. data/sig/herb/engine/slots/subtree.rbs +49 -0
  557. data/sig/herb/engine/slots/subtree_compiler.rbs +130 -0
  558. data/sig/herb/engine/slots/types.rbs +46 -0
  559. data/sig/herb/engine/slots/visitor.rbs +603 -0
  560. data/sig/herb/engine/validators/accessibility_validator.rbs +1 -1
  561. data/sig/herb/engine/validators/base.rbs +28 -0
  562. data/sig/herb/engine/validators/generator_template_validator.rbs +19 -0
  563. data/sig/herb/engine/validators/nesting_validator.rbs +1 -1
  564. data/sig/herb/engine/validators/render_validator.rbs +2 -6
  565. data/sig/herb/engine/validators/security_validator.rbs +1 -3
  566. data/sig/herb/engine/validators.rbs +21 -0
  567. data/sig/herb/engine/visitors/auto_close_omitted_tags_visitor.rbs +26 -0
  568. data/sig/herb/engine/visitors/content_for_visitor.rbs +52 -0
  569. data/sig/herb/engine/{debug_visitor.rbs → visitors/debug_visitor.rbs} +26 -15
  570. data/sig/herb/engine/visitors/html_safe_assertions_visitor.rbs +100 -0
  571. data/sig/herb/engine/visitors/instrumentation_visitor.rbs +111 -0
  572. data/sig/herb/engine/visitors/optimize_visitor.rbs +246 -0
  573. data/sig/herb/engine/visitors/remove_comments_visitor.rbs +66 -0
  574. data/sig/herb/engine/visitors/source_attribution_visitor.rbs +90 -0
  575. data/sig/herb/engine.rbs +47 -41
  576. data/sig/herb/ensure_installed.rbs +9 -0
  577. data/sig/herb/errors.rbs +311 -0
  578. data/sig/herb/fingerprint.rbs +37 -0
  579. data/sig/herb/html/elements.rbs +19 -0
  580. data/sig/herb/html/util.rbs +15 -1
  581. data/sig/herb/lex_result.rbs +0 -6
  582. data/sig/herb/locate.rbs +89 -0
  583. data/sig/herb/location.rbs +12 -0
  584. data/sig/herb/parse_result.rbs +10 -8
  585. data/sig/herb/parser_options.rbs +53 -19
  586. data/sig/herb/position.rbs +11 -0
  587. data/sig/herb/range.rbs +3 -0
  588. data/sig/herb/ruby_program.rbs +51 -0
  589. data/sig/herb/source_path.rbs +132 -0
  590. data/sig/herb/token.rbs +5 -2
  591. data/sig/herb/visitor/context/origin.rbs +51 -0
  592. data/sig/herb/visitor/context/replacements.rbs +39 -0
  593. data/sig/herb/visitor/context.rbs +83 -0
  594. data/sig/herb/visitor/context_aware.rbs +32 -0
  595. data/sig/herb/visitor/diagnostics.rbs +82 -0
  596. data/sig/herb/visitor/experimental.rbs +23 -0
  597. data/sig/herb/visitor/parser_option_requirements.rbs +76 -0
  598. data/sig/herb/visitor/stack.rbs +91 -0
  599. data/sig/herb/visitor.rbs +22 -0
  600. data/sig/herb/warnings.rbs +10 -0
  601. data/sig/herb.rbs +27 -10
  602. data/sig/manifest.yaml +13 -0
  603. data/sig/serialized_ast_errors.rbs +62 -1
  604. data/sig/serialized_ast_nodes.rbs +59 -2
  605. data/src/analyze/action_view/attribute_extraction_helpers.c +73 -36
  606. data/src/analyze/action_view/generated_handlers.c +37 -1
  607. data/src/analyze/action_view/generated_handlers.h +2 -1
  608. data/src/analyze/action_view/helper_registry.c +1353 -58
  609. data/src/analyze/action_view/registry.c +10 -17
  610. data/src/analyze/action_view/stylesheet_link_tag.c +40 -0
  611. data/src/analyze/action_view/tag_helper_node_builders.c +63 -3
  612. data/src/analyze/action_view/tag_helpers.c +502 -111
  613. data/src/analyze/analyze.c +306 -89
  614. data/src/analyze/analyze_helpers.c +502 -237
  615. data/src/analyze/analyzed_ruby.c +2 -0
  616. data/src/analyze/builders.c +80 -51
  617. data/src/analyze/conditional_elements.c +13 -8
  618. data/src/analyze/conditional_open_tags.c +11 -5
  619. data/src/analyze/control_type.c +36 -13
  620. data/src/analyze/herb_directives.c +701 -0
  621. data/src/analyze/invalid_structures.c +11 -7
  622. data/src/analyze/iteration_nodes.c +306 -0
  623. data/src/analyze/missing_end.c +116 -32
  624. data/src/analyze/parse_errors.c +8 -3
  625. data/src/analyze/postfix_conditionals.c +98 -63
  626. data/src/analyze/prism_annotate.c +45 -13
  627. data/src/analyze/render_nodes.c +348 -123
  628. data/src/analyze/strict_locals.c +30 -26
  629. data/src/analyze/ternary_conditionals.c +95 -70
  630. data/src/analyze/transform.c +43 -1
  631. data/src/ast/ast_node.c +3 -13
  632. data/src/ast/ast_nodes.c +914 -113
  633. data/src/ast/ast_pretty_print.c +166 -3
  634. data/src/diff/herb_diff.c +8 -0
  635. data/src/diff/herb_diff_attributes.c +1 -0
  636. data/src/diff/herb_diff_children.c +4 -3
  637. data/src/diff/herb_diff_helpers.c +7 -1
  638. data/src/diff/herb_diff_nodes.c +186 -71
  639. data/src/diff/herb_hash_tree.c +99 -1
  640. data/src/errors.c +1124 -105
  641. data/src/extract.c +227 -144
  642. data/src/herb.c +43 -8
  643. data/src/include/analyze/action_view/attribute_extraction_helpers.h +1 -1
  644. data/src/include/analyze/action_view/helper_registry.h +28 -4
  645. data/src/include/analyze/action_view/tag_helper_handler.h +1 -1
  646. data/src/include/analyze/action_view/tag_helper_node_builders.h +7 -0
  647. data/src/include/analyze/analyze.h +11 -22
  648. data/src/include/analyze/analyzed_ruby.h +25 -0
  649. data/src/include/analyze/builders.h +16 -0
  650. data/src/include/analyze/helpers.h +25 -24
  651. data/src/include/analyze/herb_directive_kinds.h +41 -0
  652. data/src/include/analyze/herb_directives.h +14 -0
  653. data/src/include/analyze/iteration_nodes.h +11 -0
  654. data/src/include/analyze/prism_annotate.h +3 -3
  655. data/src/include/analyze/ternary_conditionals.h +2 -0
  656. data/src/include/ast/ast_node.h +1 -5
  657. data/src/include/ast/ast_nodes.h +78 -3
  658. data/src/include/ast/ast_pretty_print.h +1 -1
  659. data/src/include/diff/herb_diff.h +11 -0
  660. data/src/include/errors.h +163 -38
  661. data/src/include/extract.h +11 -0
  662. data/src/include/herb.h +6 -0
  663. data/src/include/lexer/erb_openers.h +29 -0
  664. data/src/include/lexer/lexer.h +1 -0
  665. data/src/include/lexer/lexer_peek_helpers.h +8 -1
  666. data/src/include/lexer/lexer_struct.h +4 -0
  667. data/src/include/lexer/token.h +5 -0
  668. data/src/include/lexer/token_struct.h +8 -6
  669. data/src/include/lib/hb_allocator.h +2 -1
  670. data/src/include/lib/hb_array.h +2 -0
  671. data/src/include/lib/hb_clock.h +15 -0
  672. data/src/include/lib/hb_foreach.h +1 -1
  673. data/src/include/lib/hb_string.h +7 -0
  674. data/src/include/parser/dot_notation.h +1 -1
  675. data/src/include/parser/foreign_content_elements.h +32 -0
  676. data/src/include/parser/parser.h +40 -26
  677. data/src/include/parser/parser_helpers.h +13 -11
  678. data/src/include/parser/parser_options.h +41 -0
  679. data/src/include/prism/herb_prism_node.h +6 -1
  680. data/src/include/prism/ruby_parser.h +6 -0
  681. data/src/include/util/html_elements.h +85 -0
  682. data/src/include/util/html_util.h +1 -0
  683. data/src/include/version.h +1 -1
  684. data/src/lexer/lexer_peek_helpers.c +15 -1
  685. data/src/lexer/token.c +89 -1
  686. data/src/lexer.c +228 -12
  687. data/src/lib/hb_allocator.c +2 -0
  688. data/src/lib/hb_array.c +26 -0
  689. data/src/lib/hb_string.c +26 -0
  690. data/src/main.c +1 -1
  691. data/src/parser/dot_notation.c +4 -3
  692. data/src/parser/match_tags.c +66 -1
  693. data/src/parser/parser_helpers.c +69 -37
  694. data/src/parser.c +658 -385
  695. data/src/parser_options_defaults.c +30 -0
  696. data/src/prism/prism_helpers.c +94 -0
  697. data/src/prism/ruby_parser.c +49 -0
  698. data/src/util/html_util.c +11 -58
  699. data/src/visitor.c +77 -1
  700. data/templates/ext/herb/error_helpers.c.erb +1 -1
  701. data/templates/ext/herb/nodes.c.erb +19 -14
  702. data/templates/ext/herb/nodes.h.erb +2 -1
  703. data/templates/ext/herb/parser_options_helpers.c.erb +69 -0
  704. data/templates/ext/herb/parser_options_helpers.h.erb +11 -0
  705. data/templates/java/nodes.c.erb +21 -17
  706. data/templates/java/nodes.h.erb +3 -2
  707. data/templates/java/org/herb/ParserOptions.java.erb +24 -0
  708. data/templates/java/org/herb/ast/HelperRegistry.java.erb +67 -31
  709. data/templates/java/org/herb/ast/HelperType.java.erb +29 -0
  710. data/templates/java/org/herb/ast/Nodes.java.erb +11 -7
  711. data/templates/java/parser_options_helpers.c.erb +45 -0
  712. data/templates/java/parser_options_helpers.h.erb +10 -0
  713. data/templates/javascript/packages/client/src/state-kinds.ts.erb +49 -0
  714. data/templates/javascript/packages/client/src/state-operators.ts.erb +15 -0
  715. data/templates/javascript/packages/client/src/state-predicates.ts.erb +27 -0
  716. data/templates/javascript/packages/client/src/state-transforms.ts.erb +19 -0
  717. data/templates/javascript/packages/core/src/action-view-helpers.ts.erb +47 -0
  718. data/templates/javascript/packages/core/src/built-in-components.ts.erb +67 -0
  719. data/templates/javascript/packages/core/src/errors.ts.erb +9 -3
  720. data/templates/javascript/packages/core/src/foreign-content-elements.ts.erb +18 -0
  721. data/templates/javascript/packages/core/src/html-constants.ts.erb +32 -0
  722. data/templates/javascript/packages/core/src/html-elements.ts.erb +41 -0
  723. data/templates/javascript/packages/core/src/node-type-guards.ts.erb +11 -7
  724. data/templates/javascript/packages/core/src/nodes.ts.erb +103 -20
  725. data/templates/javascript/packages/core/src/parser-options.ts.erb +41 -0
  726. data/templates/javascript/packages/core/src/visitor.ts.erb +1 -1
  727. data/templates/javascript/packages/node/extension/error_helpers.cpp.erb +3 -3
  728. data/templates/javascript/packages/node/extension/nodes.cpp.erb +18 -13
  729. data/templates/javascript/packages/node/extension/nodes.h.erb +3 -3
  730. data/templates/javascript/packages/node/extension/parser_options_helpers.cpp.erb +41 -0
  731. data/templates/javascript/packages/node/extension/parser_options_helpers.h.erb +12 -0
  732. data/templates/lib/herb/action_view/helper_registry.rb.erb +77 -3
  733. data/templates/lib/herb/ast/nodes.rb.erb +16 -6
  734. data/templates/lib/herb/engine/slots/component_definitions.rb.erb +38 -0
  735. data/templates/lib/herb/engine/slots/state_kinds.rb.erb +37 -0
  736. data/templates/lib/herb/engine/slots/state_operators.rb.erb +26 -0
  737. data/templates/lib/herb/engine/slots/state_predicates.rb.erb +39 -0
  738. data/templates/lib/herb/engine/slots/state_transforms.rb.erb +27 -0
  739. data/templates/lib/herb/errors.rb.erb +34 -6
  740. data/templates/lib/herb/html/elements.rb.erb +12 -0
  741. data/templates/lib/herb/parser_options.rb.erb +32 -0
  742. data/templates/lib/herb/visitor.rb.erb +7 -1
  743. data/templates/rust/herb-printer/src/printer_visitor.rs.erb +14 -0
  744. data/templates/rust/src/action_view_helpers.rs.erb +38 -0
  745. data/templates/rust/src/ast/nodes.rs.erb +21 -31
  746. data/templates/rust/src/errors.rs.erb +1 -1
  747. data/templates/rust/src/nodes.rs.erb +58 -26
  748. data/templates/rust/src/parser_options.rs.erb +16 -0
  749. data/templates/rust/src/prism/generated_deserialize.rs.erb +109 -0
  750. data/templates/rust/src/prism/generated_prettyprint.rs.erb +153 -0
  751. data/templates/rust/src/union_types.rs.erb +7 -1
  752. data/templates/rust/src/visitor.rs.erb +1 -1
  753. data/templates/src/analyze/action_view/helper_registry.c.erb +22 -0
  754. data/templates/src/analyze/missing_end.c.erb +13 -5
  755. data/templates/src/ast/ast_nodes.c.erb +41 -2
  756. data/templates/src/diff/herb_diff_nodes.c.erb +44 -8
  757. data/templates/src/errors.c.erb +8 -3
  758. data/templates/src/include/analyze/action_view/helper_registry.h.erb +19 -0
  759. data/templates/src/include/analyze/herb_directive_kinds.h.erb +25 -0
  760. data/templates/src/include/errors.h.erb +3 -1
  761. data/templates/src/include/parser/foreign_content_elements.h.erb +23 -0
  762. data/templates/src/include/parser/parser_options.h.erb +21 -0
  763. data/templates/src/include/util/html_elements.h.erb +28 -0
  764. data/templates/src/parser_options_defaults.c.erb +9 -0
  765. data/templates/template.rb +564 -9
  766. data/templates/wasm/error_helpers.cpp.erb +4 -4
  767. data/templates/wasm/nodes.cpp.erb +17 -27
  768. data/templates/wasm/nodes.h.erb +3 -3
  769. data/templates/wasm/parser_options_helpers.cpp.erb +25 -0
  770. data/templates/wasm/parser_options_helpers.h.erb +12 -0
  771. metadata +309 -30
  772. data/config/action_view_helpers/actionview/form_helper/button.yml +0 -38
  773. data/config/action_view_helpers/actionview/form_helper/submit.yml +0 -35
  774. data/lib/herb/ast.rb +0 -7
  775. data/lib/herb/diff_operation.rb +0 -34
  776. data/lib/herb/diff_result.rb +0 -59
  777. data/lib/herb/engine/error_formatter.rb +0 -432
  778. data/lib/herb/engine/parser_error_overlay.rb +0 -771
  779. data/lib/herb/engine/validation_error_overlay.rb +0 -182
  780. data/lib/herb/engine/validation_errors.rb +0 -65
  781. data/lib/herb/engine/validator.rb +0 -80
  782. data/sig/herb/ast.rbs +0 -6
  783. data/sig/herb/diff_operation.rbs +0 -34
  784. data/sig/herb/diff_result.rbs +0 -34
  785. data/sig/herb/engine/debug.rbs +0 -38
  786. data/sig/herb/engine/error_formatter.rbs +0 -47
  787. data/sig/herb/engine/parser_error_overlay.rbs +0 -41
  788. data/sig/herb/engine/validation_error_overlay.rbs +0 -35
  789. data/sig/herb/engine/validation_errors.rbs +0 -45
  790. data/sig/herb/engine/validator.rbs +0 -41
  791. data/sig/herb_c_extension.rbs +0 -10
  792. data/sig/vendor/did_you_mean.rbs +0 -6
  793. data/sig/vendor/parallel.rbs +0 -4
data/config.yml CHANGED
@@ -1,495 +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"
237
+
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"
219
249
 
220
- - name: InvalidCommentClosingTagError
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"
316
+
317
+ fields:
318
+ - name: "tag_name"
319
+ type: "token"
269
320
 
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."
270
330
  fields:
271
- - name: tag_name
272
- type: token
331
+ - name: "tag_name"
332
+ type: "token"
273
333
 
274
- - name: UnclosedQuoteError
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"
293
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."
294
370
  fields:
295
- - name: attribute_name
296
- type: string
371
+ - name: "found"
372
+ type: "token"
297
373
 
298
- - name: UnclosedERBTagError
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"
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."
420
+ fields:
421
+ - name: "solidus"
422
+ type: "token"
423
+
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"
431
+
432
+ fields:
433
+ - name: "opening_tag"
434
+ type: "token"
435
+
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"
305
446
 
306
447
  fields:
307
- - name: opening_tag
308
- type: token
448
+ - name: "opening_tag"
449
+ type: "token"
309
450
 
310
- - name: StrayERBClosingTagError
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"
673
+
674
+ - name: "TimeoutError"
675
+ message:
676
+ template: "Parsing timed out after %zu ms."
677
+ arguments:
678
+ - "timeout_ms"
679
+
680
+ fields:
681
+ - name: "timeout_ms"
682
+ type: "size_t"
488
683
 
489
684
  warnings:
490
685
  fields: []
491
686
  types: []
492
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
+
493
810
  nodes:
494
811
  # fields:
495
812
  # - name: type
@@ -513,365 +830,382 @@ nodes:
513
830
  # # type: range
514
831
 
515
832
  types:
516
- - name: DocumentNode
833
+ - name: "DocumentNode"
517
834
  fields:
518
- - name: children
519
- type: array
520
- kind: Node
835
+ - name: "children"
836
+ type: "array"
837
+ kind: "Node"
521
838
 
522
- - name: prism_context
523
- type: prism_context
839
+ - name: "prism_context"
840
+ type: "prism_context"
524
841
 
525
- - name: prism_node
526
- type: prism_node
842
+ - name: "prism_node"
843
+ type: "prism_node"
527
844
 
528
- - name: LiteralNode
845
+ - name: "LiteralNode"
529
846
  fields:
530
- - name: content
531
- type: string
847
+ - name: "content"
848
+ type: "string"
532
849
 
533
- - name: HTMLOpenTagNode
850
+ - name: "HTMLOpenTagNode"
534
851
  fields:
535
- - name: tag_opening
536
- type: token
852
+ - name: "tag_opening"
853
+ type: "token"
537
854
 
538
- - name: tag_name
539
- type: token
855
+ - name: "tag_name"
856
+ type: "token"
540
857
 
541
- - name: tag_closing
542
- type: token
858
+ - name: "tag_closing"
859
+ type: "token"
543
860
 
544
- - name: children
545
- type: array
546
- kind: Node
861
+ - name: "children"
862
+ type: "array"
863
+ kind: "Node"
547
864
 
548
- - name: is_void
549
- type: boolean
865
+ - name: "is_void"
866
+ type: "boolean"
550
867
 
551
- - name: HTMLConditionalOpenTagNode
868
+ - name: "HTMLConditionalOpenTagNode"
552
869
  fields:
553
- - name: conditional
554
- type: node
870
+ - name: "conditional"
871
+ type: "node"
555
872
  kind:
556
- - ERBIfNode
557
- - ERBUnlessNode
873
+ - "ERBIfNode"
874
+ - "ERBUnlessNode"
558
875
 
559
- - name: tag_name
560
- type: token
876
+ - name: "tag_name"
877
+ type: "token"
561
878
 
562
- - name: is_void
563
- type: boolean
879
+ - name: "is_void"
880
+ type: "boolean"
564
881
 
565
- - name: HTMLCloseTagNode
882
+ - name: "HTMLCloseTagNode"
566
883
  fields:
567
- - name: tag_opening
568
- type: token
884
+ - name: "tag_opening"
885
+ type: "token"
569
886
 
570
- - name: tag_name
571
- type: token
887
+ - name: "tag_name"
888
+ type: "token"
572
889
 
573
- - name: children
574
- type: array
575
- kind: WhitespaceNode
890
+ - name: "children"
891
+ type: "array"
892
+ kind: "WhitespaceNode"
576
893
 
577
- - name: tag_closing
578
- type: token
894
+ - name: "tag_closing"
895
+ type: "token"
579
896
 
580
- - name: HTMLOmittedCloseTagNode
897
+ - name: "HTMLOmittedCloseTagNode"
581
898
  fields:
582
- - name: tag_name
583
- type: token
899
+ - name: "tag_name"
900
+ type: "token"
584
901
 
585
- - name: HTMLVirtualCloseTagNode
902
+ - name: "HTMLVirtualCloseTagNode"
586
903
  fields:
587
- - name: tag_name
588
- type: token
904
+ - name: "tag_name"
905
+ type: "token"
589
906
 
590
- - name: HTMLElementNode
907
+ - name: "HTMLElementNode"
591
908
  fields:
592
- - name: open_tag
593
- type: node
909
+ - name: "open_tag"
910
+ type: "node"
594
911
  kind:
595
- - HTMLOpenTagNode
596
- - HTMLConditionalOpenTagNode
597
- - ERBOpenTagNode
912
+ - "HTMLOpenTagNode"
913
+ - "HTMLConditionalOpenTagNode"
914
+ - "ERBOpenTagNode"
598
915
 
599
- - name: tag_name
600
- type: token
916
+ - name: "tag_name"
917
+ type: "token"
601
918
 
602
- - name: body
603
- type: array
604
- kind: Node
919
+ - name: "body"
920
+ type: "array"
921
+ kind: "Node"
605
922
 
606
- - name: close_tag
607
- type: node
923
+ - name: "close_tag"
924
+ type: "node"
925
+ writable: true
608
926
  kind:
609
- - HTMLCloseTagNode
610
- - HTMLOmittedCloseTagNode
611
- - HTMLVirtualCloseTagNode
612
- - ERBEndNode
927
+ - "HTMLCloseTagNode"
928
+ - "HTMLOmittedCloseTagNode"
929
+ - "HTMLVirtualCloseTagNode"
930
+ - "ERBEndNode"
613
931
 
614
- - name: is_void
615
- type: boolean
932
+ - name: "is_void"
933
+ type: "boolean"
616
934
 
617
- - name: element_source
618
- type: element_source
935
+ - name: "element_source"
936
+ type: "element_source"
619
937
 
620
- - name: HTMLConditionalElementNode
938
+ - name: "HTMLConditionalElementNode"
621
939
  fields:
622
- - name: condition
623
- type: string
940
+ - name: "condition"
941
+ type: "string"
624
942
 
625
- - name: open_conditional
626
- type: node
943
+ - name: "open_conditional"
944
+ type: "node"
627
945
  kind:
628
- - ERBIfNode
629
- - ERBUnlessNode
946
+ - "ERBIfNode"
947
+ - "ERBUnlessNode"
630
948
 
631
- - name: open_tag
632
- type: borrowed_node
633
- kind: HTMLOpenTagNode
949
+ - name: "open_tag"
950
+ type: "borrowed_node"
951
+ kind: "HTMLOpenTagNode"
634
952
 
635
- - name: body
636
- type: array
637
- kind: Node
953
+ - name: "body"
954
+ type: "array"
955
+ kind: "Node"
638
956
 
639
- - name: close_tag
640
- type: borrowed_node
957
+ - name: "close_tag"
958
+ type: "borrowed_node"
641
959
  kind:
642
- - HTMLCloseTagNode
643
- - HTMLOmittedCloseTagNode
960
+ - "HTMLCloseTagNode"
961
+ - "HTMLOmittedCloseTagNode"
644
962
 
645
- - name: close_conditional
646
- type: node
963
+ - name: "close_conditional"
964
+ type: "node"
647
965
  kind:
648
- - ERBIfNode
649
- - ERBUnlessNode
966
+ - "ERBIfNode"
967
+ - "ERBUnlessNode"
650
968
 
651
- - name: tag_name
652
- type: token
969
+ - name: "tag_name"
970
+ type: "token"
653
971
 
654
- - name: element_source
655
- type: element_source
972
+ - name: "element_source"
973
+ type: "element_source"
656
974
 
657
- - name: HTMLAttributeValueNode
975
+ - name: "HTMLAttributeValueNode"
658
976
  fields:
659
- - name: open_quote
660
- type: token
977
+ - name: "open_quote"
978
+ type: "token"
661
979
 
662
- - name: children
663
- type: array
664
- kind: Node
980
+ - name: "children"
981
+ type: "array"
982
+ kind: "Node"
665
983
 
666
- - name: close_quote
667
- type: token
984
+ - name: "close_quote"
985
+ type: "token"
668
986
 
669
- - name: quoted
670
- type: boolean
987
+ - name: "quoted"
988
+ type: "boolean"
671
989
 
672
- - name: HTMLAttributeNameNode
990
+ - name: "HTMLAttributeNameNode"
673
991
  fields:
674
- - name: children
675
- type: array
992
+ - name: "children"
993
+ type: "array"
676
994
  kind:
677
- - LiteralNode
678
- - ERBContentNode
995
+ - "LiteralNode"
996
+ - "ERBContentNode"
997
+ - "ERBCommentNode"
679
998
 
680
- - name: HTMLAttributeNode
999
+ - name: "HTMLAttributeNode"
681
1000
  fields:
682
- - name: name
683
- type: node
684
- kind: HTMLAttributeNameNode
1001
+ - name: "name"
1002
+ type: "node"
1003
+ kind: "HTMLAttributeNameNode"
685
1004
 
686
- - name: equals
687
- type: token
1005
+ - name: "equals"
1006
+ type: "token"
688
1007
 
689
- - name: value
690
- type: node
691
- kind: HTMLAttributeValueNode
1008
+ - name: "value"
1009
+ type: "node"
1010
+ kind: "HTMLAttributeValueNode"
692
1011
 
693
- - name: RubyLiteralNode
1012
+ - name: "RubyLiteralNode"
694
1013
  fields:
695
- - name: content
696
- type: string
1014
+ - name: "content"
1015
+ type: "string"
697
1016
 
698
- - name: RubyHTMLAttributesSplatNode
1017
+ - name: "RubyHTMLAttributesSplatNode"
699
1018
  fields:
700
- - name: content
701
- type: string
1019
+ - name: "content"
1020
+ type: "string"
702
1021
 
703
- - name: prefix
704
- type: string
1022
+ - name: "prefix"
1023
+ type: "string"
705
1024
 
706
- - name: ERBOpenTagNode
1025
+ - name: "ERBOpenTagNode"
707
1026
  fields:
708
- - name: tag_opening
709
- type: token
1027
+ - name: "tag_opening"
1028
+ type: "token"
1029
+
1030
+ - name: "content"
1031
+ type: "token"
710
1032
 
711
- - name: content
712
- type: token
1033
+ - name: "tag_closing"
1034
+ type: "token"
713
1035
 
714
- - name: tag_closing
715
- type: token
1036
+ - name: "tag_name"
1037
+ type: "token"
716
1038
 
717
- - name: tag_name
718
- type: token
1039
+ - name: "children"
1040
+ type: "array"
1041
+ kind: "Node"
719
1042
 
720
- - name: children
721
- type: array
722
- kind: Node
1043
+ - name: "HTMLTextNode"
1044
+ fields:
1045
+ - name: "content"
1046
+ type: "string"
723
1047
 
724
- - name: HTMLTextNode
1048
+ - name: "HTMLCommentNode"
725
1049
  fields:
726
- - name: content
727
- type: string
1050
+ - name: "comment_start"
1051
+ type: "token"
1052
+
1053
+ - name: "children"
1054
+ type: "array"
1055
+ kind: "Node"
728
1056
 
729
- - name: HTMLCommentNode
1057
+ - name: "comment_end"
1058
+ type: "token"
1059
+
1060
+ - name: "HTMLDoctypeNode"
730
1061
  fields:
731
- - name: comment_start
732
- type: token
1062
+ - name: "tag_opening"
1063
+ type: "token"
733
1064
 
734
- - name: children
735
- type: array
736
- kind: Node
1065
+ - name: "children"
1066
+ type: "array"
1067
+ kind: "Node"
737
1068
 
738
- - name: comment_end
739
- type: token
1069
+ - name: "tag_closing"
1070
+ type: "token"
740
1071
 
741
- - name: HTMLDoctypeNode
1072
+ - name: "XMLDeclarationNode"
742
1073
  fields:
743
- - name: tag_opening
744
- type: token
1074
+ - name: "tag_opening"
1075
+ type: "token"
745
1076
 
746
- - name: children
747
- type: array
748
- kind: Node
1077
+ - name: "children"
1078
+ type: "array"
1079
+ kind: "Node"
749
1080
 
750
- - name: tag_closing
751
- type: token
1081
+ - name: "tag_closing"
1082
+ type: "token"
752
1083
 
753
- - name: XMLDeclarationNode
1084
+ - name: "XMLProcessingInstructionNode"
754
1085
  fields:
755
- - name: tag_opening
756
- type: token
1086
+ - name: "tag_opening"
1087
+ type: "token"
1088
+
1089
+ - name: "target"
1090
+ type: "token"
757
1091
 
758
- - name: children
759
- type: array
760
- kind: Node
1092
+ - name: "children"
1093
+ type: "array"
1094
+ kind: "Node"
761
1095
 
762
- - name: tag_closing
763
- type: token
1096
+ - name: "tag_closing"
1097
+ type: "token"
764
1098
 
765
- - name: CDATANode
1099
+ - name: "CDATANode"
766
1100
  fields:
767
- - name: tag_opening
768
- type: token
1101
+ - name: "tag_opening"
1102
+ type: "token"
769
1103
 
770
- - name: children
771
- type: array
772
- kind: Node
1104
+ - name: "children"
1105
+ type: "array"
1106
+ kind: "Node"
773
1107
 
774
- - name: tag_closing
775
- type: token
1108
+ - name: "tag_closing"
1109
+ type: "token"
776
1110
 
777
- - name: WhitespaceNode
1111
+ - name: "WhitespaceNode"
778
1112
  fields:
779
- - name: value
780
- type: token
1113
+ - name: "value"
1114
+ type: "token"
781
1115
 
782
- - name: ERBContentNode
1116
+ - name: "ERBContentNode"
783
1117
  fields:
784
- - name: tag_opening
785
- type: token
1118
+ - name: "tag_opening"
1119
+ type: "token"
786
1120
 
787
- - name: content
788
- type: token
1121
+ - name: "content"
1122
+ type: "token"
789
1123
 
790
- - name: tag_closing
791
- type: token
1124
+ - name: "tag_closing"
1125
+ type: "token"
792
1126
 
793
- - name: analyzed_ruby
794
- type: analyzed_ruby
1127
+ - name: "analyzed_ruby"
1128
+ type: "analyzed_ruby"
795
1129
 
796
- - name: parsed
797
- type: boolean
1130
+ - name: "parsed"
1131
+ type: "boolean"
798
1132
 
799
- - name: valid
800
- type: boolean
1133
+ - name: "valid"
1134
+ type: "boolean"
801
1135
 
802
- - name: prism_node
803
- type: prism_node
1136
+ - name: "prism_node"
1137
+ type: "prism_node"
804
1138
 
805
- - name: ERBEndNode
1139
+ - name: "ERBEndNode"
806
1140
  fields:
807
- - name: tag_opening
808
- type: token
1141
+ - name: "tag_opening"
1142
+ type: "token"
809
1143
 
810
- - name: content
811
- type: token
1144
+ - name: "content"
1145
+ type: "token"
812
1146
 
813
- - name: tag_closing
814
- type: token
1147
+ - name: "tag_closing"
1148
+ type: "token"
815
1149
 
816
- - name: ERBElseNode
1150
+ - name: "ERBElseNode"
817
1151
  fields:
818
- - name: tag_opening
819
- type: token
1152
+ - name: "tag_opening"
1153
+ type: "token"
820
1154
 
821
- - name: content
822
- type: token
1155
+ - name: "content"
1156
+ type: "token"
823
1157
 
824
- - name: tag_closing
825
- type: token
1158
+ - name: "tag_closing"
1159
+ type: "token"
826
1160
 
827
- - name: statements
828
- type: array
829
- kind: Node
1161
+ - name: "statements"
1162
+ type: "array"
1163
+ kind: "Node"
830
1164
 
831
- - name: ERBIfNode
1165
+ - name: "ERBIfNode"
832
1166
  fields:
833
- - name: tag_opening
834
- type: token
1167
+ - name: "tag_opening"
1168
+ type: "token"
835
1169
 
836
- - name: content
837
- type: token
1170
+ - name: "content"
1171
+ type: "token"
838
1172
 
839
- - name: tag_closing
840
- type: token
1173
+ - name: "tag_closing"
1174
+ type: "token"
841
1175
 
842
- - name: then_keyword
843
- type: location
1176
+ - name: "then_keyword"
1177
+ type: "location"
844
1178
 
845
1179
  # - name: predicate
846
1180
  # type: prism_node
847
1181
 
848
- - name: prism_node
849
- type: prism_node
1182
+ - name: "prism_node"
1183
+ type: "prism_node"
850
1184
 
851
- - name: statements
852
- type: array
853
- kind: Node
1185
+ - name: "statements"
1186
+ type: "array"
1187
+ kind: "Node"
854
1188
 
855
- - name: subsequent
856
- type: node
1189
+ - name: "subsequent"
1190
+ type: "node"
857
1191
  kind:
858
- - ERBIfNode
859
- - ERBElseNode
1192
+ - "ERBIfNode"
1193
+ - "ERBElseNode"
860
1194
 
861
- - name: end_node
862
- type: node
863
- kind: ERBEndNode
1195
+ - name: "end_node"
1196
+ type: "node"
1197
+ kind: "ERBEndNode"
864
1198
 
865
- - name: ERBBlockNode
1199
+ - name: "ERBBlockNode"
866
1200
  fields:
867
- - name: tag_opening
868
- type: token
1201
+ - name: "tag_opening"
1202
+ type: "token"
869
1203
 
870
- - name: content
871
- type: token
1204
+ - name: "content"
1205
+ type: "token"
872
1206
 
873
- - name: tag_closing
874
- type: token
1207
+ - name: "tag_closing"
1208
+ type: "token"
875
1209
 
876
1210
  # - name: block_type
877
1211
  # type: string
@@ -879,182 +1213,238 @@ nodes:
879
1213
  # - name: opener
880
1214
  # type: prism_node
881
1215
 
882
- - name: prism_node
883
- type: prism_node
1216
+ - name: "prism_node"
1217
+ type: "prism_node"
1218
+
1219
+ - name: "body"
1220
+ type: "array"
1221
+ kind: "Node"
1222
+
1223
+ - name: "block_arguments"
1224
+ type: "array"
1225
+ kind:
1226
+ - "RubyParameterNode"
1227
+
1228
+ - name: "rescue_clause"
1229
+ type: "node"
1230
+ kind: "ERBRescueNode"
1231
+
1232
+ - name: "else_clause"
1233
+ type: "node"
1234
+ kind: "ERBElseNode"
1235
+
1236
+ - name: "ensure_clause"
1237
+ type: "node"
1238
+ kind: "ERBEnsureNode"
1239
+
1240
+ - name: "end_node"
1241
+ type: "node"
1242
+ kind: "ERBEndNode"
1243
+
1244
+ - name: "ERBIterationBlockNode"
1245
+ fields:
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"
884
1257
 
885
- - name: body
886
- type: array
887
- kind: Node
1258
+ - name: "receiver"
1259
+ type: "token"
888
1260
 
889
- - name: block_arguments
890
- type: array
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"
891
1281
  kind:
892
- - RubyParameterNode
1282
+ - "RubyParameterNode"
893
1283
 
894
- - name: rescue_clause
895
- type: node
896
- kind: ERBRescueNode
1284
+ - name: "rescue_clause"
1285
+ type: "node"
1286
+ kind: "ERBRescueNode"
897
1287
 
898
- - name: else_clause
899
- type: node
900
- kind: ERBElseNode
1288
+ - name: "else_clause"
1289
+ type: "node"
1290
+ kind: "ERBElseNode"
901
1291
 
902
- - name: ensure_clause
903
- type: node
904
- kind: ERBEnsureNode
1292
+ - name: "ensure_clause"
1293
+ type: "node"
1294
+ kind: "ERBEnsureNode"
905
1295
 
906
- - name: end_node
907
- type: node
908
- kind: ERBEndNode
1296
+ - name: "end_node"
1297
+ type: "node"
1298
+ kind: "ERBEndNode"
909
1299
 
910
- - name: ERBWhenNode
1300
+ - name: "ERBWhenNode"
911
1301
  fields:
912
- - name: tag_opening
913
- type: token
1302
+ - name: "tag_opening"
1303
+ type: "token"
914
1304
 
915
- - name: content
916
- type: token
1305
+ - name: "content"
1306
+ type: "token"
917
1307
 
918
- - name: tag_closing
919
- type: token
1308
+ - name: "tag_closing"
1309
+ type: "token"
920
1310
 
921
- - name: then_keyword
922
- type: location
1311
+ - name: "then_keyword"
1312
+ type: "location"
923
1313
 
924
1314
  # - name: conditions
925
1315
  # type: array
926
1316
  # kind: prism_node
927
1317
 
928
- - name: statements
929
- type: array
930
- kind: Node
1318
+ - name: "statements"
1319
+ type: "array"
1320
+ kind: "Node"
931
1321
 
932
- - name: ERBCaseNode
1322
+ - name: "ERBCaseNode"
933
1323
  fields:
934
- - name: tag_opening
935
- type: token
1324
+ - name: "tag_opening"
1325
+ type: "token"
936
1326
 
937
- - name: content
938
- type: token
1327
+ - name: "content"
1328
+ type: "token"
939
1329
 
940
- - name: tag_closing
941
- type: token
1330
+ - name: "tag_closing"
1331
+ type: "token"
942
1332
 
943
- - name: children
944
- type: array
945
- kind: Node
1333
+ - name: "children"
1334
+ type: "array"
1335
+ kind: "Node"
946
1336
 
947
1337
  # - name: predicate
948
1338
  # type: prism_node
949
1339
 
950
- - name: prism_node
951
- type: prism_node
1340
+ - name: "prism_node"
1341
+ type: "prism_node"
952
1342
 
953
- - name: conditions
954
- type: array
955
- kind: ERBWhenNode
1343
+ - name: "conditions"
1344
+ type: "array"
1345
+ kind: "ERBWhenNode"
956
1346
 
957
- - name: else_clause
958
- type: node
959
- kind: ERBElseNode
1347
+ - name: "else_clause"
1348
+ type: "node"
1349
+ kind: "ERBElseNode"
960
1350
 
961
- - name: end_node
962
- type: node
963
- kind: ERBEndNode
1351
+ - name: "end_node"
1352
+ type: "node"
1353
+ kind: "ERBEndNode"
964
1354
 
965
- - name: ERBCaseMatchNode
1355
+ - name: "ERBCaseMatchNode"
966
1356
  fields:
967
- - name: tag_opening
968
- type: token
1357
+ - name: "tag_opening"
1358
+ type: "token"
969
1359
 
970
- - name: content
971
- type: token
1360
+ - name: "content"
1361
+ type: "token"
972
1362
 
973
- - name: tag_closing
974
- type: token
1363
+ - name: "tag_closing"
1364
+ type: "token"
975
1365
 
976
- - name: children
977
- type: array
978
- kind: Node
1366
+ - name: "children"
1367
+ type: "array"
1368
+ kind: "Node"
979
1369
 
980
1370
  # - name: predicate
981
1371
  # type: prism_node
982
1372
 
983
- - name: prism_node
984
- type: prism_node
1373
+ - name: "prism_node"
1374
+ type: "prism_node"
985
1375
 
986
- - name: conditions
987
- type: array
988
- kind: ERBInNode
1376
+ - name: "conditions"
1377
+ type: "array"
1378
+ kind: "ERBInNode"
989
1379
 
990
- - name: else_clause
991
- type: node
992
- kind: ERBElseNode
1380
+ - name: "else_clause"
1381
+ type: "node"
1382
+ kind: "ERBElseNode"
993
1383
 
994
- - name: end_node
995
- type: node
996
- kind: ERBEndNode
1384
+ - name: "end_node"
1385
+ type: "node"
1386
+ kind: "ERBEndNode"
997
1387
 
998
- - name: ERBWhileNode
1388
+ - name: "ERBWhileNode"
999
1389
  fields:
1000
- - name: tag_opening
1001
- type: token
1390
+ - name: "tag_opening"
1391
+ type: "token"
1002
1392
 
1003
- - name: content
1004
- type: token
1393
+ - name: "content"
1394
+ type: "token"
1005
1395
 
1006
- - name: tag_closing
1007
- type: token
1396
+ - name: "tag_closing"
1397
+ type: "token"
1008
1398
 
1009
1399
  # - name: predicate
1010
1400
  # type: prism_node
1011
1401
 
1012
- - name: prism_node
1013
- type: prism_node
1402
+ - name: "prism_node"
1403
+ type: "prism_node"
1014
1404
 
1015
- - name: statements
1016
- type: array
1017
- kind: Node
1405
+ - name: "statements"
1406
+ type: "array"
1407
+ kind: "Node"
1018
1408
 
1019
- - name: end_node
1020
- type: node
1021
- kind: ERBEndNode
1409
+ - name: "end_node"
1410
+ type: "node"
1411
+ kind: "ERBEndNode"
1022
1412
 
1023
- - name: ERBUntilNode
1413
+ - name: "ERBUntilNode"
1024
1414
  fields:
1025
- - name: tag_opening
1026
- type: token
1415
+ - name: "tag_opening"
1416
+ type: "token"
1027
1417
 
1028
- - name: content
1029
- type: token
1418
+ - name: "content"
1419
+ type: "token"
1030
1420
 
1031
- - name: tag_closing
1032
- type: token
1421
+ - name: "tag_closing"
1422
+ type: "token"
1033
1423
 
1034
1424
  # - name: predicate
1035
1425
  # type: prism_node
1036
1426
 
1037
- - name: prism_node
1038
- type: prism_node
1427
+ - name: "prism_node"
1428
+ type: "prism_node"
1039
1429
 
1040
- - name: statements
1041
- type: array
1042
- kind: Node
1430
+ - name: "statements"
1431
+ type: "array"
1432
+ kind: "Node"
1043
1433
 
1044
- - name: end_node
1045
- type: node
1046
- kind: ERBEndNode
1434
+ - name: "end_node"
1435
+ type: "node"
1436
+ kind: "ERBEndNode"
1047
1437
 
1048
- - name: ERBForNode
1438
+ - name: "ERBForNode"
1049
1439
  fields:
1050
- - name: tag_opening
1051
- type: token
1440
+ - name: "tag_opening"
1441
+ type: "token"
1052
1442
 
1053
- - name: content
1054
- type: token
1443
+ - name: "content"
1444
+ type: "token"
1055
1445
 
1056
- - name: tag_closing
1057
- type: token
1446
+ - name: "tag_closing"
1447
+ type: "token"
1058
1448
 
1059
1449
  # - name: index
1060
1450
  # type: prism_node
@@ -1062,27 +1452,27 @@ nodes:
1062
1452
  # - name: collection
1063
1453
  # type: prism_node
1064
1454
 
1065
- - name: prism_node
1066
- type: prism_node
1455
+ - name: "prism_node"
1456
+ type: "prism_node"
1067
1457
 
1068
- - name: statements
1069
- type: array
1070
- kind: Node
1458
+ - name: "statements"
1459
+ type: "array"
1460
+ kind: "Node"
1071
1461
 
1072
- - name: end_node
1073
- type: node
1074
- kind: ERBEndNode
1462
+ - name: "end_node"
1463
+ type: "node"
1464
+ kind: "ERBEndNode"
1075
1465
 
1076
- - name: ERBRescueNode
1466
+ - name: "ERBRescueNode"
1077
1467
  fields:
1078
- - name: tag_opening
1079
- type: token
1468
+ - name: "tag_opening"
1469
+ type: "token"
1080
1470
 
1081
- - name: content
1082
- type: token
1471
+ - name: "content"
1472
+ type: "token"
1083
1473
 
1084
- - name: tag_closing
1085
- type: token
1474
+ - name: "tag_closing"
1475
+ type: "token"
1086
1476
 
1087
1477
  # - name: exceptions
1088
1478
  # type: array
@@ -1091,270 +1481,343 @@ nodes:
1091
1481
  # - name: reference
1092
1482
  # type: prism_node
1093
1483
 
1094
- - name: statements
1095
- type: array
1096
- kind: Node
1484
+ - name: "statements"
1485
+ type: "array"
1486
+ kind: "Node"
1097
1487
 
1098
- - name: subsequent
1099
- type: node
1100
- kind: ERBRescueNode
1488
+ - name: "subsequent"
1489
+ type: "node"
1490
+ kind: "ERBRescueNode"
1101
1491
 
1102
- - name: ERBEnsureNode
1492
+ - name: "ERBEnsureNode"
1103
1493
  fields:
1104
- - name: tag_opening
1105
- type: token
1494
+ - name: "tag_opening"
1495
+ type: "token"
1106
1496
 
1107
- - name: content
1108
- type: token
1497
+ - name: "content"
1498
+ type: "token"
1109
1499
 
1110
- - name: tag_closing
1111
- type: token
1500
+ - name: "tag_closing"
1501
+ type: "token"
1112
1502
 
1113
- - name: statements
1114
- type: array
1115
- kind: Node
1503
+ - name: "statements"
1504
+ type: "array"
1505
+ kind: "Node"
1116
1506
 
1117
- - name: ERBBeginNode
1507
+ - name: "ERBBeginNode"
1118
1508
  fields:
1119
- - name: tag_opening
1120
- type: token
1509
+ - name: "tag_opening"
1510
+ type: "token"
1121
1511
 
1122
- - name: content
1123
- type: token
1512
+ - name: "content"
1513
+ type: "token"
1124
1514
 
1125
- - name: tag_closing
1126
- type: token
1515
+ - name: "tag_closing"
1516
+ type: "token"
1127
1517
 
1128
- - name: prism_node
1129
- type: prism_node
1518
+ - name: "prism_node"
1519
+ type: "prism_node"
1130
1520
 
1131
- - name: statements
1132
- type: array
1133
- kind: Node
1521
+ - name: "statements"
1522
+ type: "array"
1523
+ kind: "Node"
1134
1524
 
1135
- - name: rescue_clause
1136
- type: node
1137
- kind: ERBRescueNode
1525
+ - name: "rescue_clause"
1526
+ type: "node"
1527
+ kind: "ERBRescueNode"
1138
1528
 
1139
- - name: else_clause
1140
- type: node
1141
- kind: ERBElseNode
1529
+ - name: "else_clause"
1530
+ type: "node"
1531
+ kind: "ERBElseNode"
1142
1532
 
1143
- - name: ensure_clause
1144
- type: node
1145
- kind: ERBEnsureNode
1533
+ - name: "ensure_clause"
1534
+ type: "node"
1535
+ kind: "ERBEnsureNode"
1146
1536
 
1147
- - name: end_node
1148
- type: node
1149
- kind: ERBEndNode
1537
+ - name: "end_node"
1538
+ type: "node"
1539
+ kind: "ERBEndNode"
1150
1540
 
1151
- - name: ERBUnlessNode
1541
+ - name: "ERBUnlessNode"
1152
1542
  fields:
1153
- - name: tag_opening
1154
- type: token
1543
+ - name: "tag_opening"
1544
+ type: "token"
1155
1545
 
1156
- - name: content
1157
- type: token
1546
+ - name: "content"
1547
+ type: "token"
1158
1548
 
1159
- - name: tag_closing
1160
- type: token
1549
+ - name: "tag_closing"
1550
+ type: "token"
1161
1551
 
1162
- - name: then_keyword
1163
- type: location
1552
+ - name: "then_keyword"
1553
+ type: "location"
1164
1554
 
1165
1555
  # - name: predicate
1166
1556
  # type: prism_node
1167
1557
 
1168
- - name: prism_node
1169
- type: prism_node
1558
+ - name: "prism_node"
1559
+ type: "prism_node"
1170
1560
 
1171
- - name: statements
1172
- type: array
1173
- kind: Node
1561
+ - name: "statements"
1562
+ type: "array"
1563
+ kind: "Node"
1174
1564
 
1175
- - name: else_clause
1176
- type: node
1177
- kind: ERBElseNode
1565
+ - name: "else_clause"
1566
+ type: "node"
1567
+ kind: "ERBElseNode"
1178
1568
 
1179
- - name: end_node
1180
- type: node
1181
- kind: ERBEndNode
1569
+ - name: "end_node"
1570
+ type: "node"
1571
+ kind: "ERBEndNode"
1182
1572
 
1183
- - name: RubyRenderLocalNode
1573
+ - name: "RubyRenderLocalNode"
1184
1574
  fields:
1185
- - name: name
1186
- type: token
1575
+ - name: "name"
1576
+ type: "token"
1187
1577
 
1188
- - name: value
1189
- type: node
1190
- kind: RubyLiteralNode
1578
+ - name: "value"
1579
+ type: "node"
1580
+ kind: "RubyLiteralNode"
1191
1581
 
1192
- - name: RubyRenderKeywordsNode
1582
+ - name: "RubyRenderKeywordsNode"
1193
1583
  fields:
1194
- - name: partial
1195
- type: token
1584
+ - name: "partial"
1585
+ type: "token"
1196
1586
 
1197
- - name: template_path
1198
- type: token
1587
+ - name: "template_path"
1588
+ type: "token"
1199
1589
 
1200
- - name: layout
1201
- type: token
1590
+ - name: "layout"
1591
+ type: "token"
1202
1592
 
1203
- - name: file
1204
- type: token
1593
+ - name: "file"
1594
+ type: "token"
1205
1595
 
1206
- - name: inline_template
1207
- type: token
1596
+ - name: "inline_template"
1597
+ type: "token"
1208
1598
 
1209
- - name: body
1210
- type: token
1599
+ - name: "body"
1600
+ type: "token"
1211
1601
 
1212
- - name: plain
1213
- type: token
1602
+ - name: "plain"
1603
+ type: "token"
1214
1604
 
1215
- - name: html
1216
- type: token
1605
+ - name: "html"
1606
+ type: "token"
1217
1607
 
1218
- - name: renderable
1219
- type: token
1608
+ - name: "renderable"
1609
+ type: "token"
1220
1610
 
1221
- - name: collection
1222
- type: token
1611
+ - name: "collection"
1612
+ type: "token"
1223
1613
 
1224
- - name: object
1225
- type: token
1614
+ - name: "object"
1615
+ type: "token"
1226
1616
 
1227
- - name: as_name
1228
- type: token
1617
+ - name: "as_name"
1618
+ type: "token"
1229
1619
 
1230
- - name: spacer_template
1231
- type: token
1620
+ - name: "spacer_template"
1621
+ type: "token"
1232
1622
 
1233
- - name: formats
1234
- type: token
1623
+ - name: "formats"
1624
+ type: "token"
1235
1625
 
1236
- - name: variants
1237
- type: token
1626
+ - name: "variants"
1627
+ type: "token"
1238
1628
 
1239
- - name: handlers
1240
- type: token
1629
+ - name: "handlers"
1630
+ type: "token"
1241
1631
 
1242
- - name: content_type
1243
- type: token
1632
+ - name: "content_type"
1633
+ type: "token"
1634
+
1635
+ - name: "locals"
1636
+ type: "array"
1637
+ kind:
1638
+ - "RubyRenderLocalNode"
1244
1639
 
1245
- - name: locals
1246
- type: array
1640
+ - name: "state"
1641
+ type: "array"
1247
1642
  kind:
1248
- - RubyRenderLocalNode
1643
+ - "HerbStateDeclarationNode"
1249
1644
 
1250
- - name: ERBRenderNode
1645
+ - name: "state_location"
1646
+ type: "location"
1647
+
1648
+ - name: "ERBRenderNode"
1251
1649
  fields:
1252
- - name: tag_opening
1253
- type: token
1650
+ - name: "tag_opening"
1651
+ type: "token"
1254
1652
 
1255
- - name: content
1256
- type: token
1653
+ - name: "content"
1654
+ type: "token"
1257
1655
 
1258
- - name: tag_closing
1259
- type: token
1656
+ - name: "tag_closing"
1657
+ type: "token"
1260
1658
 
1261
- - name: analyzed_ruby
1262
- type: analyzed_ruby
1659
+ - name: "analyzed_ruby"
1660
+ type: "analyzed_ruby"
1263
1661
 
1264
- - name: prism_node
1265
- type: prism_node
1662
+ - name: "prism_node"
1663
+ type: "prism_node"
1266
1664
 
1267
- - name: keywords
1268
- type: node
1269
- kind: RubyRenderKeywordsNode
1665
+ - name: "keywords"
1666
+ type: "node"
1667
+ kind: "RubyRenderKeywordsNode"
1270
1668
 
1271
- - name: body
1272
- type: array
1273
- kind: Node
1669
+ - name: "body"
1670
+ type: "array"
1671
+ kind: "Node"
1274
1672
 
1275
- - name: block_arguments
1276
- type: array
1673
+ - name: "block_arguments"
1674
+ type: "array"
1277
1675
  kind:
1278
- - RubyParameterNode
1676
+ - "RubyParameterNode"
1279
1677
 
1280
- - name: rescue_clause
1281
- type: node
1282
- kind: ERBRescueNode
1678
+ - name: "rescue_clause"
1679
+ type: "node"
1680
+ kind: "ERBRescueNode"
1283
1681
 
1284
- - name: else_clause
1285
- type: node
1286
- kind: ERBElseNode
1682
+ - name: "else_clause"
1683
+ type: "node"
1684
+ kind: "ERBElseNode"
1287
1685
 
1288
- - name: ensure_clause
1289
- type: node
1290
- kind: ERBEnsureNode
1686
+ - name: "ensure_clause"
1687
+ type: "node"
1688
+ kind: "ERBEnsureNode"
1291
1689
 
1292
- - name: end_node
1293
- type: node
1294
- kind: ERBEndNode
1690
+ - name: "end_node"
1691
+ type: "node"
1692
+ kind: "ERBEndNode"
1295
1693
 
1296
- - name: RubyParameterNode
1694
+ - name: "RubyParameterNode"
1297
1695
  fields:
1298
- - name: name
1299
- type: token
1696
+ - name: "name"
1697
+ type: "token"
1300
1698
 
1301
- - name: default_value
1302
- type: node
1303
- kind: RubyLiteralNode
1699
+ - name: "default_value"
1700
+ type: "node"
1701
+ kind: "RubyLiteralNode"
1304
1702
 
1305
- - name: kind
1306
- type: string
1703
+ - name: "kind"
1704
+ type: "string"
1307
1705
 
1308
- - name: required
1309
- type: boolean
1706
+ - name: "required"
1707
+ type: "boolean"
1310
1708
 
1311
- - name: ERBStrictLocalsNode
1709
+ - name: "ERBStrictLocalsNode"
1312
1710
  fields:
1313
- - name: tag_opening
1314
- type: token
1711
+ - name: "tag_opening"
1712
+ type: "token"
1315
1713
 
1316
- - name: content
1317
- type: token
1714
+ - name: "content"
1715
+ type: "token"
1318
1716
 
1319
- - name: tag_closing
1320
- type: token
1717
+ - name: "tag_closing"
1718
+ type: "token"
1321
1719
 
1322
- - name: analyzed_ruby
1323
- type: analyzed_ruby
1720
+ - name: "analyzed_ruby"
1721
+ type: "analyzed_ruby"
1324
1722
 
1325
- - name: prism_node
1326
- type: prism_node
1723
+ - name: "prism_node"
1724
+ type: "prism_node"
1327
1725
 
1328
- - name: locals
1329
- type: array
1726
+ - name: "locals"
1727
+ type: "array"
1330
1728
  kind:
1331
- - 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: "prism_node"
1743
+ type: "prism_node"
1744
+
1745
+ - name: "ERBInNode"
1746
+ fields:
1747
+ - name: "tag_opening"
1748
+ type: "token"
1332
1749
 
1333
- - name: ERBYieldNode
1750
+ - name: "content"
1751
+ type: "token"
1752
+
1753
+ - name: "tag_closing"
1754
+ type: "token"
1755
+
1756
+ - name: "then_keyword"
1757
+ type: "location"
1758
+
1759
+ - name: "statements"
1760
+ type: "array"
1761
+ kind: "Node"
1762
+
1763
+ - name: "HerbDirectiveNode"
1764
+ fields:
1765
+ - name: "tag_opening"
1766
+ type: "token"
1767
+
1768
+ - name: "content"
1769
+ type: "token"
1770
+
1771
+ - name: "tag_closing"
1772
+ type: "token"
1773
+
1774
+ - name: "key"
1775
+ type: "token"
1776
+
1777
+ - name: "arguments"
1778
+ type: "token"
1779
+
1780
+ - name: "HerbStateDeclarationNode"
1334
1781
  fields:
1335
- - name: tag_opening
1336
- type: token
1782
+ - name: "name"
1783
+ type: "token"
1337
1784
 
1338
- - name: content
1339
- type: token
1785
+ - name: "default_value"
1786
+ type: "node"
1787
+ kind: "RubyLiteralNode"
1340
1788
 
1341
- - name: tag_closing
1342
- type: token
1789
+ - name: "kind"
1790
+ type: "string"
1343
1791
 
1344
- - name: ERBInNode
1792
+ - name: "HerbStateDirectiveNode"
1345
1793
  fields:
1346
- - name: tag_opening
1347
- type: token
1794
+ - name: "tag_opening"
1795
+ type: "token"
1796
+
1797
+ - name: "content"
1798
+ type: "token"
1799
+
1800
+ - name: "tag_closing"
1801
+ type: "token"
1348
1802
 
1349
- - name: content
1350
- type: token
1803
+ - name: "key"
1804
+ type: "token"
1351
1805
 
1352
- - name: tag_closing
1353
- type: token
1806
+ - name: "signature"
1807
+ type: "token"
1808
+
1809
+ - name: "states"
1810
+ type: "array"
1811
+ kind:
1812
+ - "HerbStateDeclarationNode"
1813
+
1814
+ - name: "ERBCommentNode"
1815
+ fields:
1816
+ - name: "tag_opening"
1817
+ type: "token"
1354
1818
 
1355
- - name: then_keyword
1356
- type: location
1819
+ - name: "content"
1820
+ type: "token"
1357
1821
 
1358
- - name: statements
1359
- type: array
1360
- kind: Node
1822
+ - name: "tag_closing"
1823
+ type: "token"