herb 0.10.3-x86-linux-gnu → 0.11.0-x86-linux-gnu

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (788) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +16 -6
  3. data/README.md +36 -119
  4. data/Rakefile +2 -11
  5. data/config/action_view_helpers/actioncable/action_cable_helper/action_cable_meta_tag.yml +12 -8
  6. data/config/action_view_helpers/actionpack/content_security_policy/content_security_policy?.yml +9 -6
  7. data/config/action_view_helpers/actionpack/content_security_policy/content_security_policy_nonce.yml +9 -6
  8. data/config/action_view_helpers/actionpack/polymorphic_routes/polymorphic_path.yml +20 -12
  9. data/config/action_view_helpers/actionpack/polymorphic_routes/polymorphic_url.yml +30 -18
  10. data/config/action_view_helpers/actionpack/request_forgery_protection/form_authenticity_token.yml +15 -9
  11. data/config/action_view_helpers/actionpack/request_forgery_protection/protect_against_forgery?.yml +9 -6
  12. data/config/action_view_helpers/actiontext/content_helper/render_action_text_content.yml +15 -9
  13. data/config/action_view_helpers/actiontext/content_helper/sanitize_action_text_content.yml +15 -9
  14. data/config/action_view_helpers/actiontext/tag_helper/rich_textarea_tag.yml +34 -22
  15. data/config/action_view_helpers/actionview/active_model_helper/error_message.yml +9 -6
  16. data/config/action_view_helpers/actionview/active_model_helper/error_wrapping.yml +9 -6
  17. data/config/action_view_helpers/actionview/active_model_helper/object.yml +9 -6
  18. data/config/action_view_helpers/actionview/asset_tag_helper/apply_stylesheet_media_default.yml +9 -6
  19. data/config/action_view_helpers/actionview/asset_tag_helper/audio_tag.yml +40 -27
  20. data/config/action_view_helpers/actionview/asset_tag_helper/auto_discovery_link_tag.yml +37 -23
  21. data/config/action_view_helpers/actionview/asset_tag_helper/auto_include_nonce.yml +9 -6
  22. data/config/action_view_helpers/actionview/asset_tag_helper/auto_include_nonce_for_scripts.yml +9 -6
  23. data/config/action_view_helpers/actionview/asset_tag_helper/auto_include_nonce_for_styles.yml +9 -6
  24. data/config/action_view_helpers/actionview/asset_tag_helper/favicon_link_tag.yml +32 -22
  25. data/config/action_view_helpers/actionview/asset_tag_helper/image_decoding.yml +9 -6
  26. data/config/action_view_helpers/actionview/asset_tag_helper/image_loading.yml +9 -6
  27. data/config/action_view_helpers/actionview/asset_tag_helper/image_tag.yml +67 -46
  28. data/config/action_view_helpers/actionview/asset_tag_helper/javascript_include_tag.yml +58 -39
  29. data/config/action_view_helpers/actionview/asset_tag_helper/picture_tag.yml +22 -14
  30. data/config/action_view_helpers/actionview/asset_tag_helper/preload_link_tag.yml +45 -30
  31. data/config/action_view_helpers/actionview/asset_tag_helper/preload_links_header.yml +9 -6
  32. data/config/action_view_helpers/actionview/asset_tag_helper/stylesheet_link_tag.yml +49 -30
  33. data/config/action_view_helpers/actionview/asset_tag_helper/video_tag.yml +53 -35
  34. data/config/action_view_helpers/actionview/asset_url_helper/asset_path.yml +16 -10
  35. data/config/action_view_helpers/actionview/asset_url_helper/asset_url.yml +16 -10
  36. data/config/action_view_helpers/actionview/asset_url_helper/audio_path.yml +16 -10
  37. data/config/action_view_helpers/actionview/asset_url_helper/audio_url.yml +16 -10
  38. data/config/action_view_helpers/actionview/asset_url_helper/compute_asset_extname.yml +9 -6
  39. data/config/action_view_helpers/actionview/asset_url_helper/compute_asset_host.yml +9 -6
  40. data/config/action_view_helpers/actionview/asset_url_helper/compute_asset_path.yml +9 -6
  41. data/config/action_view_helpers/actionview/asset_url_helper/font_path.yml +16 -10
  42. data/config/action_view_helpers/actionview/asset_url_helper/font_url.yml +16 -10
  43. data/config/action_view_helpers/actionview/asset_url_helper/image_path.yml +16 -10
  44. data/config/action_view_helpers/actionview/asset_url_helper/image_url.yml +16 -10
  45. data/config/action_view_helpers/actionview/asset_url_helper/javascript_path.yml +16 -10
  46. data/config/action_view_helpers/actionview/asset_url_helper/javascript_url.yml +16 -10
  47. data/config/action_view_helpers/actionview/asset_url_helper/public_compute_asset_path.yml +9 -6
  48. data/config/action_view_helpers/actionview/asset_url_helper/stylesheet_path.yml +16 -10
  49. data/config/action_view_helpers/actionview/asset_url_helper/stylesheet_url.yml +16 -10
  50. data/config/action_view_helpers/actionview/asset_url_helper/video_path.yml +16 -10
  51. data/config/action_view_helpers/actionview/asset_url_helper/video_url.yml +16 -10
  52. data/config/action_view_helpers/actionview/atom_feed_helper/atom_feed.yml +52 -27
  53. data/config/action_view_helpers/actionview/cache_helper/cache.yml +25 -15
  54. data/config/action_view_helpers/actionview/cache_helper/cache_fragment_name.yml +9 -6
  55. data/config/action_view_helpers/actionview/cache_helper/cache_if.yml +20 -12
  56. data/config/action_view_helpers/actionview/cache_helper/cache_unless.yml +20 -12
  57. data/config/action_view_helpers/actionview/cache_helper/caching_predicate.yml +9 -6
  58. data/config/action_view_helpers/actionview/cache_helper/digest_path_from_template.yml +9 -6
  59. data/config/action_view_helpers/actionview/cache_helper/fragment_for.yml +9 -6
  60. data/config/action_view_helpers/actionview/cache_helper/fragment_name_with_digest.yml +9 -6
  61. data/config/action_view_helpers/actionview/cache_helper/read_fragment_for.yml +9 -6
  62. data/config/action_view_helpers/actionview/cache_helper/uncacheable.yml +9 -6
  63. data/config/action_view_helpers/actionview/cache_helper/write_fragment_for.yml +9 -6
  64. data/config/action_view_helpers/actionview/capture_helper/capture.yml +9 -6
  65. data/config/action_view_helpers/actionview/capture_helper/content_for.yml +20 -12
  66. data/config/action_view_helpers/actionview/capture_helper/content_for_predicate.yml +15 -9
  67. data/config/action_view_helpers/actionview/capture_helper/provide.yml +15 -9
  68. data/config/action_view_helpers/actionview/capture_helper/with_output_buffer.yml +9 -6
  69. data/config/action_view_helpers/actionview/content_exfiltration_prevention_helper/prepend_content_exfiltration_prevention.yml +9 -6
  70. data/config/action_view_helpers/actionview/content_exfiltration_prevention_helper/prevent_content_exfiltration.yml +9 -6
  71. data/config/action_view_helpers/actionview/controller_helper/action_name.yml +9 -6
  72. data/config/action_view_helpers/actionview/controller_helper/assign_controller.yml +9 -6
  73. data/config/action_view_helpers/actionview/controller_helper/controller.yml +9 -6
  74. data/config/action_view_helpers/actionview/controller_helper/controller_name.yml +9 -6
  75. data/config/action_view_helpers/actionview/controller_helper/controller_path.yml +9 -6
  76. data/config/action_view_helpers/actionview/controller_helper/cookies.yml +9 -6
  77. data/config/action_view_helpers/actionview/controller_helper/flash.yml +9 -6
  78. data/config/action_view_helpers/actionview/controller_helper/headers.yml +9 -6
  79. data/config/action_view_helpers/actionview/controller_helper/logger.yml +9 -6
  80. data/config/action_view_helpers/actionview/controller_helper/params.yml +9 -6
  81. data/config/action_view_helpers/actionview/controller_helper/request.yml +9 -6
  82. data/config/action_view_helpers/actionview/controller_helper/request_forgery_protection_token.yml +9 -6
  83. data/config/action_view_helpers/actionview/controller_helper/response.yml +9 -6
  84. data/config/action_view_helpers/actionview/controller_helper/session.yml +9 -6
  85. data/config/action_view_helpers/actionview/csp_helper/csp_meta_tag.yml +18 -11
  86. data/config/action_view_helpers/actionview/csrf_helper/csrf_meta_tags.yml +16 -10
  87. data/config/action_view_helpers/actionview/date_helper/date_select.yml +85 -51
  88. data/config/action_view_helpers/actionview/date_helper/datetime_select.yml +65 -39
  89. data/config/action_view_helpers/actionview/date_helper/distance_of_time_in_words.yml +30 -18
  90. data/config/action_view_helpers/actionview/date_helper/relative_time_in_words.yml +35 -21
  91. data/config/action_view_helpers/actionview/date_helper/select_date.yml +50 -30
  92. data/config/action_view_helpers/actionview/date_helper/select_datetime.yml +65 -39
  93. data/config/action_view_helpers/actionview/date_helper/select_day.yml +40 -24
  94. data/config/action_view_helpers/actionview/date_helper/select_hour.yml +50 -30
  95. data/config/action_view_helpers/actionview/date_helper/select_minute.yml +40 -24
  96. data/config/action_view_helpers/actionview/date_helper/select_month.yml +60 -36
  97. data/config/action_view_helpers/actionview/date_helper/select_second.yml +35 -21
  98. data/config/action_view_helpers/actionview/date_helper/select_time.yml +55 -33
  99. data/config/action_view_helpers/actionview/date_helper/select_year.yml +45 -27
  100. data/config/action_view_helpers/actionview/date_helper/time_ago_in_words.yml +21 -13
  101. data/config/action_view_helpers/actionview/date_helper/time_select.yml +60 -36
  102. data/config/action_view_helpers/actionview/date_helper/time_tag.yml +32 -20
  103. data/config/action_view_helpers/actionview/debug_helper/debug.yml +15 -9
  104. data/config/action_view_helpers/actionview/form_builder/button.yml +60 -0
  105. data/config/action_view_helpers/actionview/form_builder/submit.yml +48 -0
  106. data/config/action_view_helpers/actionview/form_helper/apply_form_for_options.yml +9 -6
  107. data/config/action_view_helpers/actionview/form_helper/checkbox.yml +41 -25
  108. data/config/action_view_helpers/actionview/form_helper/color_field.yml +25 -15
  109. data/config/action_view_helpers/actionview/form_helper/date_field.yml +35 -21
  110. data/config/action_view_helpers/actionview/form_helper/datetime_field.yml +41 -25
  111. data/config/action_view_helpers/actionview/form_helper/email_field.yml +25 -15
  112. data/config/action_view_helpers/actionview/form_helper/emitted_hidden_id.yml +9 -6
  113. data/config/action_view_helpers/actionview/form_helper/fields.yml +37 -18
  114. data/config/action_view_helpers/actionview/form_helper/fields_for.yml +33 -15
  115. data/config/action_view_helpers/actionview/form_helper/file_field.yml +45 -27
  116. data/config/action_view_helpers/actionview/form_helper/form_for.yml +45 -24
  117. data/config/action_view_helpers/actionview/form_helper/form_with.yml +56 -30
  118. data/config/action_view_helpers/actionview/form_helper/form_with_generates_ids.yml +9 -6
  119. data/config/action_view_helpers/actionview/form_helper/form_with_generates_remote_forms.yml +9 -6
  120. data/config/action_view_helpers/actionview/form_helper/hidden_field.yml +25 -15
  121. data/config/action_view_helpers/actionview/form_helper/label.yml +52 -27
  122. data/config/action_view_helpers/actionview/form_helper/month_field.yml +25 -15
  123. data/config/action_view_helpers/actionview/form_helper/multipart.yml +9 -6
  124. data/config/action_view_helpers/actionview/form_helper/multiple_file_field_include_hidden.yml +9 -6
  125. data/config/action_view_helpers/actionview/form_helper/number_field.yml +45 -27
  126. data/config/action_view_helpers/actionview/form_helper/password_field.yml +25 -15
  127. data/config/action_view_helpers/actionview/form_helper/radio_button.yml +30 -18
  128. data/config/action_view_helpers/actionview/form_helper/range_field.yml +45 -27
  129. data/config/action_view_helpers/actionview/form_helper/search_field.yml +25 -15
  130. data/config/action_view_helpers/actionview/form_helper/telephone_field.yml +26 -16
  131. data/config/action_view_helpers/actionview/form_helper/text_field.yml +25 -15
  132. data/config/action_view_helpers/actionview/form_helper/textarea.yml +31 -19
  133. data/config/action_view_helpers/actionview/form_helper/time_field.yml +40 -24
  134. data/config/action_view_helpers/actionview/form_helper/url_field.yml +25 -15
  135. data/config/action_view_helpers/actionview/form_helper/week_field.yml +25 -15
  136. data/config/action_view_helpers/actionview/form_options_helper/collection_checkboxes.yml +58 -31
  137. data/config/action_view_helpers/actionview/form_options_helper/collection_radio_buttons.yml +57 -30
  138. data/config/action_view_helpers/actionview/form_options_helper/collection_select.yml +65 -39
  139. data/config/action_view_helpers/actionview/form_options_helper/grouped_collection_select.yml +65 -39
  140. data/config/action_view_helpers/actionview/form_options_helper/grouped_options_for_select.yml +35 -21
  141. data/config/action_view_helpers/actionview/form_options_helper/option_groups_from_collection_for_select.yml +40 -24
  142. data/config/action_view_helpers/actionview/form_options_helper/options_for_select.yml +20 -12
  143. data/config/action_view_helpers/actionview/form_options_helper/options_from_collection_for_select.yml +30 -18
  144. data/config/action_view_helpers/actionview/form_options_helper/select.yml +60 -36
  145. data/config/action_view_helpers/actionview/form_options_helper/time_zone_options_for_select.yml +25 -15
  146. data/config/action_view_helpers/actionview/form_options_helper/time_zone_select.yml +50 -30
  147. data/config/action_view_helpers/actionview/form_options_helper/weekday_options_for_select.yml +30 -18
  148. data/config/action_view_helpers/actionview/form_options_helper/weekday_select.yml +30 -18
  149. data/config/action_view_helpers/actionview/form_tag_helper/button_tag.yml +39 -21
  150. data/config/action_view_helpers/actionview/form_tag_helper/checkbox_tag.yml +33 -21
  151. data/config/action_view_helpers/actionview/form_tag_helper/color_field_tag.yml +26 -17
  152. data/config/action_view_helpers/actionview/form_tag_helper/date_field_tag.yml +27 -17
  153. data/config/action_view_helpers/actionview/form_tag_helper/datetime_field_tag.yml +28 -18
  154. data/config/action_view_helpers/actionview/form_tag_helper/default_enforce_utf8.yml +9 -6
  155. data/config/action_view_helpers/actionview/form_tag_helper/email_field_tag.yml +27 -17
  156. data/config/action_view_helpers/actionview/form_tag_helper/embed_authenticity_token_in_remote_forms.yml +9 -6
  157. data/config/action_view_helpers/actionview/form_tag_helper/field_id.yml +30 -18
  158. data/config/action_view_helpers/actionview/form_tag_helper/field_name.yml +30 -18
  159. data/config/action_view_helpers/actionview/form_tag_helper/field_set_tag.yml +23 -15
  160. data/config/action_view_helpers/actionview/form_tag_helper/file_field_tag.yml +35 -22
  161. data/config/action_view_helpers/actionview/form_tag_helper/form_tag.yml +38 -24
  162. data/config/action_view_helpers/actionview/form_tag_helper/hidden_field_tag.yml +27 -17
  163. data/config/action_view_helpers/actionview/form_tag_helper/image_submit_tag.yml +31 -21
  164. data/config/action_view_helpers/actionview/form_tag_helper/label_tag.yml +33 -17
  165. data/config/action_view_helpers/actionview/form_tag_helper/month_field_tag.yml +27 -17
  166. data/config/action_view_helpers/actionview/form_tag_helper/number_field_tag.yml +47 -29
  167. data/config/action_view_helpers/actionview/form_tag_helper/password_field_tag.yml +27 -17
  168. data/config/action_view_helpers/actionview/form_tag_helper/radio_button_tag.yml +32 -20
  169. data/config/action_view_helpers/actionview/form_tag_helper/range_field_tag.yml +47 -29
  170. data/config/action_view_helpers/actionview/form_tag_helper/search_field_tag.yml +27 -17
  171. data/config/action_view_helpers/actionview/form_tag_helper/select_tag.yml +47 -29
  172. data/config/action_view_helpers/actionview/form_tag_helper/submit_tag.yml +33 -21
  173. data/config/action_view_helpers/actionview/form_tag_helper/telephone_field_tag.yml +28 -18
  174. data/config/action_view_helpers/actionview/form_tag_helper/text_field_tag.yml +27 -17
  175. data/config/action_view_helpers/actionview/form_tag_helper/textarea_tag.yml +31 -20
  176. data/config/action_view_helpers/actionview/form_tag_helper/time_field_tag.yml +27 -17
  177. data/config/action_view_helpers/actionview/form_tag_helper/url_field_tag.yml +27 -17
  178. data/config/action_view_helpers/actionview/form_tag_helper/utf8_enforcer_tag.yml +9 -6
  179. data/config/action_view_helpers/actionview/form_tag_helper/week_field_tag.yml +28 -18
  180. data/config/action_view_helpers/actionview/javascript_helper/escape_javascript.yml +16 -10
  181. data/config/action_view_helpers/actionview/javascript_helper/javascript_cdata_section.yml +9 -6
  182. data/config/action_view_helpers/actionview/javascript_helper/javascript_tag.yml +41 -27
  183. data/config/action_view_helpers/actionview/number_helper/number_to_currency.yml +29 -18
  184. data/config/action_view_helpers/actionview/number_helper/number_to_human.yml +25 -15
  185. data/config/action_view_helpers/actionview/number_helper/number_to_human_size.yml +20 -12
  186. data/config/action_view_helpers/actionview/number_helper/number_to_percentage.yml +20 -12
  187. data/config/action_view_helpers/actionview/number_helper/number_to_phone.yml +33 -20
  188. data/config/action_view_helpers/actionview/number_helper/number_with_delimiter.yml +21 -13
  189. data/config/action_view_helpers/actionview/number_helper/number_with_precision.yml +25 -15
  190. data/config/action_view_helpers/actionview/output_safety_helper/raw.yml +15 -9
  191. data/config/action_view_helpers/actionview/output_safety_helper/safe_join.yml +20 -12
  192. data/config/action_view_helpers/actionview/output_safety_helper/to_sentence.yml +24 -15
  193. data/config/action_view_helpers/actionview/record_identifier/dom_class.yml +20 -12
  194. data/config/action_view_helpers/actionview/record_identifier/dom_id.yml +20 -12
  195. data/config/action_view_helpers/actionview/record_identifier/dom_target.yml +15 -9
  196. data/config/action_view_helpers/actionview/record_identifier/model_name_from_record_or_class.yml +9 -6
  197. data/config/action_view_helpers/actionview/rendering_helper/render.yml +108 -22
  198. data/config/action_view_helpers/actionview/sanitize_helper/sanitize.yml +25 -15
  199. data/config/action_view_helpers/actionview/sanitize_helper/sanitize_css.yml +15 -9
  200. data/config/action_view_helpers/actionview/sanitize_helper/sanitizer_vendor.yml +9 -6
  201. data/config/action_view_helpers/actionview/sanitize_helper/strip_links.yml +15 -9
  202. data/config/action_view_helpers/actionview/sanitize_helper/strip_tags.yml +15 -9
  203. data/config/action_view_helpers/actionview/tag_helper/cdata_section.yml +15 -9
  204. data/config/action_view_helpers/actionview/tag_helper/content_tag.yml +59 -38
  205. data/config/action_view_helpers/actionview/tag_helper/escape_once.yml +15 -9
  206. data/config/action_view_helpers/actionview/tag_helper/tag.yml +54 -31
  207. data/config/action_view_helpers/actionview/tag_helper/token_list.yml +16 -10
  208. data/config/action_view_helpers/actionview/text_helper/concat.yml +15 -9
  209. data/config/action_view_helpers/actionview/text_helper/current_cycle.yml +15 -9
  210. data/config/action_view_helpers/actionview/text_helper/cycle.yml +23 -14
  211. data/config/action_view_helpers/actionview/text_helper/excerpt.yml +33 -20
  212. data/config/action_view_helpers/actionview/text_helper/highlight.yml +37 -18
  213. data/config/action_view_helpers/actionview/text_helper/pluralize.yml +30 -18
  214. data/config/action_view_helpers/actionview/text_helper/reset_cycle.yml +15 -9
  215. data/config/action_view_helpers/actionview/text_helper/safe_concat.yml +9 -6
  216. data/config/action_view_helpers/actionview/text_helper/simple_format.yml +33 -20
  217. data/config/action_view_helpers/actionview/text_helper/truncate.yml +38 -23
  218. data/config/action_view_helpers/actionview/text_helper/word_wrap.yml +25 -15
  219. data/config/action_view_helpers/actionview/translation_helper/debug_missing_translation.yml +9 -6
  220. data/config/action_view_helpers/actionview/translation_helper/localize.yml +26 -16
  221. data/config/action_view_helpers/actionview/translation_helper/translate.yml +31 -19
  222. data/config/action_view_helpers/actionview/url_helper/button_to.yml +57 -33
  223. data/config/action_view_helpers/actionview/url_helper/button_to_generates_button_tag.yml +9 -6
  224. data/config/action_view_helpers/actionview/url_helper/current_page?.yml +25 -15
  225. data/config/action_view_helpers/actionview/url_helper/link_to.yml +76 -53
  226. data/config/action_view_helpers/actionview/url_helper/link_to_if.yml +54 -20
  227. data/config/action_view_helpers/actionview/url_helper/link_to_unless.yml +54 -20
  228. data/config/action_view_helpers/actionview/url_helper/link_to_unless_current.yml +49 -17
  229. data/config/action_view_helpers/actionview/url_helper/mail_to.yml +60 -34
  230. data/config/action_view_helpers/actionview/url_helper/phone_to.yml +40 -22
  231. data/config/action_view_helpers/actionview/url_helper/sms_to.yml +45 -25
  232. data/config/action_view_helpers/actionview/url_helper/url_for.yml +15 -9
  233. data/config/action_view_helpers/importmap-rails/importmap_tags_helper/javascript_import_module_tag.yml +32 -0
  234. data/config/action_view_helpers/importmap-rails/importmap_tags_helper/javascript_importmap_module_preload_tags.yml +39 -0
  235. data/config/action_view_helpers/importmap-rails/importmap_tags_helper/javascript_importmap_tags.yml +35 -0
  236. data/config/action_view_helpers/importmap-rails/importmap_tags_helper/javascript_inline_importmap_tag.yml +32 -0
  237. data/config/action_view_helpers/importmap-rails/importmap_tags_helper/javascript_module_preload_tag.yml +35 -0
  238. data/config/action_view_helpers/turbo-rails/drive_helper/turbo_exempts_page_from_cache.yml +9 -6
  239. data/config/action_view_helpers/turbo-rails/drive_helper/turbo_exempts_page_from_cache_tag.yml +12 -8
  240. data/config/action_view_helpers/turbo-rails/drive_helper/turbo_exempts_page_from_preview.yml +9 -6
  241. data/config/action_view_helpers/turbo-rails/drive_helper/turbo_exempts_page_from_preview_tag.yml +12 -8
  242. data/config/action_view_helpers/turbo-rails/drive_helper/turbo_page_requires_reload.yml +9 -6
  243. data/config/action_view_helpers/turbo-rails/drive_helper/turbo_page_requires_reload_tag.yml +12 -8
  244. data/config/action_view_helpers/turbo-rails/drive_helper/turbo_refresh_method_tag.yml +17 -11
  245. data/config/action_view_helpers/turbo-rails/drive_helper/turbo_refresh_scroll_tag.yml +17 -11
  246. data/config/action_view_helpers/turbo-rails/drive_helper/turbo_refreshes_with.yml +20 -12
  247. data/config/action_view_helpers/turbo-rails/frames_helper/turbo_frame_tag.yml +54 -33
  248. data/config/action_view_helpers/turbo-rails/includes_helper/turbo_include_tags.yml +9 -6
  249. data/config/action_view_helpers/turbo-rails/streams_action_helper/turbo_stream_action_tag.yml +32 -20
  250. data/config/action_view_helpers/turbo-rails/streams_action_helper/turbo_stream_refresh_tag.yml +18 -11
  251. data/config/action_view_helpers/turbo-rails/streams_helper/turbo_stream.yml +9 -6
  252. data/config/action_view_helpers/turbo-rails/streams_helper/turbo_stream_from.yml +28 -18
  253. data/config/html_elements.yml +597 -0
  254. data/config/options.yml +1 -0
  255. data/config/slots/components.yml +52 -0
  256. data/config/state/kind.yml +61 -0
  257. data/config/state/operators.yml +27 -0
  258. data/config/state/predicates.yml +39 -0
  259. data/config/state/transforms.yml +18 -0
  260. data/config/view_context_methods/actionview/base/annotate_rendered_view_with_filenames.yml +4 -4
  261. data/config/view_context_methods/actionview/base/assign.yml +4 -4
  262. data/config/view_context_methods/actionview/base/assigns.yml +4 -4
  263. data/config/view_context_methods/actionview/base/automatically_disable_submit_tag.yml +4 -4
  264. data/config/view_context_methods/actionview/base/compiled_method_container.yml +4 -4
  265. data/config/view_context_methods/actionview/base/config.yml +4 -4
  266. data/config/view_context_methods/actionview/base/default_form_builder.yml +4 -4
  267. data/config/view_context_methods/actionview/base/default_formats.yml +4 -4
  268. data/config/view_context_methods/actionview/base/field_error_proc.yml +4 -4
  269. data/config/view_context_methods/actionview/base/formats.yml +4 -4
  270. data/config/view_context_methods/actionview/base/in_rendering_context.yml +4 -4
  271. data/config/view_context_methods/actionview/base/locale.yml +4 -4
  272. data/config/view_context_methods/actionview/base/lookup_context.yml +4 -4
  273. data/config/view_context_methods/actionview/base/output_buffer.yml +4 -4
  274. data/config/view_context_methods/actionview/base/prefix_partial_path_with_controller_namespace.yml +4 -4
  275. data/config/view_context_methods/actionview/base/remove_hidden_field_autocomplete.yml +4 -4
  276. data/config/view_context_methods/actionview/base/streaming_completion_on_exception.yml +4 -4
  277. data/config/view_context_methods/actionview/base/view_flow.yml +4 -4
  278. data/config/view_context_methods/actionview/base/view_paths.yml +4 -4
  279. data/config/view_context_methods/actionview/base/view_renderer.yml +4 -4
  280. data/config/view_context_methods/actionview/template/local_assigns.yml +4 -4
  281. data/config/view_context_methods/activemodel/conversion/convert_to_model.yml +4 -4
  282. data/config/view_context_methods/activesupport/benchmarkable/benchmark.yml +4 -4
  283. data/config.yml +1240 -790
  284. data/exe/herb +2 -0
  285. data/ext/herb/error_helpers.c +355 -17
  286. data/ext/herb/error_helpers.h +1 -1
  287. data/ext/herb/extconf.rb +4 -2
  288. data/ext/herb/extension.c +137 -89
  289. data/ext/herb/extension_helpers.c +81 -42
  290. data/ext/herb/extension_helpers.h +4 -1
  291. data/ext/herb/nodes.c +826 -358
  292. data/ext/herb/nodes.h +3 -2
  293. data/ext/herb/parser_options_helpers.c +151 -0
  294. data/ext/herb/parser_options_helpers.h +14 -0
  295. data/herb.gemspec +2 -2
  296. data/lib/herb/3.2/herb.so +0 -0
  297. data/lib/herb/3.3/herb.so +0 -0
  298. data/lib/herb/3.4/herb.so +0 -0
  299. data/lib/herb/4.0/herb.so +0 -0
  300. data/lib/herb/action_view/helper_registry.rb +1358 -62
  301. data/lib/herb/analysis/partial_declaration.rb +140 -0
  302. data/lib/herb/analysis/partial_index.rb +189 -0
  303. data/lib/herb/analysis/partial_resolution.rb +161 -0
  304. data/lib/herb/analysis/partial_resolver.rb +144 -0
  305. data/lib/herb/analysis/project_index.rb +152 -0
  306. data/lib/herb/{action_view → analysis}/render_analyzer.rb +287 -77
  307. data/lib/herb/analysis/render_graph/ancestor_chain.rb +27 -0
  308. data/lib/herb/analysis/render_graph/builder.rb +376 -0
  309. data/lib/herb/analysis/render_graph/call_frame.rb +9 -0
  310. data/lib/herb/analysis/render_graph/call_site_location.rb +23 -0
  311. data/lib/herb/analysis/render_graph/inferred_signature.rb +21 -0
  312. data/lib/herb/analysis/render_graph/partial_call_site.rb +40 -0
  313. data/lib/herb/analysis/render_graph/partial_context.rb +46 -0
  314. data/lib/herb/analysis/render_graph/template_roots.rb +31 -0
  315. data/lib/herb/analysis/render_graph.rb +285 -0
  316. data/lib/herb/analysis/ruby_locals_index/local.rb +25 -0
  317. data/lib/herb/analysis/ruby_locals_index/named_reference.rb +22 -0
  318. data/lib/herb/analysis/ruby_locals_index/offset_table.rb +44 -0
  319. data/lib/herb/analysis/ruby_locals_index/reference_collector.rb +80 -0
  320. data/lib/herb/analysis/ruby_locals_index/state_locals.rb +49 -0
  321. data/lib/herb/analysis/ruby_locals_index.rb +165 -0
  322. data/lib/herb/analysis/ruby_reference.rb +67 -0
  323. data/lib/herb/analysis/template_dependencies/dependency_collector.rb +179 -0
  324. data/lib/herb/analysis/template_dependencies/node_dependency_collector.rb +309 -0
  325. data/lib/herb/analysis/template_dependencies.rb +562 -0
  326. data/lib/herb/ast/erb_render_node.rb +26 -94
  327. data/lib/herb/ast/helpers.rb +90 -10
  328. data/lib/herb/ast/herb_directive_node.rb +18 -0
  329. data/lib/herb/ast/node.rb +32 -2
  330. data/lib/herb/ast/nodes.rb +1342 -105
  331. data/lib/herb/backend.rb +73 -0
  332. data/lib/herb/bootstrap.rb +3 -7
  333. data/lib/herb/cli.rb +550 -32
  334. data/lib/herb/colors.rb +14 -0
  335. data/lib/herb/configuration.rb +71 -35
  336. data/lib/herb/defaults.yml +2 -1
  337. data/lib/herb/dev/assets.rb +57 -0
  338. data/lib/herb/dev/classifier.rb +84 -0
  339. data/lib/herb/dev/embedded.rb +27 -0
  340. data/lib/herb/dev/pipeline.rb +305 -0
  341. data/lib/herb/dev/protocol.rb +221 -0
  342. data/lib/herb/dev/runner.rb +175 -175
  343. data/lib/herb/dev/server.rb +89 -26
  344. data/lib/herb/dev/server_entry.rb +41 -6
  345. data/lib/herb/dev/watcher.rb +181 -0
  346. data/lib/herb/dev.rb +163 -0
  347. data/lib/herb/diagnostic/formatter.rb +88 -0
  348. data/lib/herb/diagnostic.rb +172 -0
  349. data/lib/herb/diff/operation.rb +36 -0
  350. data/lib/herb/diff/result.rb +62 -0
  351. data/lib/herb/diff.rb +10 -0
  352. data/lib/herb/engine/collector.rb +62 -0
  353. data/lib/herb/engine/compiler.rb +346 -108
  354. data/lib/herb/engine/component_tags/constant_resolver.rb +28 -0
  355. data/lib/herb/engine/component_tags/partial_resolver.rb +54 -0
  356. data/lib/herb/engine/component_tags/resolver.rb +32 -0
  357. data/lib/herb/engine/component_tags/visitor.rb +231 -0
  358. data/lib/herb/engine/css_inliner/inliner.rb +101 -0
  359. data/lib/herb/engine/css_inliner/visitor.rb +174 -0
  360. data/lib/herb/engine/errors.rb +122 -0
  361. data/lib/herb/engine/helpers.rb +82 -0
  362. data/lib/herb/engine/inline_render/inliner.rb +122 -0
  363. data/lib/herb/engine/inline_render/visitor.rb +267 -0
  364. data/lib/herb/engine/runtime/entry.rb +62 -0
  365. data/lib/herb/engine/runtime/error_page.rb +362 -0
  366. data/lib/herb/engine/runtime/html_safe_assertions.rb +217 -0
  367. data/lib/herb/engine/runtime/journal/summary.rb +227 -0
  368. data/lib/herb/engine/runtime/journal.rb +379 -0
  369. data/lib/herb/engine/runtime/middleware.rb +212 -0
  370. data/lib/herb/engine/runtime/observations.rb +73 -0
  371. data/lib/herb/engine/runtime/report.rb +204 -0
  372. data/lib/herb/engine/runtime/session.rb +437 -0
  373. data/lib/herb/engine/runtime.rb +21 -0
  374. data/lib/herb/engine/scoped_style/channel.rb +66 -0
  375. data/lib/herb/engine/scoped_style/collector.rb +74 -0
  376. data/lib/herb/engine/scoped_style/visitor.rb +533 -0
  377. data/lib/herb/engine/slots/annotation.rb +98 -0
  378. data/lib/herb/engine/slots/bindings.rb +61 -0
  379. data/lib/herb/engine/slots/callee.rb +118 -0
  380. data/lib/herb/engine/slots/component_definitions.rb +67 -0
  381. data/lib/herb/engine/slots/components/async.rb +24 -0
  382. data/lib/herb/engine/slots/components/base.rb +132 -0
  383. data/lib/herb/engine/slots/components/deferred.rb +81 -0
  384. data/lib/herb/engine/slots/components/fallback.rb +27 -0
  385. data/lib/herb/engine/slots/components/fragment.rb +99 -0
  386. data/lib/herb/engine/slots/components/lazy.rb +24 -0
  387. data/lib/herb/engine/slots/components.rb +52 -0
  388. data/lib/herb/engine/slots/dependencies/channel.rb +72 -0
  389. data/lib/herb/engine/slots/dependencies.rb +269 -0
  390. data/lib/herb/engine/slots/dynamics_compiler.rb +854 -0
  391. data/lib/herb/engine/slots/identifier.rb +35 -0
  392. data/lib/herb/engine/slots/manifest/channel.rb +74 -0
  393. data/lib/herb/engine/slots/manifest/collector.rb +75 -0
  394. data/lib/herb/engine/slots/markers.rb +128 -0
  395. data/lib/herb/engine/slots/render_bindings.rb +141 -0
  396. data/lib/herb/engine/slots/schema_compiler.rb +94 -0
  397. data/lib/herb/engine/slots/state_anchor.rb +94 -0
  398. data/lib/herb/engine/slots/state_compiler.rb +1326 -0
  399. data/lib/herb/engine/slots/state_directives.rb +854 -0
  400. data/lib/herb/engine/slots/state_kinds.rb +54 -0
  401. data/lib/herb/engine/slots/state_operators.rb +36 -0
  402. data/lib/herb/engine/slots/state_overrides.rb +79 -0
  403. data/lib/herb/engine/slots/state_predicates.rb +65 -0
  404. data/lib/herb/engine/slots/state_transforms.rb +42 -0
  405. data/lib/herb/engine/slots/statics.rb +185 -0
  406. data/lib/herb/engine/slots/subtree.rb +82 -0
  407. data/lib/herb/engine/slots/subtree_compiler.rb +255 -0
  408. data/lib/herb/engine/slots/types.rb +42 -0
  409. data/lib/herb/engine/slots/visitor.rb +2256 -0
  410. data/lib/herb/engine/validators/accessibility_validator.rb +3 -3
  411. data/lib/herb/engine/validators/base.rb +36 -0
  412. data/lib/herb/engine/validators/generator_template_validator.rb +39 -0
  413. data/lib/herb/engine/validators/nesting_validator.rb +3 -3
  414. data/lib/herb/engine/validators/render_validator.rb +13 -33
  415. data/lib/herb/engine/validators/security_validator.rb +3 -17
  416. data/lib/herb/engine/validators.rb +43 -0
  417. data/lib/herb/engine/visitors/auto_close_omitted_tags_visitor.rb +48 -0
  418. data/lib/herb/engine/visitors/content_for_visitor.rb +127 -0
  419. data/lib/herb/engine/{debug_visitor.rb → visitors/debug_visitor.rb} +121 -93
  420. data/lib/herb/engine/visitors/html_safe_assertions_visitor.rb +281 -0
  421. data/lib/herb/engine/visitors/instrumentation_visitor.rb +290 -0
  422. data/lib/herb/engine/visitors/optimize_visitor.rb +728 -0
  423. data/lib/herb/engine/visitors/remove_comments_visitor.rb +106 -0
  424. data/lib/herb/engine/visitors/source_attribution_visitor.rb +177 -0
  425. data/lib/herb/engine.rb +218 -257
  426. data/lib/herb/ensure_installed.rb +43 -0
  427. data/lib/herb/errors.rb +646 -157
  428. data/lib/herb/fingerprint.rb +82 -0
  429. data/lib/herb/html/elements.rb +18 -0
  430. data/lib/herb/html/util.rb +21 -2
  431. data/lib/herb/lex_result.rb +0 -10
  432. data/lib/herb/locate.rb +163 -0
  433. data/lib/herb/location.rb +20 -0
  434. data/lib/herb/parse_result.rb +17 -11
  435. data/lib/herb/parser_options.rb +65 -46
  436. data/lib/herb/position.rb +19 -0
  437. data/lib/herb/prism_inspect.rb +1 -4
  438. data/lib/herb/project.rb +31 -18
  439. data/lib/herb/range.rb +5 -0
  440. data/lib/herb/result.rb +2 -2
  441. data/lib/herb/ruby_program.rb +110 -0
  442. data/lib/herb/source_path.rb +232 -0
  443. data/lib/herb/token.rb +14 -3
  444. data/lib/herb/version.rb +1 -1
  445. data/lib/herb/visitor/context/origin.rb +52 -0
  446. data/lib/herb/visitor/context/replacements.rb +59 -0
  447. data/lib/herb/visitor/context.rb +169 -0
  448. data/lib/herb/visitor/context_aware.rb +45 -0
  449. data/lib/herb/visitor/diagnostics.rb +148 -0
  450. data/lib/herb/visitor/experimental.rb +33 -0
  451. data/lib/herb/visitor/parser_option_requirements.rb +151 -0
  452. data/lib/herb/visitor/stack.rb +192 -0
  453. data/lib/herb/visitor.rb +47 -1
  454. data/lib/herb/warnings.rb +25 -0
  455. data/lib/herb.rb +74 -63
  456. data/sig/herb/action_view/helper_registry.rbs +82 -10
  457. data/sig/herb/analysis/partial_declaration.rbs +80 -0
  458. data/sig/herb/analysis/partial_index.rbs +66 -0
  459. data/sig/herb/analysis/partial_resolution.rbs +57 -0
  460. data/sig/herb/analysis/partial_resolver.rbs +76 -0
  461. data/sig/herb/analysis/project_index.rbs +57 -0
  462. data/sig/herb/{action_view → analysis}/render_analyzer.rbs +25 -4
  463. data/sig/herb/analysis/render_graph/ancestor_chain.rbs +22 -0
  464. data/sig/herb/analysis/render_graph/builder.rbs +180 -0
  465. data/sig/herb/analysis/render_graph/call_frame.rbs +26 -0
  466. data/sig/herb/analysis/render_graph/call_site_location.rbs +28 -0
  467. data/sig/herb/analysis/render_graph/inferred_signature.rbs +27 -0
  468. data/sig/herb/analysis/render_graph/partial_call_site.rbs +36 -0
  469. data/sig/herb/analysis/render_graph/partial_context.rbs +31 -0
  470. data/sig/herb/analysis/render_graph/template_roots.rbs +32 -0
  471. data/sig/herb/analysis/render_graph.rbs +83 -0
  472. data/sig/herb/analysis/ruby_locals_index/local.rbs +21 -0
  473. data/sig/herb/analysis/ruby_locals_index/named_reference.rbs +20 -0
  474. data/sig/herb/analysis/ruby_locals_index/offset_table.rbs +26 -0
  475. data/sig/herb/analysis/ruby_locals_index/reference_collector.rbs +40 -0
  476. data/sig/herb/analysis/ruby_locals_index/state_locals.rbs +19 -0
  477. data/sig/herb/analysis/ruby_locals_index.rbs +62 -0
  478. data/sig/herb/analysis/ruby_reference.rbs +28 -0
  479. data/sig/herb/analysis/template_dependencies/dependency_collector.rbs +52 -0
  480. data/sig/herb/analysis/template_dependencies/node_dependency_collector.rbs +81 -0
  481. data/sig/herb/analysis/template_dependencies.rbs +125 -0
  482. data/sig/herb/ast/erb_render_node.rbs +10 -2
  483. data/sig/herb/ast/helpers.rbs +31 -1
  484. data/sig/herb/ast/herb_directive_node.rbs +13 -0
  485. data/sig/herb/ast/node.rbs +9 -0
  486. data/sig/herb/ast/nodes.rbs +662 -89
  487. data/sig/herb/backend.rbs +52 -0
  488. data/sig/herb/colors.rbs +3 -0
  489. data/sig/herb/configuration.rbs +27 -3
  490. data/sig/herb/dev/assets.rbs +27 -0
  491. data/sig/herb/dev/classifier.rbs +57 -0
  492. data/sig/herb/dev/embedded.rbs +21 -0
  493. data/sig/herb/dev/pipeline.rbs +118 -0
  494. data/sig/herb/dev/protocol.rbs +78 -0
  495. data/sig/herb/dev/runner.rbs +61 -23
  496. data/sig/herb/dev/server.rbs +49 -22
  497. data/sig/herb/dev/server_entry.rbs +46 -21
  498. data/sig/herb/dev/watcher.rbs +84 -0
  499. data/sig/herb/dev.rbs +58 -0
  500. data/sig/herb/diagnostic/formatter.rbs +28 -0
  501. data/sig/herb/diagnostic.rbs +88 -0
  502. data/sig/herb/diff/operation.rbs +36 -0
  503. data/sig/herb/diff/result.rbs +36 -0
  504. data/sig/herb/diff.rbs +6 -0
  505. data/sig/herb/engine/collector.rbs +48 -0
  506. data/sig/herb/engine/compiler.rbs +62 -23
  507. data/sig/herb/engine/component_tags/constant_resolver.rbs +19 -0
  508. data/sig/herb/engine/component_tags/partial_resolver.rbs +30 -0
  509. data/sig/herb/engine/component_tags/resolver.rbs +25 -0
  510. data/sig/herb/engine/component_tags/visitor.rbs +69 -0
  511. data/sig/herb/engine/css_inliner/inliner.rbs +65 -0
  512. data/sig/herb/engine/css_inliner/visitor.rbs +87 -0
  513. data/sig/herb/engine/errors.rbs +68 -0
  514. data/sig/herb/engine/helpers.rbs +28 -0
  515. data/sig/herb/engine/inline_render/inliner.rbs +39 -0
  516. data/sig/herb/engine/inline_render/visitor.rbs +104 -0
  517. data/sig/herb/engine/runtime/entry.rbs +43 -0
  518. data/sig/herb/engine/runtime/error_page.rbs +115 -0
  519. data/sig/herb/engine/runtime/html_safe_assertions.rbs +99 -0
  520. data/sig/herb/engine/runtime/journal/summary.rbs +172 -0
  521. data/sig/herb/engine/runtime/journal.rbs +126 -0
  522. data/sig/herb/engine/runtime/middleware.rbs +96 -0
  523. data/sig/herb/engine/runtime/observations.rbs +38 -0
  524. data/sig/herb/engine/runtime/report.rbs +97 -0
  525. data/sig/herb/engine/runtime/session.rbs +233 -0
  526. data/sig/herb/engine/runtime.rbs +14 -0
  527. data/sig/herb/engine/scoped_style/channel.rbs +45 -0
  528. data/sig/herb/engine/scoped_style/collector.rbs +45 -0
  529. data/sig/herb/engine/scoped_style/visitor.rbs +220 -0
  530. data/sig/herb/engine/slots/annotation.rbs +72 -0
  531. data/sig/herb/engine/slots/bindings.rbs +34 -0
  532. data/sig/herb/engine/slots/callee.rbs +62 -0
  533. data/sig/herb/engine/slots/component_definitions.rbs +19 -0
  534. data/sig/herb/engine/slots/components/async.rbs +20 -0
  535. data/sig/herb/engine/slots/components/base.rbs +60 -0
  536. data/sig/herb/engine/slots/components/deferred.rbs +29 -0
  537. data/sig/herb/engine/slots/components/fallback.rbs +21 -0
  538. data/sig/herb/engine/slots/components/fragment.rbs +34 -0
  539. data/sig/herb/engine/slots/components/lazy.rbs +20 -0
  540. data/sig/herb/engine/slots/components.rbs +30 -0
  541. data/sig/herb/engine/slots/dependencies/channel.rbs +51 -0
  542. data/sig/herb/engine/slots/dependencies.rbs +94 -0
  543. data/sig/herb/engine/slots/dynamics_compiler.rbs +349 -0
  544. data/sig/herb/engine/slots/identifier.rbs +19 -0
  545. data/sig/herb/engine/slots/manifest/channel.rbs +49 -0
  546. data/sig/herb/engine/slots/manifest/collector.rbs +45 -0
  547. data/sig/herb/engine/slots/markers.rbs +85 -0
  548. data/sig/herb/engine/slots/render_bindings.rbs +69 -0
  549. data/sig/herb/engine/slots/schema_compiler.rbs +62 -0
  550. data/sig/herb/engine/slots/state_anchor.rbs +41 -0
  551. data/sig/herb/engine/slots/state_compiler.rbs +258 -0
  552. data/sig/herb/engine/slots/state_directives.rbs +278 -0
  553. data/sig/herb/engine/slots/state_kinds.rbs +24 -0
  554. data/sig/herb/engine/slots/state_operators.rbs +19 -0
  555. data/sig/herb/engine/slots/state_overrides.rbs +33 -0
  556. data/sig/herb/engine/slots/state_predicates.rbs +16 -0
  557. data/sig/herb/engine/slots/state_transforms.rbs +15 -0
  558. data/sig/herb/engine/slots/statics.rbs +67 -0
  559. data/sig/herb/engine/slots/subtree.rbs +49 -0
  560. data/sig/herb/engine/slots/subtree_compiler.rbs +130 -0
  561. data/sig/herb/engine/slots/types.rbs +46 -0
  562. data/sig/herb/engine/slots/visitor.rbs +599 -0
  563. data/sig/herb/engine/validators/accessibility_validator.rbs +1 -1
  564. data/sig/herb/engine/validators/base.rbs +28 -0
  565. data/sig/herb/engine/validators/generator_template_validator.rbs +19 -0
  566. data/sig/herb/engine/validators/nesting_validator.rbs +1 -1
  567. data/sig/herb/engine/validators/render_validator.rbs +2 -6
  568. data/sig/herb/engine/validators/security_validator.rbs +1 -3
  569. data/sig/herb/engine/validators.rbs +21 -0
  570. data/sig/herb/engine/visitors/auto_close_omitted_tags_visitor.rbs +26 -0
  571. data/sig/herb/engine/visitors/content_for_visitor.rbs +52 -0
  572. data/sig/herb/engine/{debug_visitor.rbs → visitors/debug_visitor.rbs} +26 -15
  573. data/sig/herb/engine/visitors/html_safe_assertions_visitor.rbs +100 -0
  574. data/sig/herb/engine/visitors/instrumentation_visitor.rbs +111 -0
  575. data/sig/herb/engine/visitors/optimize_visitor.rbs +246 -0
  576. data/sig/herb/engine/visitors/remove_comments_visitor.rbs +66 -0
  577. data/sig/herb/engine/visitors/source_attribution_visitor.rbs +90 -0
  578. data/sig/herb/engine.rbs +47 -41
  579. data/sig/herb/ensure_installed.rbs +9 -0
  580. data/sig/herb/errors.rbs +293 -0
  581. data/sig/herb/fingerprint.rbs +37 -0
  582. data/sig/herb/html/elements.rbs +19 -0
  583. data/sig/herb/html/util.rbs +15 -1
  584. data/sig/herb/lex_result.rbs +0 -6
  585. data/sig/herb/locate.rbs +89 -0
  586. data/sig/herb/location.rbs +12 -0
  587. data/sig/herb/parse_result.rbs +10 -8
  588. data/sig/herb/parser_options.rbs +47 -21
  589. data/sig/herb/position.rbs +11 -0
  590. data/sig/herb/range.rbs +3 -0
  591. data/sig/herb/ruby_program.rbs +51 -0
  592. data/sig/herb/source_path.rbs +132 -0
  593. data/sig/herb/token.rbs +5 -2
  594. data/sig/herb/visitor/context/origin.rbs +51 -0
  595. data/sig/herb/visitor/context/replacements.rbs +39 -0
  596. data/sig/herb/visitor/context.rbs +83 -0
  597. data/sig/herb/visitor/context_aware.rbs +32 -0
  598. data/sig/herb/visitor/diagnostics.rbs +82 -0
  599. data/sig/herb/visitor/experimental.rbs +23 -0
  600. data/sig/herb/visitor/parser_option_requirements.rbs +76 -0
  601. data/sig/herb/visitor/stack.rbs +91 -0
  602. data/sig/herb/visitor.rbs +22 -0
  603. data/sig/herb/warnings.rbs +10 -0
  604. data/sig/herb.rbs +27 -10
  605. data/sig/serialized_ast_errors.rbs +58 -1
  606. data/sig/serialized_ast_nodes.rbs +58 -2
  607. data/src/analyze/action_view/attribute_extraction_helpers.c +73 -36
  608. data/src/analyze/action_view/generated_handlers.c +37 -1
  609. data/src/analyze/action_view/generated_handlers.h +2 -1
  610. data/src/analyze/action_view/helper_registry.c +1353 -58
  611. data/src/analyze/action_view/registry.c +10 -17
  612. data/src/analyze/action_view/stylesheet_link_tag.c +40 -0
  613. data/src/analyze/action_view/tag_helper_node_builders.c +57 -0
  614. data/src/analyze/action_view/tag_helpers.c +423 -93
  615. data/src/analyze/analyze.c +301 -64
  616. data/src/analyze/analyze_helpers.c +420 -23
  617. data/src/analyze/builders.c +79 -51
  618. data/src/analyze/conditional_elements.c +13 -8
  619. data/src/analyze/conditional_open_tags.c +11 -5
  620. data/src/analyze/control_type.c +16 -1
  621. data/src/analyze/herb_directives.c +701 -0
  622. data/src/analyze/invalid_structures.c +11 -7
  623. data/src/analyze/iteration_nodes.c +306 -0
  624. data/src/analyze/missing_end.c +116 -32
  625. data/src/analyze/parse_errors.c +8 -3
  626. data/src/analyze/postfix_conditionals.c +98 -63
  627. data/src/analyze/prism_annotate.c +13 -4
  628. data/src/analyze/render_nodes.c +345 -123
  629. data/src/analyze/strict_locals.c +30 -26
  630. data/src/analyze/ternary_conditionals.c +95 -70
  631. data/src/analyze/transform.c +43 -1
  632. data/src/ast/ast_node.c +3 -13
  633. data/src/ast/ast_nodes.c +911 -112
  634. data/src/ast/ast_pretty_print.c +161 -2
  635. data/src/diff/herb_diff.c +8 -0
  636. data/src/diff/herb_diff_attributes.c +1 -0
  637. data/src/diff/herb_diff_children.c +4 -3
  638. data/src/diff/herb_diff_helpers.c +7 -1
  639. data/src/diff/herb_diff_nodes.c +186 -71
  640. data/src/diff/herb_hash_tree.c +99 -1
  641. data/src/errors.c +1096 -128
  642. data/src/extract.c +30 -8
  643. data/src/herb.c +30 -11
  644. data/src/include/analyze/action_view/attribute_extraction_helpers.h +1 -1
  645. data/src/include/analyze/action_view/helper_registry.h +28 -4
  646. data/src/include/analyze/action_view/tag_helper_handler.h +1 -1
  647. data/src/include/analyze/action_view/tag_helper_node_builders.h +7 -0
  648. data/src/include/analyze/analyze.h +11 -0
  649. data/src/include/analyze/builders.h +16 -0
  650. data/src/include/analyze/helpers.h +23 -2
  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 +76 -2
  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 +156 -39
  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_peek_helpers.h +8 -1
  665. data/src/include/lexer/lexer_struct.h +4 -0
  666. data/src/include/lexer/token.h +3 -0
  667. data/src/include/lexer/token_struct.h +8 -6
  668. data/src/include/lib/hb_allocator.h +2 -1
  669. data/src/include/lib/hb_array.h +2 -0
  670. data/src/include/lib/hb_foreach.h +1 -1
  671. data/src/include/lib/hb_string.h +7 -0
  672. data/src/include/parser/dot_notation.h +1 -1
  673. data/src/include/parser/foreign_content_elements.h +32 -0
  674. data/src/include/parser/parser.h +16 -30
  675. data/src/include/parser/parser_helpers.h +13 -11
  676. data/src/include/parser/parser_options.h +41 -0
  677. data/src/include/prism/ruby_parser.h +6 -0
  678. data/src/include/util/html_elements.h +85 -0
  679. data/src/include/util/html_util.h +1 -0
  680. data/src/include/version.h +1 -1
  681. data/src/lexer/lexer_peek_helpers.c +15 -1
  682. data/src/lexer/token.c +83 -1
  683. data/src/lexer.c +196 -12
  684. data/src/lib/hb_allocator.c +2 -0
  685. data/src/lib/hb_array.c +26 -0
  686. data/src/lib/hb_string.c +26 -0
  687. data/src/main.c +1 -1
  688. data/src/parser/dot_notation.c +4 -3
  689. data/src/parser/match_tags.c +66 -1
  690. data/src/parser/parser_helpers.c +69 -37
  691. data/src/parser.c +606 -383
  692. data/src/parser_options_defaults.c +30 -0
  693. data/src/prism/prism_helpers.c +3 -0
  694. data/src/prism/ruby_parser.c +49 -0
  695. data/src/util/html_util.c +11 -58
  696. data/src/visitor.c +77 -1
  697. data/templates/ext/herb/error_helpers.c.erb +1 -1
  698. data/templates/ext/herb/nodes.c.erb +18 -13
  699. data/templates/ext/herb/nodes.h.erb +2 -1
  700. data/templates/ext/herb/parser_options_helpers.c.erb +69 -0
  701. data/templates/ext/herb/parser_options_helpers.h.erb +11 -0
  702. data/templates/java/nodes.c.erb +20 -16
  703. data/templates/java/nodes.h.erb +3 -2
  704. data/templates/java/org/herb/ParserOptions.java.erb +24 -0
  705. data/templates/java/org/herb/ast/HelperRegistry.java.erb +67 -31
  706. data/templates/java/org/herb/ast/HelperType.java.erb +29 -0
  707. data/templates/java/org/herb/ast/Nodes.java.erb +11 -7
  708. data/templates/java/parser_options_helpers.c.erb +45 -0
  709. data/templates/java/parser_options_helpers.h.erb +10 -0
  710. data/templates/javascript/packages/client/src/state-kinds.ts.erb +49 -0
  711. data/templates/javascript/packages/client/src/state-operators.ts.erb +15 -0
  712. data/templates/javascript/packages/client/src/state-predicates.ts.erb +27 -0
  713. data/templates/javascript/packages/client/src/state-transforms.ts.erb +19 -0
  714. data/templates/javascript/packages/core/src/action-view-helpers.ts.erb +47 -0
  715. data/templates/javascript/packages/core/src/built-in-components.ts.erb +67 -0
  716. data/templates/javascript/packages/core/src/errors.ts.erb +9 -3
  717. data/templates/javascript/packages/core/src/foreign-content-elements.ts.erb +18 -0
  718. data/templates/javascript/packages/core/src/html-constants.ts.erb +32 -0
  719. data/templates/javascript/packages/core/src/html-elements.ts.erb +41 -0
  720. data/templates/javascript/packages/core/src/node-type-guards.ts.erb +11 -7
  721. data/templates/javascript/packages/core/src/nodes.ts.erb +82 -19
  722. data/templates/javascript/packages/core/src/parser-options.ts.erb +41 -0
  723. data/templates/javascript/packages/core/src/visitor.ts.erb +1 -1
  724. data/templates/javascript/packages/node/extension/error_helpers.cpp.erb +3 -3
  725. data/templates/javascript/packages/node/extension/nodes.cpp.erb +17 -12
  726. data/templates/javascript/packages/node/extension/nodes.h.erb +3 -3
  727. data/templates/javascript/packages/node/extension/parser_options_helpers.cpp.erb +41 -0
  728. data/templates/javascript/packages/node/extension/parser_options_helpers.h.erb +12 -0
  729. data/templates/lib/herb/action_view/helper_registry.rb.erb +77 -3
  730. data/templates/lib/herb/ast/nodes.rb.erb +16 -6
  731. data/templates/lib/herb/engine/slots/component_definitions.rb.erb +38 -0
  732. data/templates/lib/herb/engine/slots/state_kinds.rb.erb +37 -0
  733. data/templates/lib/herb/engine/slots/state_operators.rb.erb +26 -0
  734. data/templates/lib/herb/engine/slots/state_predicates.rb.erb +39 -0
  735. data/templates/lib/herb/engine/slots/state_transforms.rb.erb +27 -0
  736. data/templates/lib/herb/errors.rb.erb +34 -6
  737. data/templates/lib/herb/html/elements.rb.erb +12 -0
  738. data/templates/lib/herb/parser_options.rb.erb +32 -0
  739. data/templates/lib/herb/visitor.rb.erb +7 -1
  740. data/templates/rust/herb-printer/src/printer_visitor.rs.erb +14 -0
  741. data/templates/rust/src/action_view_helpers.rs.erb +38 -0
  742. data/templates/rust/src/ast/nodes.rs.erb +24 -31
  743. data/templates/rust/src/errors.rs.erb +1 -1
  744. data/templates/rust/src/nodes.rs.erb +58 -26
  745. data/templates/rust/src/parser_options.rs.erb +16 -0
  746. data/templates/rust/src/prism/generated_deserialize.rs.erb +109 -0
  747. data/templates/rust/src/prism/generated_prettyprint.rs.erb +153 -0
  748. data/templates/rust/src/union_types.rs.erb +7 -1
  749. data/templates/rust/src/visitor.rs.erb +1 -1
  750. data/templates/src/analyze/action_view/helper_registry.c.erb +22 -0
  751. data/templates/src/analyze/missing_end.c.erb +13 -5
  752. data/templates/src/ast/ast_nodes.c.erb +41 -2
  753. data/templates/src/diff/herb_diff_nodes.c.erb +44 -8
  754. data/templates/src/errors.c.erb +8 -3
  755. data/templates/src/include/analyze/action_view/helper_registry.h.erb +19 -0
  756. data/templates/src/include/analyze/herb_directive_kinds.h.erb +25 -0
  757. data/templates/src/include/errors.h.erb +3 -1
  758. data/templates/src/include/parser/foreign_content_elements.h.erb +23 -0
  759. data/templates/src/include/parser/parser_options.h.erb +21 -0
  760. data/templates/src/include/util/html_elements.h.erb +28 -0
  761. data/templates/src/parser_options_defaults.c.erb +9 -0
  762. data/templates/template.rb +564 -9
  763. data/templates/wasm/error_helpers.cpp.erb +4 -4
  764. data/templates/wasm/nodes.cpp.erb +12 -12
  765. data/templates/wasm/nodes.h.erb +3 -3
  766. data/templates/wasm/parser_options_helpers.cpp.erb +25 -0
  767. data/templates/wasm/parser_options_helpers.h.erb +12 -0
  768. metadata +306 -27
  769. data/config/action_view_helpers/actionview/form_helper/button.yml +0 -38
  770. data/config/action_view_helpers/actionview/form_helper/submit.yml +0 -35
  771. data/lib/herb/ast.rb +0 -7
  772. data/lib/herb/diff_operation.rb +0 -34
  773. data/lib/herb/diff_result.rb +0 -59
  774. data/lib/herb/engine/error_formatter.rb +0 -432
  775. data/lib/herb/engine/parser_error_overlay.rb +0 -773
  776. data/lib/herb/engine/validation_error_overlay.rb +0 -182
  777. data/lib/herb/engine/validation_errors.rb +0 -65
  778. data/lib/herb/engine/validator.rb +0 -80
  779. data/sig/herb/ast.rbs +0 -6
  780. data/sig/herb/diff_operation.rbs +0 -34
  781. data/sig/herb/diff_result.rbs +0 -34
  782. data/sig/herb/engine/debug.rbs +0 -38
  783. data/sig/herb/engine/error_formatter.rbs +0 -47
  784. data/sig/herb/engine/parser_error_overlay.rbs +0 -41
  785. data/sig/herb/engine/validation_error_overlay.rbs +0 -35
  786. data/sig/herb/engine/validation_errors.rbs +0 -45
  787. data/sig/herb/engine/validator.rbs +0 -41
  788. data/sig/herb_c_extension.rbs +0 -10
@@ -0,0 +1,52 @@
1
+ # Generated from lib/herb/backend.rb with RBS::Inline
2
+
3
+ module Herb
4
+ # What the native extension defines, declared in Ruby so that it can be read without reading C.
5
+ #
6
+ # Loading the extension reopens this module and defines each method for real, so nothing here
7
+ # runs in a working install. What is left when the extension does not load is a set of methods
8
+ # that say so, instead of the `NoMethodError` a missing definition would raise:
9
+ #
10
+ # Herb::Backend.parse(source)
11
+ # #=> NotImplementedError: Herb::Backend.parse is defined by the native extension, which did not load
12
+ #
13
+ # The public API is `Herb.parse` and its neighbours, which are Ruby and live in `lib/herb.rb`.
14
+ # This is only the seam they call through.
15
+ module Backend
16
+ module Unavailable
17
+ # : (String, **untyped) -> Herb::ParseResult
18
+ def parse: (String, **untyped) -> Herb::ParseResult
19
+
20
+ # : (String, **untyped) -> Herb::LexResult
21
+ def lex: (String, **untyped) -> Herb::LexResult
22
+
23
+ # : (String, **untyped) -> String
24
+ def extract_ruby: (String, **untyped) -> String
25
+
26
+ # : (String) -> String
27
+ def extract_html: (String) -> String
28
+
29
+ # : (String, String, **untyped) -> Herb::Diff::Result
30
+ def diff: (String, String, **untyped) -> Herb::Diff::Result
31
+
32
+ # : (**untyped) -> untyped
33
+ def arena_stats: (**untyped) -> untyped
34
+
35
+ # : (String) -> untyped
36
+ def leak_check: (String) -> untyped
37
+
38
+ # : () -> Array[String]
39
+ def default_erb_openings: () -> Array[String]
40
+
41
+ # : () -> String
42
+ def version: () -> String
43
+
44
+ private
45
+
46
+ # : (Symbol?) -> bot
47
+ def unavailable: (Symbol?) -> bot
48
+ end
49
+
50
+ extend Unavailable
51
+ end
52
+ end
data/sig/herb/colors.rbs CHANGED
@@ -8,6 +8,9 @@ module Herb
8
8
 
9
9
  CLEAR_SCREEN: ::String
10
10
 
11
+ # : [T] (bool) { () -> T } -> T
12
+ def self?.with_color: [T] (bool) { () -> T } -> T
13
+
11
14
  # : () -> bool
12
15
  def self?.enabled?: () -> bool
13
16
 
@@ -10,14 +10,18 @@ module Herb
10
10
 
11
11
  VALID_TEMPLATE_ENGINES: Array[String]
12
12
 
13
- CONFIG_FILENAMES: untyped
13
+ CONFIG_FILENAMES: Array[String]
14
14
 
15
- PROJECT_INDICATORS: untyped
15
+ MISNAMED_CONFIG_FILENAMES: Array[String]
16
+
17
+ PROJECT_INDICATORS: Array[String]
16
18
 
17
19
  DEFAULTS_PATH: untyped
18
20
 
19
21
  DEFAULTS: untyped
20
22
 
23
+ GLOB_CHARACTERS: Regexp
24
+
21
25
  attr_reader config: untyped
22
26
 
23
27
  attr_reader user_config: untyped
@@ -26,6 +30,8 @@ module Herb
26
30
 
27
31
  attr_reader project_root: untyped
28
32
 
33
+ attr_reader misnamed_config_paths: untyped
34
+
29
35
  def initialize: (?untyped project_path) -> untyped
30
36
 
31
37
  def []: (untyped key) -> untyped
@@ -46,6 +52,14 @@ module Herb
46
52
 
47
53
  def file_exclude_patterns: () -> untyped
48
54
 
55
+ def parser: () -> untyped
56
+
57
+ # : () -> Array[String]
58
+ def erb_openers: () -> Array[String]
59
+
60
+ # : () -> Hash[Symbol, untyped]
61
+ def parser_options: () -> Hash[Symbol, untyped]
62
+
49
63
  def linter: () -> untyped
50
64
 
51
65
  def engine: () -> untyped
@@ -75,14 +89,20 @@ module Herb
75
89
 
76
90
  def formatter_enabled_for_path?: (untyped path) -> untyped
77
91
 
78
- def path_excluded?: (untyped path, untyped patterns) -> untyped
92
+ def path_excluded?: (untyped path, untyped patterns, ?untyped include_patterns) -> untyped
79
93
 
80
94
  def path_included?: (untyped path, untyped patterns) -> untyped
81
95
 
96
+ def include_overrides_exclude?: (untyped include_pattern, untyped exclude_pattern) -> untyped
97
+
98
+ def literal_prefix_segments: (untyped pattern) -> untyped
99
+
82
100
  def find_files: (?untyped search_path) -> untyped
83
101
 
84
102
  def find_files_for_tool: (untyped tool, ?untyped search_path) -> untyped
85
103
 
104
+ def collect_files: (untyped search_path, untyped include_patterns, untyped exclude_patterns) -> untyped
105
+
86
106
  def find_files_for_linter: (?untyped search_path) -> untyped
87
107
 
88
108
  def find_files_for_formatter: (?untyped search_path) -> untyped
@@ -99,6 +119,10 @@ module Herb
99
119
 
100
120
  def find_config_file: () -> untyped
101
121
 
122
+ def find_misnamed_config_paths: () -> untyped
123
+
124
+ def warn_about_misnamed_config_files: () -> untyped
125
+
102
126
  def project_root?: (untyped path) -> untyped
103
127
 
104
128
  def load_user_config: () -> untyped
@@ -0,0 +1,27 @@
1
+ # Generated from lib/herb/dev/assets.rb with RBS::Inline
2
+
3
+ module Herb
4
+ module Dev
5
+ # Tracks the build outputs a project's asset watchers write.
6
+ #
7
+ # A build tool rewrites its output on every run, and most runs change nothing,
8
+ # so only a moved digest counts as a change.
9
+ class Assets
10
+ ROOT: String
11
+
12
+ PATTERNS: Array[String]
13
+
14
+ # : () -> void
15
+ def initialize: () -> void
16
+
17
+ # : (String) -> Symbol
18
+ def self.kind_for: (String) -> Symbol
19
+
20
+ # : (String) -> void
21
+ def index: (String) -> void
22
+
23
+ # : (String) -> bool
24
+ def changed?: (String) -> bool
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,57 @@
1
+ # Generated from lib/herb/dev/classifier.rb with RBS::Inline
2
+
3
+ module Herb
4
+ module Dev
5
+ # Says what kind of change an edit to a template is.
6
+ #
7
+ # The watcher hands it the previous and current source, and everything downstream decides
8
+ # what to do from the kind alone. `:none` and `:whitespace` render the same as before, so
9
+ # nothing needs to happen. `:static` moved markup without touching any ERB. `:dynamic` is
10
+ # everything else. `:parse_error` carries the errors instead of a diff.
11
+ #
12
+ # The kinds are ordered checks, and the whitespace check has to come before the patchable
13
+ # one. `whitespace_changed` is not a patchable operation, so a reindent classified in the
14
+ # wrong order would read as `:dynamic` and cost a page reload.
15
+ #
16
+ # The diff parses without the configured ERB openers, so a custom opener reads as text on
17
+ # both sides and its edits would pass the patchable check. With openers configured, no
18
+ # change classifies better than `:dynamic`.
19
+ class Classifier
20
+ PATCHABLE_TYPES: Array[String]
21
+
22
+ class Classification < Data
23
+ attr_reader kind(): Symbol
24
+
25
+ attr_reader operations(): Array[Herb::Diff::Operation]
26
+
27
+ attr_reader node_path(): Array[Integer]
28
+
29
+ attr_reader errors(): Array[Herb::Errors::Error]
30
+
31
+ def self.new: (Symbol kind, Array[Herb::Diff::Operation] operations, Array[Integer] node_path, Array[Herb::Errors::Error] errors) -> instance
32
+ | (kind: Symbol, operations: Array[Herb::Diff::Operation], node_path: Array[Integer], errors: Array[Herb::Errors::Error]) -> instance
33
+
34
+ def self.members: () -> [ :kind, :operations, :node_path, :errors ]
35
+
36
+ def members: () -> [ :kind, :operations, :node_path, :errors ]
37
+ end
38
+
39
+ # : (Array[Herb::Diff::Operation]) -> bool
40
+ def self.can_patch?: (Array[Herb::Diff::Operation]) -> bool
41
+
42
+ # : (?configuration: Herb::Configuration?) -> void
43
+ def initialize: (?configuration: Herb::Configuration?) -> void
44
+
45
+ # : (String, String) -> Classification
46
+ def call: (String, String) -> Classification
47
+
48
+ private
49
+
50
+ # : (Symbol, ?operations: Array[Herb::Diff::Operation], ?node_path: Array[Integer], ?errors: Array[Herb::Errors::Error]) -> Classification
51
+ def classification: (Symbol, ?operations: Array[Herb::Diff::Operation], ?node_path: Array[Integer], ?errors: Array[Herb::Errors::Error]) -> Classification
52
+
53
+ # : (Array[Herb::Diff::Operation]) -> Array[Integer]
54
+ def covering_path: (Array[Herb::Diff::Operation]) -> Array[Integer]
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,21 @@
1
+ # Generated from lib/herb/dev/embedded.rb with RBS::Inline
2
+
3
+ module Herb
4
+ module Dev
5
+ class Embedded
6
+ # : (Server, Watcher, Pipeline, Integer) -> void
7
+ def initialize: (Server, Watcher, Pipeline, Integer) -> void
8
+
9
+ attr_reader server: Server
10
+
11
+ attr_reader watcher: Watcher
12
+
13
+ attr_reader pipeline: Pipeline
14
+
15
+ attr_reader pid: Integer
16
+
17
+ # : () -> void
18
+ def stop: () -> void
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,118 @@
1
+ # Generated from lib/herb/dev/pipeline.rb with RBS::Inline
2
+
3
+ module Herb
4
+ module Dev
5
+ # Turns one watcher event into the messages the browsers need.
6
+ #
7
+ # The pipeline holds what it learned about every file so far. The version a file last
8
+ # compiled to says whether an edit changed the template's shape, the slot entries feed
9
+ # the remap, and the error state decides when a clean compile has to say so out loud.
10
+ # Parse errors and compile diagnostics live in the same state machine, so a template
11
+ # that stops compiling behaves exactly like one that stops parsing.
12
+ #
13
+ # The compiler is looked up per event. A host that registers one after the pipeline
14
+ # started is picked up on the next change.
15
+ class Pipeline
16
+ STATES: Array[Symbol]
17
+
18
+ class Failure < Struct[untyped]
19
+ attr_accessor mode(): untyped
20
+
21
+ attr_accessor manifest(): untyped
22
+
23
+ attr_accessor version(): untyped
24
+
25
+ attr_accessor slot_entries(): untyped
26
+
27
+ attr_accessor statics(): untyped
28
+
29
+ attr_accessor static_markup(): untyped
30
+
31
+ attr_accessor diagnostics(): untyped
32
+
33
+ def self.new: (?untyped mode, ?untyped manifest, ?untyped version, ?untyped slot_entries, ?untyped statics, ?untyped static_markup, ?untyped diagnostics) -> instance
34
+ | (?mode: untyped, ?manifest: untyped, ?version: untyped, ?slot_entries: untyped, ?statics: untyped, ?static_markup: untyped, ?diagnostics: untyped) -> instance
35
+ end
36
+
37
+ # : (server: untyped, ?configuration: Herb::Configuration?, ?compiler: ^() -> Herb::Dev::_Compiler?) -> void
38
+ def initialize: (server: untyped, ?configuration: Herb::Configuration?, ?compiler: ^() -> Herb::Dev::_Compiler?) -> void
39
+
40
+ # : () { (untyped, Classifier::Classification?) -> void } -> void
41
+ def on_classified: () { (untyped, Classifier::Classification?) -> void } -> void
42
+
43
+ # : (Hash[String, String]) -> Array[String]
44
+ def remember_broken: (Hash[String, String]) -> Array[String]
45
+
46
+ # : () -> Array[String]
47
+ def broken_files: () -> Array[String]
48
+
49
+ # : () -> Array[Hash[Symbol, untyped]]
50
+ def broken_entries: () -> Array[Hash[Symbol, untyped]]
51
+
52
+ # : () -> bool
53
+ def compiles?: () -> bool
54
+
55
+ # : (Watcher::Event) -> void
56
+ def handle_event: (Watcher::Event) -> void
57
+
58
+ private
59
+
60
+ # : (Watcher::Event) -> void
61
+ def handle_removed: (Watcher::Event) -> void
62
+
63
+ # : (Watcher::Event) -> void
64
+ def handle_added: (Watcher::Event) -> void
65
+
66
+ # : (Watcher::Event) -> void
67
+ def handle_changed: (Watcher::Event) -> void
68
+
69
+ # : (Watcher::Event, Classifier::Classification) -> void
70
+ def handle_parse_error: (Watcher::Event, Classifier::Classification) -> void
71
+
72
+ # : (Watcher::Event, Classifier::Classification) -> void
73
+ def handle_content_change: (Watcher::Event, Classifier::Classification) -> void
74
+
75
+ # : (Herb::Dev::_Compiler, Watcher::Event) -> untyped
76
+ def compile: (Herb::Dev::_Compiler, Watcher::Event) -> untyped
77
+
78
+ # : (StandardError) -> untyped
79
+ def failure: (StandardError) -> untyped
80
+
81
+ # : (String, Watcher::Event, untyped, Classifier::Classification) -> Hash[Symbol, untyped]
82
+ def schema_for: (String, Watcher::Event, untyped, Classifier::Classification) -> Hash[Symbol, untyped]
83
+
84
+ # : (String, Classifier::Classification, untyped) -> Hash[Symbol, untyped]
85
+ def invalidate_for: (String, Classifier::Classification, untyped) -> Hash[Symbol, untyped]
86
+
87
+ # : (String, Classifier::Classification, untyped) -> Symbol
88
+ def scope_for: (String, Classifier::Classification, untyped) -> Symbol
89
+
90
+ # : (untyped) -> untyped
91
+ def states_of: (untyped) -> untyped
92
+
93
+ # : (String, untyped, Classifier::Classification) -> Hash[String, untyped]?
94
+ def remap_for: (String, untyped, Classifier::Classification) -> Hash[String, untyped]?
95
+
96
+ # : (String, untyped) -> Array[String]?
97
+ def changed_statics_for: (String, untyped) -> Array[String]?
98
+
99
+ # : (String, untyped) -> void
100
+ def remember: (String, untyped) -> void
101
+
102
+ # : (String, Array[Hash[Symbol, untyped]]) -> void
103
+ def record_diagnostics: (String, Array[Hash[Symbol, untyped]]) -> void
104
+
105
+ # : (untyped) -> Array[Hash[Symbol, untyped]]
106
+ def diagnostics_of: (untyped) -> Array[Hash[Symbol, untyped]]
107
+
108
+ # : (Watcher::Event, Classifier::Classification) -> void
109
+ def handle_without_compiler: (Watcher::Event, Classifier::Classification) -> void
110
+
111
+ # : (Hash[Symbol, untyped]) -> void
112
+ def broadcast: (Hash[Symbol, untyped]) -> void
113
+
114
+ # : (Watcher::Event, Classifier::Classification?) -> void
115
+ def notify: (Watcher::Event, Classifier::Classification?) -> void
116
+ end
117
+ end
118
+ end
@@ -0,0 +1,78 @@
1
+ # Generated from lib/herb/dev/protocol.rb with RBS::Inline
2
+
3
+ module Herb
4
+ module Dev
5
+ # Builds the messages the dev server broadcasts, and nothing else.
6
+ #
7
+ # Everything here is a pure function from what the pipeline knows to a Hash the socket
8
+ # writes out, so the whole protocol is testable without a connection.
9
+ #
10
+ # A `schema` message always carries `diagnostics`, and an empty array means the file is
11
+ # clean now. That is the whole error lifecycle. There is no separate message for a file
12
+ # being fixed.
13
+ module Protocol
14
+ MAX_REMAP_OPERATIONS: Integer
15
+
16
+ NULLING_TYPES: Array[Symbol]
17
+
18
+ REPLAYED_TYPES: Array[Symbol]
19
+
20
+ # : (file: String, mode: Symbol?, from: String?, to: String?, ?manifest: Hash[String, untyped]?, ?static_markup: String?, ?statics: Hash[String, String]?, ?changed_statics: Array[String]?, ?remap: Hash[String, untyped]?, ?diagnostics: Array[Hash[Symbol, untyped]], ?source: String?) -> Hash[Symbol, untyped]
21
+ def self.schema: (file: String, mode: Symbol?, from: String?, to: String?, ?manifest: Hash[String, untyped]?, ?static_markup: String?, ?statics: Hash[String, String]?, ?changed_statics: Array[String]?, ?remap: Hash[String, untyped]?, ?diagnostics: Array[Hash[Symbol, untyped]], ?source: String?) -> Hash[Symbol, untyped]
22
+
23
+ # : (project: String?, ?broken_files: Array[String]) -> Hash[Symbol, untyped]
24
+ def self.welcome: (project: String?, ?broken_files: Array[String]) -> Hash[Symbol, untyped]
25
+
26
+ # : (file: String, version: String?, node_path: Array[Integer], scope: Symbol) -> Hash[Symbol, untyped]
27
+ def self.invalidate: (file: String, version: String?, node_path: Array[Integer], scope: Symbol) -> Hash[Symbol, untyped]
28
+
29
+ # : (kind: Symbol, file: String) -> Hash[Symbol, untyped]
30
+ def self.asset: (kind: Symbol, file: String) -> Hash[Symbol, untyped]
31
+
32
+ # : (file: String, source: String, errors: Array[untyped]) -> Hash[Symbol, untyped]
33
+ def self.error: (file: String, source: String, errors: Array[untyped]) -> Hash[Symbol, untyped]
34
+
35
+ # : (String, Array[untyped]) -> Array[Hash[Symbol, untyped]]
36
+ def self.error_entries: (String, Array[untyped]) -> Array[Hash[Symbol, untyped]]
37
+
38
+ # : (file: String, ?source: String?, ?errors: Array[untyped]?, ?diagnostics: Array[untyped]?) -> Hash[Symbol, untyped]
39
+ def self.broken: (file: String, ?source: String?, ?errors: Array[untyped]?, ?diagnostics: Array[untyped]?) -> Hash[Symbol, untyped]
40
+
41
+ # : (Array[Hash[Symbol, untyped]], Array[Hash[Symbol, untyped]], Array[Herb::Diff::Operation]) -> Hash[String, untyped]?
42
+ def self.remap: (Array[Hash[Symbol, untyped]], Array[Hash[Symbol, untyped]], Array[Herb::Diff::Operation]) -> Hash[String, untyped]?
43
+
44
+ # : (Hash[Symbol, untyped], Array[Hash[Symbol, untyped]], Hash[String, Hash[Symbol, untyped]], Array[Herb::Diff::Operation], Array[Herb::Diff::Operation], Array[Herb::Diff::Operation]) -> Integer?
45
+ def self.target_for: (Hash[Symbol, untyped], Array[Hash[Symbol, untyped]], Hash[String, Hash[Symbol, untyped]], Array[Herb::Diff::Operation], Array[Herb::Diff::Operation], Array[Herb::Diff::Operation]) -> Integer?
46
+
47
+ # : (Array[Integer], Array[Herb::Diff::Operation], Array[Herb::Diff::Operation], Array[Herb::Diff::Operation]) -> Array[Integer]?
48
+ def self.replay: (Array[Integer], Array[Herb::Diff::Operation], Array[Herb::Diff::Operation], Array[Herb::Diff::Operation]) -> Array[Integer]?
49
+
50
+ # : (Array[Herb::Diff::Operation]) -> bool
51
+ def self.replayable?: (Array[Herb::Diff::Operation]) -> bool
52
+
53
+ # : (Hash[Symbol, untyped], Hash[Symbol, untyped], Array[Integer]) -> bool
54
+ def self.counterpart?: (Hash[Symbol, untyped], Hash[Symbol, untyped], Array[Integer]) -> bool
55
+
56
+ # : (Array[Herb::Diff::Operation], Array[Integer]) -> bool
57
+ def self.nulled?: (Array[Herb::Diff::Operation], Array[Integer]) -> bool
58
+
59
+ # : (Array[Integer], Array[Integer]) -> bool
60
+ def self.prefix?: (Array[Integer], Array[Integer]) -> bool
61
+
62
+ # : (Array[Integer], Array[Integer]) -> bool
63
+ def self.sibling_before?: (Array[Integer], Array[Integer]) -> bool
64
+
65
+ # : (Array[Integer], Array[Integer]) -> bool
66
+ def self.sibling_at_or_before?: (Array[Integer], Array[Integer]) -> bool
67
+
68
+ # : (Array[Integer], Array[Integer]) -> bool
69
+ def self.same_parent?: (Array[Integer], Array[Integer]) -> bool
70
+
71
+ # : (Array[Integer], Array[Integer]) -> Integer
72
+ def self.sibling_index: (Array[Integer], Array[Integer]) -> Integer
73
+
74
+ # : (Array[Integer]) -> Integer
75
+ def self.operation_index: (Array[Integer]) -> Integer
76
+ end
77
+ end
78
+ end
@@ -7,53 +7,91 @@ module Herb
7
7
 
8
8
  PATCHABLE_TYPES: Array[String]
9
9
 
10
- def self.can_patch?: (untyped operations) -> untyped
10
+ # : (Array[Herb::Diff::Operation]) -> bool
11
+ def self.can_patch?: (Array[Herb::Diff::Operation]) -> bool
11
12
 
12
- CLEAR_SCREEN: ::String
13
+ CLEAR_SCREEN: String
13
14
 
14
- HIDE_CURSOR: ::String
15
+ HIDE_CURSOR: String
15
16
 
16
- SHOW_CURSOR: ::String
17
+ SHOW_CURSOR: String
17
18
 
18
- def initialize: (?path: untyped, ?cli: untyped) -> untyped
19
+ # : (?path: String) -> void
20
+ def initialize: (?path: String) -> void
19
21
 
20
- def run: () -> untyped
22
+ # : () -> void
23
+ def run: () -> void
21
24
 
22
- def stop: () -> untyped
25
+ # : () -> void
26
+ def stop: () -> void
23
27
 
24
- def restart: () -> untyped
28
+ # : () -> void
29
+ def restart: () -> void
25
30
 
26
- def status: () -> untyped
31
+ # : () -> void
32
+ def status: () -> void
27
33
 
28
34
  private
29
35
 
30
- def pluralize: (untyped count, untyped word) -> untyped
36
+ # : () -> bool
37
+ def interactive?: () -> bool
31
38
 
32
- def require_cruise: () -> untyped
39
+ # : (String) -> void
40
+ def terminal: (String) -> void
33
41
 
34
- def check_existing_server: (untyped expanded_path) -> untyped
42
+ # : (String, Array[Herb::Diagnostic], String) -> void
43
+ def print_diagnostics: (String, Array[Herb::Diagnostic], String) -> void
35
44
 
36
- def find_port: () -> untyped
45
+ # : (Integer, String) -> String
46
+ def pluralize: (Integer, String) -> String
37
47
 
38
- def print_header: (untyped config, untyped expanded_path) -> untyped
48
+ # : () -> void
49
+ def require_cruise: () -> void
39
50
 
40
- def index_files: (untyped config, untyped path) -> untyped
51
+ # : (String) -> void
52
+ def check_existing_server: (String) -> void
41
53
 
42
- def watch_files: (untyped config, untyped expanded_path, untyped websocket, untyped file_states) -> untyped
54
+ # : () -> Integer
55
+ def find_port: () -> Integer
43
56
 
44
- def handle_file_change: (untyped file_path, untyped relative_path, untyped file_states, untyped errored_files, untyped websocket, untyped timestamp, untyped display_path) -> untyped
57
+ # : (Herb::Configuration, String) -> void
58
+ def print_header: (Herb::Configuration, String) -> void
45
59
 
46
- def broadcast_errors: (untyped file_path, untyped relative_path, untyped current_parse, untyped previous_content, untyped errored_files, untyped websocket, untyped timestamp, untyped display_path) -> untyped
60
+ # : (Watcher, Pipeline) -> Array[String]
61
+ def index_files: (Watcher, Pipeline) -> Array[String]
47
62
 
48
- def broadcast_fixed: (untyped file_path, untyped relative_path, untyped current_content, untyped file_states, untyped websocket, untyped timestamp, untyped display_path) -> untyped
63
+ # : (Integer) -> String
64
+ def broken_summary: (Integer) -> String
49
65
 
50
- def handle_diff: (untyped file_path, untyped relative_path, untyped current_content, untyped previous_content, untyped file_states, untyped websocket, untyped timestamp, untyped display_path) -> untyped
66
+ # : () -> Thread?
67
+ def watch_stdin: () -> Thread?
51
68
 
52
- def print_diff_summary: (untyped operations, untyped can_patch, untyped websocket, untyped timestamp, untyped display_path) -> untyped
69
+ # : () -> void
70
+ def announce_first_change: () -> void
53
71
 
54
- def print_diff_node: (untyped indent, untyped sign, untyped color, untyped node, untyped _type) -> untyped
72
+ # : (Symbol, Integer) -> void
73
+ def paint_client: (Symbol, Integer) -> void
55
74
 
56
- def extract_node_value: (untyped node) -> untyped
75
+ # : (Watcher::Event, Classifier::Classification?) -> void
76
+ def paint: (Watcher::Event, Classifier::Classification?) -> void
77
+
78
+ # : (Watcher::Event, Classifier::Classification, String, String) -> void
79
+ def paint_change: (Watcher::Event, Classifier::Classification, String, String) -> void
80
+
81
+ # : (Watcher::Event, Classifier::Classification) -> Array[Herb::Errors::Error]
82
+ def new_errors: (Watcher::Event, Classifier::Classification) -> Array[Herb::Errors::Error]
83
+
84
+ # : (Watcher::Event, String, String) -> void
85
+ def paint_cleared: (Watcher::Event, String, String) -> void
86
+
87
+ # : (Classifier::Classification, String, String) -> void
88
+ def print_diff_summary: (Classifier::Classification, String, String) -> void
89
+
90
+ # : (String, String, Integer, Herb::AST::Node, String) -> void
91
+ def print_diff_node: (String, String, Integer, Herb::AST::Node, String) -> void
92
+
93
+ # : (Herb::AST::Node?) -> String?
94
+ def extract_node_value: (Herb::AST::Node?) -> String?
57
95
  end
58
96
  end
59
97
  end
@@ -3,48 +3,75 @@
3
3
  module Herb
4
4
  module Dev
5
5
  class Server
6
- DEFAULT_PORT: ::Integer
6
+ DEFAULT_PORT: Integer
7
7
 
8
- HANDSHAKE_TIMEOUT: ::Integer
8
+ HANDSHAKE_TIMEOUT: Integer
9
9
 
10
- attr_reader port: untyped
10
+ ROLES: Array[Symbol]
11
11
 
12
- attr_reader project_path: untyped
12
+ class Client < Struct[untyped]
13
+ attr_accessor socket(): untyped
13
14
 
14
- class Client < Data
15
- attr_reader socket(): untyped
15
+ attr_accessor version(): untyped
16
16
 
17
- attr_reader version(): untyped
17
+ attr_accessor mutex(): untyped
18
18
 
19
- attr_reader mutex(): untyped
19
+ attr_accessor role(): untyped
20
20
 
21
- def self.new: (untyped socket, untyped version, untyped mutex) -> instance
22
- | (socket: untyped, version: untyped, mutex: untyped) -> instance
21
+ def self.new: (?socket: untyped, ?version: untyped, ?mutex: untyped, ?role: untyped) -> instance
22
+ | ({ ?socket: untyped, ?version: untyped, ?mutex: untyped, ?role: untyped }) -> instance
23
+ end
23
24
 
24
- def self.members: () -> [ :socket, :version, :mutex ]
25
+ attr_reader port: Integer
25
26
 
26
- def members: () -> [ :socket, :version, :mutex ]
27
- end
27
+ attr_reader project_path: String?
28
+
29
+ # : (?port: Integer, ?project_path: String?, ?kind: String) -> void
30
+ def initialize: (?port: Integer, ?project_path: String?, ?kind: String) -> void
31
+
32
+ # : () -> void
33
+ def start: () -> void
28
34
 
29
- def initialize: (?port: untyped, ?project_path: untyped) -> untyped
35
+ # : () -> void
36
+ def stop: () -> void
30
37
 
31
- def start: () -> untyped
38
+ # : (Hash[Symbol, untyped] | String, ?to: Symbol) -> void
39
+ def broadcast: (Hash[Symbol, untyped] | String, ?to: Symbol) -> void
32
40
 
33
- def stop: () -> untyped
41
+ # : () { (Symbol, Integer) -> void } -> void
42
+ def on_client: () { (Symbol, Integer) -> void } -> void
34
43
 
35
- def broadcast: (untyped message) -> untyped
44
+ # : () { () -> Array[Hash[Symbol, untyped]] } -> void
45
+ def on_welcome: () { () -> Array[Hash[Symbol, untyped]] } -> void
36
46
 
37
- def client_count: () -> untyped
47
+ # : (Client) -> void
48
+ def register: (Client) -> void
38
49
 
39
- def self.port_available?: (untyped port) -> untyped
50
+ # : (untyped) -> void
51
+ def unregister: (untyped) -> void
40
52
 
41
- def self.find_available_port: (?untyped starting_port) -> untyped
53
+ # : () -> Integer
54
+ def client_count: () -> Integer
55
+
56
+ # : (Integer) -> bool
57
+ def self.port_available?: (Integer) -> bool
58
+
59
+ # : (?Integer) -> Integer?
60
+ def self.find_available_port: (?Integer) -> Integer?
61
+
62
+ # : (Client, String) -> void
63
+ def handle_text_frame: (Client, String) -> void
42
64
 
43
65
  private
44
66
 
45
- def safely_close: (untyped resource) -> untyped
67
+ # : () -> Array[Hash[Symbol, untyped]]
68
+ def broken_entries: () -> Array[Hash[Symbol, untyped]]
69
+
70
+ # : (untyped) -> void
71
+ def safely_close: (untyped) -> void
46
72
 
47
- def handle_connection: (untyped socket) -> untyped
73
+ # : (untyped) -> void
74
+ def handle_connection: (untyped) -> void
48
75
  end
49
76
  end
50
77
  end