herb 0.10.4 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Makefile +16 -6
- data/README.md +36 -119
- data/Rakefile +2 -11
- data/config/action_view_helpers/actioncable/action_cable_helper/action_cable_meta_tag.yml +12 -8
- data/config/action_view_helpers/actionpack/content_security_policy/content_security_policy?.yml +9 -6
- data/config/action_view_helpers/actionpack/content_security_policy/content_security_policy_nonce.yml +9 -6
- data/config/action_view_helpers/actionpack/polymorphic_routes/polymorphic_path.yml +20 -12
- data/config/action_view_helpers/actionpack/polymorphic_routes/polymorphic_url.yml +30 -18
- data/config/action_view_helpers/actionpack/request_forgery_protection/form_authenticity_token.yml +15 -9
- data/config/action_view_helpers/actionpack/request_forgery_protection/protect_against_forgery?.yml +9 -6
- data/config/action_view_helpers/actiontext/content_helper/render_action_text_content.yml +15 -9
- data/config/action_view_helpers/actiontext/content_helper/sanitize_action_text_content.yml +15 -9
- data/config/action_view_helpers/actiontext/tag_helper/rich_textarea_tag.yml +34 -22
- data/config/action_view_helpers/actionview/active_model_helper/error_message.yml +9 -6
- data/config/action_view_helpers/actionview/active_model_helper/error_wrapping.yml +9 -6
- data/config/action_view_helpers/actionview/active_model_helper/object.yml +9 -6
- data/config/action_view_helpers/actionview/asset_tag_helper/apply_stylesheet_media_default.yml +9 -6
- data/config/action_view_helpers/actionview/asset_tag_helper/audio_tag.yml +40 -27
- data/config/action_view_helpers/actionview/asset_tag_helper/auto_discovery_link_tag.yml +37 -23
- data/config/action_view_helpers/actionview/asset_tag_helper/auto_include_nonce.yml +9 -6
- data/config/action_view_helpers/actionview/asset_tag_helper/auto_include_nonce_for_scripts.yml +9 -6
- data/config/action_view_helpers/actionview/asset_tag_helper/auto_include_nonce_for_styles.yml +9 -6
- data/config/action_view_helpers/actionview/asset_tag_helper/favicon_link_tag.yml +32 -22
- data/config/action_view_helpers/actionview/asset_tag_helper/image_decoding.yml +9 -6
- data/config/action_view_helpers/actionview/asset_tag_helper/image_loading.yml +9 -6
- data/config/action_view_helpers/actionview/asset_tag_helper/image_tag.yml +67 -46
- data/config/action_view_helpers/actionview/asset_tag_helper/javascript_include_tag.yml +58 -39
- data/config/action_view_helpers/actionview/asset_tag_helper/picture_tag.yml +22 -14
- data/config/action_view_helpers/actionview/asset_tag_helper/preload_link_tag.yml +45 -30
- data/config/action_view_helpers/actionview/asset_tag_helper/preload_links_header.yml +9 -6
- data/config/action_view_helpers/actionview/asset_tag_helper/stylesheet_link_tag.yml +49 -30
- data/config/action_view_helpers/actionview/asset_tag_helper/video_tag.yml +53 -35
- data/config/action_view_helpers/actionview/asset_url_helper/asset_path.yml +16 -10
- data/config/action_view_helpers/actionview/asset_url_helper/asset_url.yml +16 -10
- data/config/action_view_helpers/actionview/asset_url_helper/audio_path.yml +16 -10
- data/config/action_view_helpers/actionview/asset_url_helper/audio_url.yml +16 -10
- data/config/action_view_helpers/actionview/asset_url_helper/compute_asset_extname.yml +9 -6
- data/config/action_view_helpers/actionview/asset_url_helper/compute_asset_host.yml +9 -6
- data/config/action_view_helpers/actionview/asset_url_helper/compute_asset_path.yml +9 -6
- data/config/action_view_helpers/actionview/asset_url_helper/font_path.yml +16 -10
- data/config/action_view_helpers/actionview/asset_url_helper/font_url.yml +16 -10
- data/config/action_view_helpers/actionview/asset_url_helper/image_path.yml +16 -10
- data/config/action_view_helpers/actionview/asset_url_helper/image_url.yml +16 -10
- data/config/action_view_helpers/actionview/asset_url_helper/javascript_path.yml +16 -10
- data/config/action_view_helpers/actionview/asset_url_helper/javascript_url.yml +16 -10
- data/config/action_view_helpers/actionview/asset_url_helper/public_compute_asset_path.yml +9 -6
- data/config/action_view_helpers/actionview/asset_url_helper/stylesheet_path.yml +16 -10
- data/config/action_view_helpers/actionview/asset_url_helper/stylesheet_url.yml +16 -10
- data/config/action_view_helpers/actionview/asset_url_helper/video_path.yml +16 -10
- data/config/action_view_helpers/actionview/asset_url_helper/video_url.yml +16 -10
- data/config/action_view_helpers/actionview/atom_feed_helper/atom_feed.yml +52 -27
- data/config/action_view_helpers/actionview/cache_helper/cache.yml +25 -15
- data/config/action_view_helpers/actionview/cache_helper/cache_fragment_name.yml +9 -6
- data/config/action_view_helpers/actionview/cache_helper/cache_if.yml +20 -12
- data/config/action_view_helpers/actionview/cache_helper/cache_unless.yml +20 -12
- data/config/action_view_helpers/actionview/cache_helper/caching_predicate.yml +9 -6
- data/config/action_view_helpers/actionview/cache_helper/digest_path_from_template.yml +9 -6
- data/config/action_view_helpers/actionview/cache_helper/fragment_for.yml +9 -6
- data/config/action_view_helpers/actionview/cache_helper/fragment_name_with_digest.yml +9 -6
- data/config/action_view_helpers/actionview/cache_helper/read_fragment_for.yml +9 -6
- data/config/action_view_helpers/actionview/cache_helper/uncacheable.yml +9 -6
- data/config/action_view_helpers/actionview/cache_helper/write_fragment_for.yml +9 -6
- data/config/action_view_helpers/actionview/capture_helper/capture.yml +9 -6
- data/config/action_view_helpers/actionview/capture_helper/content_for.yml +20 -12
- data/config/action_view_helpers/actionview/capture_helper/content_for_predicate.yml +15 -9
- data/config/action_view_helpers/actionview/capture_helper/provide.yml +15 -9
- data/config/action_view_helpers/actionview/capture_helper/with_output_buffer.yml +9 -6
- data/config/action_view_helpers/actionview/content_exfiltration_prevention_helper/prepend_content_exfiltration_prevention.yml +9 -6
- data/config/action_view_helpers/actionview/content_exfiltration_prevention_helper/prevent_content_exfiltration.yml +9 -6
- data/config/action_view_helpers/actionview/controller_helper/action_name.yml +9 -6
- data/config/action_view_helpers/actionview/controller_helper/assign_controller.yml +9 -6
- data/config/action_view_helpers/actionview/controller_helper/controller.yml +9 -6
- data/config/action_view_helpers/actionview/controller_helper/controller_name.yml +9 -6
- data/config/action_view_helpers/actionview/controller_helper/controller_path.yml +9 -6
- data/config/action_view_helpers/actionview/controller_helper/cookies.yml +9 -6
- data/config/action_view_helpers/actionview/controller_helper/flash.yml +9 -6
- data/config/action_view_helpers/actionview/controller_helper/headers.yml +9 -6
- data/config/action_view_helpers/actionview/controller_helper/logger.yml +9 -6
- data/config/action_view_helpers/actionview/controller_helper/params.yml +9 -6
- data/config/action_view_helpers/actionview/controller_helper/request.yml +9 -6
- data/config/action_view_helpers/actionview/controller_helper/request_forgery_protection_token.yml +9 -6
- data/config/action_view_helpers/actionview/controller_helper/response.yml +9 -6
- data/config/action_view_helpers/actionview/controller_helper/session.yml +9 -6
- data/config/action_view_helpers/actionview/csp_helper/csp_meta_tag.yml +18 -11
- data/config/action_view_helpers/actionview/csrf_helper/csrf_meta_tags.yml +16 -10
- data/config/action_view_helpers/actionview/date_helper/date_select.yml +85 -51
- data/config/action_view_helpers/actionview/date_helper/datetime_select.yml +65 -39
- data/config/action_view_helpers/actionview/date_helper/distance_of_time_in_words.yml +30 -18
- data/config/action_view_helpers/actionview/date_helper/relative_time_in_words.yml +35 -21
- data/config/action_view_helpers/actionview/date_helper/select_date.yml +50 -30
- data/config/action_view_helpers/actionview/date_helper/select_datetime.yml +65 -39
- data/config/action_view_helpers/actionview/date_helper/select_day.yml +40 -24
- data/config/action_view_helpers/actionview/date_helper/select_hour.yml +50 -30
- data/config/action_view_helpers/actionview/date_helper/select_minute.yml +40 -24
- data/config/action_view_helpers/actionview/date_helper/select_month.yml +60 -36
- data/config/action_view_helpers/actionview/date_helper/select_second.yml +35 -21
- data/config/action_view_helpers/actionview/date_helper/select_time.yml +55 -33
- data/config/action_view_helpers/actionview/date_helper/select_year.yml +45 -27
- data/config/action_view_helpers/actionview/date_helper/time_ago_in_words.yml +21 -13
- data/config/action_view_helpers/actionview/date_helper/time_select.yml +60 -36
- data/config/action_view_helpers/actionview/date_helper/time_tag.yml +32 -20
- data/config/action_view_helpers/actionview/debug_helper/debug.yml +15 -9
- data/config/action_view_helpers/actionview/form_builder/button.yml +60 -0
- data/config/action_view_helpers/actionview/form_builder/submit.yml +48 -0
- data/config/action_view_helpers/actionview/form_helper/apply_form_for_options.yml +9 -6
- data/config/action_view_helpers/actionview/form_helper/checkbox.yml +41 -25
- data/config/action_view_helpers/actionview/form_helper/color_field.yml +25 -15
- data/config/action_view_helpers/actionview/form_helper/date_field.yml +35 -21
- data/config/action_view_helpers/actionview/form_helper/datetime_field.yml +41 -25
- data/config/action_view_helpers/actionview/form_helper/email_field.yml +25 -15
- data/config/action_view_helpers/actionview/form_helper/emitted_hidden_id.yml +9 -6
- data/config/action_view_helpers/actionview/form_helper/fields.yml +37 -18
- data/config/action_view_helpers/actionview/form_helper/fields_for.yml +33 -15
- data/config/action_view_helpers/actionview/form_helper/file_field.yml +45 -27
- data/config/action_view_helpers/actionview/form_helper/form_for.yml +45 -24
- data/config/action_view_helpers/actionview/form_helper/form_with.yml +56 -30
- data/config/action_view_helpers/actionview/form_helper/form_with_generates_ids.yml +9 -6
- data/config/action_view_helpers/actionview/form_helper/form_with_generates_remote_forms.yml +9 -6
- data/config/action_view_helpers/actionview/form_helper/hidden_field.yml +25 -15
- data/config/action_view_helpers/actionview/form_helper/label.yml +52 -27
- data/config/action_view_helpers/actionview/form_helper/month_field.yml +25 -15
- data/config/action_view_helpers/actionview/form_helper/multipart.yml +9 -6
- data/config/action_view_helpers/actionview/form_helper/multiple_file_field_include_hidden.yml +9 -6
- data/config/action_view_helpers/actionview/form_helper/number_field.yml +45 -27
- data/config/action_view_helpers/actionview/form_helper/password_field.yml +25 -15
- data/config/action_view_helpers/actionview/form_helper/radio_button.yml +30 -18
- data/config/action_view_helpers/actionview/form_helper/range_field.yml +45 -27
- data/config/action_view_helpers/actionview/form_helper/search_field.yml +25 -15
- data/config/action_view_helpers/actionview/form_helper/telephone_field.yml +26 -16
- data/config/action_view_helpers/actionview/form_helper/text_field.yml +25 -15
- data/config/action_view_helpers/actionview/form_helper/textarea.yml +31 -19
- data/config/action_view_helpers/actionview/form_helper/time_field.yml +40 -24
- data/config/action_view_helpers/actionview/form_helper/url_field.yml +25 -15
- data/config/action_view_helpers/actionview/form_helper/week_field.yml +25 -15
- data/config/action_view_helpers/actionview/form_options_helper/collection_checkboxes.yml +58 -31
- data/config/action_view_helpers/actionview/form_options_helper/collection_radio_buttons.yml +57 -30
- data/config/action_view_helpers/actionview/form_options_helper/collection_select.yml +65 -39
- data/config/action_view_helpers/actionview/form_options_helper/grouped_collection_select.yml +65 -39
- data/config/action_view_helpers/actionview/form_options_helper/grouped_options_for_select.yml +35 -21
- data/config/action_view_helpers/actionview/form_options_helper/option_groups_from_collection_for_select.yml +40 -24
- data/config/action_view_helpers/actionview/form_options_helper/options_for_select.yml +20 -12
- data/config/action_view_helpers/actionview/form_options_helper/options_from_collection_for_select.yml +30 -18
- data/config/action_view_helpers/actionview/form_options_helper/select.yml +60 -36
- data/config/action_view_helpers/actionview/form_options_helper/time_zone_options_for_select.yml +25 -15
- data/config/action_view_helpers/actionview/form_options_helper/time_zone_select.yml +50 -30
- data/config/action_view_helpers/actionview/form_options_helper/weekday_options_for_select.yml +30 -18
- data/config/action_view_helpers/actionview/form_options_helper/weekday_select.yml +30 -18
- data/config/action_view_helpers/actionview/form_tag_helper/button_tag.yml +39 -21
- data/config/action_view_helpers/actionview/form_tag_helper/checkbox_tag.yml +33 -21
- data/config/action_view_helpers/actionview/form_tag_helper/color_field_tag.yml +26 -17
- data/config/action_view_helpers/actionview/form_tag_helper/date_field_tag.yml +27 -17
- data/config/action_view_helpers/actionview/form_tag_helper/datetime_field_tag.yml +28 -18
- data/config/action_view_helpers/actionview/form_tag_helper/default_enforce_utf8.yml +9 -6
- data/config/action_view_helpers/actionview/form_tag_helper/email_field_tag.yml +27 -17
- data/config/action_view_helpers/actionview/form_tag_helper/embed_authenticity_token_in_remote_forms.yml +9 -6
- data/config/action_view_helpers/actionview/form_tag_helper/field_id.yml +30 -18
- data/config/action_view_helpers/actionview/form_tag_helper/field_name.yml +30 -18
- data/config/action_view_helpers/actionview/form_tag_helper/field_set_tag.yml +23 -15
- data/config/action_view_helpers/actionview/form_tag_helper/file_field_tag.yml +35 -22
- data/config/action_view_helpers/actionview/form_tag_helper/form_tag.yml +38 -24
- data/config/action_view_helpers/actionview/form_tag_helper/hidden_field_tag.yml +27 -17
- data/config/action_view_helpers/actionview/form_tag_helper/image_submit_tag.yml +31 -21
- data/config/action_view_helpers/actionview/form_tag_helper/label_tag.yml +33 -17
- data/config/action_view_helpers/actionview/form_tag_helper/month_field_tag.yml +27 -17
- data/config/action_view_helpers/actionview/form_tag_helper/number_field_tag.yml +47 -29
- data/config/action_view_helpers/actionview/form_tag_helper/password_field_tag.yml +27 -17
- data/config/action_view_helpers/actionview/form_tag_helper/radio_button_tag.yml +32 -20
- data/config/action_view_helpers/actionview/form_tag_helper/range_field_tag.yml +47 -29
- data/config/action_view_helpers/actionview/form_tag_helper/search_field_tag.yml +27 -17
- data/config/action_view_helpers/actionview/form_tag_helper/select_tag.yml +47 -29
- data/config/action_view_helpers/actionview/form_tag_helper/submit_tag.yml +33 -21
- data/config/action_view_helpers/actionview/form_tag_helper/telephone_field_tag.yml +28 -18
- data/config/action_view_helpers/actionview/form_tag_helper/text_field_tag.yml +27 -17
- data/config/action_view_helpers/actionview/form_tag_helper/textarea_tag.yml +31 -20
- data/config/action_view_helpers/actionview/form_tag_helper/time_field_tag.yml +27 -17
- data/config/action_view_helpers/actionview/form_tag_helper/url_field_tag.yml +27 -17
- data/config/action_view_helpers/actionview/form_tag_helper/utf8_enforcer_tag.yml +9 -6
- data/config/action_view_helpers/actionview/form_tag_helper/week_field_tag.yml +28 -18
- data/config/action_view_helpers/actionview/javascript_helper/escape_javascript.yml +16 -10
- data/config/action_view_helpers/actionview/javascript_helper/javascript_cdata_section.yml +9 -6
- data/config/action_view_helpers/actionview/javascript_helper/javascript_tag.yml +41 -27
- data/config/action_view_helpers/actionview/number_helper/number_to_currency.yml +29 -18
- data/config/action_view_helpers/actionview/number_helper/number_to_human.yml +25 -15
- data/config/action_view_helpers/actionview/number_helper/number_to_human_size.yml +20 -12
- data/config/action_view_helpers/actionview/number_helper/number_to_percentage.yml +20 -12
- data/config/action_view_helpers/actionview/number_helper/number_to_phone.yml +33 -20
- data/config/action_view_helpers/actionview/number_helper/number_with_delimiter.yml +21 -13
- data/config/action_view_helpers/actionview/number_helper/number_with_precision.yml +25 -15
- data/config/action_view_helpers/actionview/output_safety_helper/raw.yml +15 -9
- data/config/action_view_helpers/actionview/output_safety_helper/safe_join.yml +20 -12
- data/config/action_view_helpers/actionview/output_safety_helper/to_sentence.yml +24 -15
- data/config/action_view_helpers/actionview/record_identifier/dom_class.yml +20 -12
- data/config/action_view_helpers/actionview/record_identifier/dom_id.yml +20 -12
- data/config/action_view_helpers/actionview/record_identifier/dom_target.yml +15 -9
- data/config/action_view_helpers/actionview/record_identifier/model_name_from_record_or_class.yml +9 -6
- data/config/action_view_helpers/actionview/rendering_helper/render.yml +108 -22
- data/config/action_view_helpers/actionview/sanitize_helper/sanitize.yml +25 -15
- data/config/action_view_helpers/actionview/sanitize_helper/sanitize_css.yml +15 -9
- data/config/action_view_helpers/actionview/sanitize_helper/sanitizer_vendor.yml +9 -6
- data/config/action_view_helpers/actionview/sanitize_helper/strip_links.yml +15 -9
- data/config/action_view_helpers/actionview/sanitize_helper/strip_tags.yml +15 -9
- data/config/action_view_helpers/actionview/tag_helper/cdata_section.yml +15 -9
- data/config/action_view_helpers/actionview/tag_helper/content_tag.yml +59 -38
- data/config/action_view_helpers/actionview/tag_helper/escape_once.yml +15 -9
- data/config/action_view_helpers/actionview/tag_helper/tag.yml +54 -31
- data/config/action_view_helpers/actionview/tag_helper/token_list.yml +16 -10
- data/config/action_view_helpers/actionview/text_helper/concat.yml +15 -9
- data/config/action_view_helpers/actionview/text_helper/current_cycle.yml +15 -9
- data/config/action_view_helpers/actionview/text_helper/cycle.yml +23 -14
- data/config/action_view_helpers/actionview/text_helper/excerpt.yml +33 -20
- data/config/action_view_helpers/actionview/text_helper/highlight.yml +37 -18
- data/config/action_view_helpers/actionview/text_helper/pluralize.yml +30 -18
- data/config/action_view_helpers/actionview/text_helper/reset_cycle.yml +15 -9
- data/config/action_view_helpers/actionview/text_helper/safe_concat.yml +9 -6
- data/config/action_view_helpers/actionview/text_helper/simple_format.yml +33 -20
- data/config/action_view_helpers/actionview/text_helper/truncate.yml +38 -23
- data/config/action_view_helpers/actionview/text_helper/word_wrap.yml +25 -15
- data/config/action_view_helpers/actionview/translation_helper/debug_missing_translation.yml +9 -6
- data/config/action_view_helpers/actionview/translation_helper/localize.yml +26 -16
- data/config/action_view_helpers/actionview/translation_helper/translate.yml +31 -19
- data/config/action_view_helpers/actionview/url_helper/button_to.yml +57 -33
- data/config/action_view_helpers/actionview/url_helper/button_to_generates_button_tag.yml +9 -6
- data/config/action_view_helpers/actionview/url_helper/current_page?.yml +25 -15
- data/config/action_view_helpers/actionview/url_helper/link_to.yml +76 -53
- data/config/action_view_helpers/actionview/url_helper/link_to_if.yml +54 -20
- data/config/action_view_helpers/actionview/url_helper/link_to_unless.yml +54 -20
- data/config/action_view_helpers/actionview/url_helper/link_to_unless_current.yml +49 -17
- data/config/action_view_helpers/actionview/url_helper/mail_to.yml +60 -34
- data/config/action_view_helpers/actionview/url_helper/phone_to.yml +40 -22
- data/config/action_view_helpers/actionview/url_helper/sms_to.yml +45 -25
- data/config/action_view_helpers/actionview/url_helper/url_for.yml +15 -9
- data/config/action_view_helpers/importmap-rails/importmap_tags_helper/javascript_import_module_tag.yml +32 -0
- data/config/action_view_helpers/importmap-rails/importmap_tags_helper/javascript_importmap_module_preload_tags.yml +39 -0
- data/config/action_view_helpers/importmap-rails/importmap_tags_helper/javascript_importmap_tags.yml +35 -0
- data/config/action_view_helpers/importmap-rails/importmap_tags_helper/javascript_inline_importmap_tag.yml +32 -0
- data/config/action_view_helpers/importmap-rails/importmap_tags_helper/javascript_module_preload_tag.yml +35 -0
- data/config/action_view_helpers/turbo-rails/drive_helper/turbo_exempts_page_from_cache.yml +9 -6
- data/config/action_view_helpers/turbo-rails/drive_helper/turbo_exempts_page_from_cache_tag.yml +12 -8
- data/config/action_view_helpers/turbo-rails/drive_helper/turbo_exempts_page_from_preview.yml +9 -6
- data/config/action_view_helpers/turbo-rails/drive_helper/turbo_exempts_page_from_preview_tag.yml +12 -8
- data/config/action_view_helpers/turbo-rails/drive_helper/turbo_page_requires_reload.yml +9 -6
- data/config/action_view_helpers/turbo-rails/drive_helper/turbo_page_requires_reload_tag.yml +12 -8
- data/config/action_view_helpers/turbo-rails/drive_helper/turbo_refresh_method_tag.yml +17 -11
- data/config/action_view_helpers/turbo-rails/drive_helper/turbo_refresh_scroll_tag.yml +17 -11
- data/config/action_view_helpers/turbo-rails/drive_helper/turbo_refreshes_with.yml +20 -12
- data/config/action_view_helpers/turbo-rails/frames_helper/turbo_frame_tag.yml +54 -33
- data/config/action_view_helpers/turbo-rails/includes_helper/turbo_include_tags.yml +9 -6
- data/config/action_view_helpers/turbo-rails/streams_action_helper/turbo_stream_action_tag.yml +32 -20
- data/config/action_view_helpers/turbo-rails/streams_action_helper/turbo_stream_refresh_tag.yml +18 -11
- data/config/action_view_helpers/turbo-rails/streams_helper/turbo_stream.yml +9 -6
- data/config/action_view_helpers/turbo-rails/streams_helper/turbo_stream_from.yml +28 -18
- data/config/html_elements.yml +597 -0
- data/config/options.yml +1 -0
- data/config/slots/components.yml +52 -0
- data/config/state/kind.yml +61 -0
- data/config/state/operators.yml +27 -0
- data/config/state/predicates.yml +39 -0
- data/config/state/transforms.yml +18 -0
- data/config/view_context_methods/actionview/base/annotate_rendered_view_with_filenames.yml +4 -4
- data/config/view_context_methods/actionview/base/assign.yml +4 -4
- data/config/view_context_methods/actionview/base/assigns.yml +4 -4
- data/config/view_context_methods/actionview/base/automatically_disable_submit_tag.yml +4 -4
- data/config/view_context_methods/actionview/base/compiled_method_container.yml +4 -4
- data/config/view_context_methods/actionview/base/config.yml +4 -4
- data/config/view_context_methods/actionview/base/default_form_builder.yml +4 -4
- data/config/view_context_methods/actionview/base/default_formats.yml +4 -4
- data/config/view_context_methods/actionview/base/field_error_proc.yml +4 -4
- data/config/view_context_methods/actionview/base/formats.yml +4 -4
- data/config/view_context_methods/actionview/base/in_rendering_context.yml +4 -4
- data/config/view_context_methods/actionview/base/locale.yml +4 -4
- data/config/view_context_methods/actionview/base/lookup_context.yml +4 -4
- data/config/view_context_methods/actionview/base/output_buffer.yml +4 -4
- data/config/view_context_methods/actionview/base/prefix_partial_path_with_controller_namespace.yml +4 -4
- data/config/view_context_methods/actionview/base/remove_hidden_field_autocomplete.yml +4 -4
- data/config/view_context_methods/actionview/base/streaming_completion_on_exception.yml +4 -4
- data/config/view_context_methods/actionview/base/view_flow.yml +4 -4
- data/config/view_context_methods/actionview/base/view_paths.yml +4 -4
- data/config/view_context_methods/actionview/base/view_renderer.yml +4 -4
- data/config/view_context_methods/actionview/template/local_assigns.yml +4 -4
- data/config/view_context_methods/activemodel/conversion/convert_to_model.yml +4 -4
- data/config/view_context_methods/activesupport/benchmarkable/benchmark.yml +4 -4
- data/config.yml +1240 -790
- data/exe/herb +2 -0
- data/ext/herb/error_helpers.c +355 -17
- data/ext/herb/error_helpers.h +1 -1
- data/ext/herb/extconf.rb +4 -2
- data/ext/herb/extension.c +137 -89
- data/ext/herb/extension_helpers.c +81 -42
- data/ext/herb/extension_helpers.h +4 -1
- data/ext/herb/nodes.c +826 -358
- data/ext/herb/nodes.h +3 -2
- data/ext/herb/parser_options_helpers.c +151 -0
- data/ext/herb/parser_options_helpers.h +14 -0
- data/herb.gemspec +2 -2
- data/lib/herb/action_view/helper_registry.rb +1358 -62
- data/lib/herb/analysis/partial_declaration.rb +140 -0
- data/lib/herb/analysis/partial_index.rb +189 -0
- data/lib/herb/analysis/partial_resolution.rb +161 -0
- data/lib/herb/analysis/partial_resolver.rb +144 -0
- data/lib/herb/analysis/project_index.rb +152 -0
- data/lib/herb/{action_view → analysis}/render_analyzer.rb +287 -77
- data/lib/herb/analysis/render_graph/ancestor_chain.rb +27 -0
- data/lib/herb/analysis/render_graph/builder.rb +376 -0
- data/lib/herb/analysis/render_graph/call_frame.rb +9 -0
- data/lib/herb/analysis/render_graph/call_site_location.rb +23 -0
- data/lib/herb/analysis/render_graph/inferred_signature.rb +21 -0
- data/lib/herb/analysis/render_graph/partial_call_site.rb +40 -0
- data/lib/herb/analysis/render_graph/partial_context.rb +46 -0
- data/lib/herb/analysis/render_graph/template_roots.rb +31 -0
- data/lib/herb/analysis/render_graph.rb +285 -0
- data/lib/herb/analysis/ruby_locals_index/local.rb +25 -0
- data/lib/herb/analysis/ruby_locals_index/named_reference.rb +22 -0
- data/lib/herb/analysis/ruby_locals_index/offset_table.rb +44 -0
- data/lib/herb/analysis/ruby_locals_index/reference_collector.rb +80 -0
- data/lib/herb/analysis/ruby_locals_index/state_locals.rb +49 -0
- data/lib/herb/analysis/ruby_locals_index.rb +165 -0
- data/lib/herb/analysis/ruby_reference.rb +67 -0
- data/lib/herb/analysis/template_dependencies/dependency_collector.rb +179 -0
- data/lib/herb/analysis/template_dependencies/node_dependency_collector.rb +309 -0
- data/lib/herb/analysis/template_dependencies.rb +562 -0
- data/lib/herb/ast/erb_render_node.rb +26 -94
- data/lib/herb/ast/helpers.rb +90 -10
- data/lib/herb/ast/herb_directive_node.rb +18 -0
- data/lib/herb/ast/node.rb +32 -2
- data/lib/herb/ast/nodes.rb +1342 -105
- data/lib/herb/backend.rb +73 -0
- data/lib/herb/bootstrap.rb +3 -7
- data/lib/herb/cli.rb +550 -32
- data/lib/herb/colors.rb +14 -0
- data/lib/herb/configuration.rb +71 -35
- data/lib/herb/defaults.yml +2 -1
- data/lib/herb/dev/assets.rb +57 -0
- data/lib/herb/dev/classifier.rb +84 -0
- data/lib/herb/dev/embedded.rb +27 -0
- data/lib/herb/dev/pipeline.rb +305 -0
- data/lib/herb/dev/protocol.rb +221 -0
- data/lib/herb/dev/runner.rb +175 -175
- data/lib/herb/dev/server.rb +89 -26
- data/lib/herb/dev/server_entry.rb +41 -6
- data/lib/herb/dev/watcher.rb +181 -0
- data/lib/herb/dev.rb +163 -0
- data/lib/herb/diagnostic/formatter.rb +88 -0
- data/lib/herb/diagnostic.rb +172 -0
- data/lib/herb/diff/operation.rb +36 -0
- data/lib/herb/diff/result.rb +62 -0
- data/lib/herb/diff.rb +10 -0
- data/lib/herb/engine/collector.rb +62 -0
- data/lib/herb/engine/compiler.rb +346 -108
- data/lib/herb/engine/component_tags/constant_resolver.rb +28 -0
- data/lib/herb/engine/component_tags/partial_resolver.rb +54 -0
- data/lib/herb/engine/component_tags/resolver.rb +32 -0
- data/lib/herb/engine/component_tags/visitor.rb +231 -0
- data/lib/herb/engine/css_inliner/inliner.rb +101 -0
- data/lib/herb/engine/css_inliner/visitor.rb +174 -0
- data/lib/herb/engine/errors.rb +122 -0
- data/lib/herb/engine/helpers.rb +82 -0
- data/lib/herb/engine/inline_render/inliner.rb +122 -0
- data/lib/herb/engine/inline_render/visitor.rb +267 -0
- data/lib/herb/engine/runtime/entry.rb +62 -0
- data/lib/herb/engine/runtime/error_page.rb +362 -0
- data/lib/herb/engine/runtime/html_safe_assertions.rb +217 -0
- data/lib/herb/engine/runtime/journal/summary.rb +227 -0
- data/lib/herb/engine/runtime/journal.rb +379 -0
- data/lib/herb/engine/runtime/middleware.rb +212 -0
- data/lib/herb/engine/runtime/observations.rb +73 -0
- data/lib/herb/engine/runtime/report.rb +204 -0
- data/lib/herb/engine/runtime/session.rb +437 -0
- data/lib/herb/engine/runtime.rb +21 -0
- data/lib/herb/engine/scoped_style/channel.rb +66 -0
- data/lib/herb/engine/scoped_style/collector.rb +74 -0
- data/lib/herb/engine/scoped_style/visitor.rb +533 -0
- data/lib/herb/engine/slots/annotation.rb +98 -0
- data/lib/herb/engine/slots/bindings.rb +61 -0
- data/lib/herb/engine/slots/callee.rb +118 -0
- data/lib/herb/engine/slots/component_definitions.rb +67 -0
- data/lib/herb/engine/slots/components/async.rb +24 -0
- data/lib/herb/engine/slots/components/base.rb +132 -0
- data/lib/herb/engine/slots/components/deferred.rb +81 -0
- data/lib/herb/engine/slots/components/fallback.rb +27 -0
- data/lib/herb/engine/slots/components/fragment.rb +99 -0
- data/lib/herb/engine/slots/components/lazy.rb +24 -0
- data/lib/herb/engine/slots/components.rb +52 -0
- data/lib/herb/engine/slots/dependencies/channel.rb +72 -0
- data/lib/herb/engine/slots/dependencies.rb +269 -0
- data/lib/herb/engine/slots/dynamics_compiler.rb +854 -0
- data/lib/herb/engine/slots/identifier.rb +35 -0
- data/lib/herb/engine/slots/manifest/channel.rb +74 -0
- data/lib/herb/engine/slots/manifest/collector.rb +75 -0
- data/lib/herb/engine/slots/markers.rb +128 -0
- data/lib/herb/engine/slots/render_bindings.rb +141 -0
- data/lib/herb/engine/slots/schema_compiler.rb +94 -0
- data/lib/herb/engine/slots/state_anchor.rb +94 -0
- data/lib/herb/engine/slots/state_compiler.rb +1326 -0
- data/lib/herb/engine/slots/state_directives.rb +854 -0
- data/lib/herb/engine/slots/state_kinds.rb +54 -0
- data/lib/herb/engine/slots/state_operators.rb +36 -0
- data/lib/herb/engine/slots/state_overrides.rb +79 -0
- data/lib/herb/engine/slots/state_predicates.rb +65 -0
- data/lib/herb/engine/slots/state_transforms.rb +42 -0
- data/lib/herb/engine/slots/statics.rb +185 -0
- data/lib/herb/engine/slots/subtree.rb +82 -0
- data/lib/herb/engine/slots/subtree_compiler.rb +255 -0
- data/lib/herb/engine/slots/types.rb +42 -0
- data/lib/herb/engine/slots/visitor.rb +2256 -0
- data/lib/herb/engine/validators/accessibility_validator.rb +3 -3
- data/lib/herb/engine/validators/base.rb +36 -0
- data/lib/herb/engine/validators/generator_template_validator.rb +39 -0
- data/lib/herb/engine/validators/nesting_validator.rb +3 -3
- data/lib/herb/engine/validators/render_validator.rb +13 -33
- data/lib/herb/engine/validators/security_validator.rb +3 -17
- data/lib/herb/engine/validators.rb +43 -0
- data/lib/herb/engine/visitors/auto_close_omitted_tags_visitor.rb +48 -0
- data/lib/herb/engine/visitors/content_for_visitor.rb +127 -0
- data/lib/herb/engine/{debug_visitor.rb → visitors/debug_visitor.rb} +121 -93
- data/lib/herb/engine/visitors/html_safe_assertions_visitor.rb +281 -0
- data/lib/herb/engine/visitors/instrumentation_visitor.rb +290 -0
- data/lib/herb/engine/visitors/optimize_visitor.rb +728 -0
- data/lib/herb/engine/visitors/remove_comments_visitor.rb +106 -0
- data/lib/herb/engine/visitors/source_attribution_visitor.rb +177 -0
- data/lib/herb/engine.rb +218 -257
- data/lib/herb/ensure_installed.rb +43 -0
- data/lib/herb/errors.rb +646 -157
- data/lib/herb/fingerprint.rb +82 -0
- data/lib/herb/html/elements.rb +18 -0
- data/lib/herb/html/util.rb +21 -2
- data/lib/herb/lex_result.rb +0 -10
- data/lib/herb/locate.rb +163 -0
- data/lib/herb/location.rb +20 -0
- data/lib/herb/parse_result.rb +17 -11
- data/lib/herb/parser_options.rb +65 -46
- data/lib/herb/position.rb +19 -0
- data/lib/herb/prism_inspect.rb +1 -4
- data/lib/herb/project.rb +28 -15
- data/lib/herb/range.rb +5 -0
- data/lib/herb/result.rb +2 -2
- data/lib/herb/ruby_program.rb +110 -0
- data/lib/herb/source_path.rb +232 -0
- data/lib/herb/token.rb +14 -3
- data/lib/herb/version.rb +1 -1
- data/lib/herb/visitor/context/origin.rb +52 -0
- data/lib/herb/visitor/context/replacements.rb +59 -0
- data/lib/herb/visitor/context.rb +169 -0
- data/lib/herb/visitor/context_aware.rb +45 -0
- data/lib/herb/visitor/diagnostics.rb +148 -0
- data/lib/herb/visitor/experimental.rb +33 -0
- data/lib/herb/visitor/parser_option_requirements.rb +151 -0
- data/lib/herb/visitor/stack.rb +192 -0
- data/lib/herb/visitor.rb +47 -1
- data/lib/herb/warnings.rb +25 -0
- data/lib/herb.rb +74 -63
- data/sig/herb/action_view/helper_registry.rbs +82 -10
- data/sig/herb/analysis/partial_declaration.rbs +80 -0
- data/sig/herb/analysis/partial_index.rbs +66 -0
- data/sig/herb/analysis/partial_resolution.rbs +57 -0
- data/sig/herb/analysis/partial_resolver.rbs +76 -0
- data/sig/herb/analysis/project_index.rbs +57 -0
- data/sig/herb/{action_view → analysis}/render_analyzer.rbs +25 -4
- data/sig/herb/analysis/render_graph/ancestor_chain.rbs +22 -0
- data/sig/herb/analysis/render_graph/builder.rbs +180 -0
- data/sig/herb/analysis/render_graph/call_frame.rbs +26 -0
- data/sig/herb/analysis/render_graph/call_site_location.rbs +28 -0
- data/sig/herb/analysis/render_graph/inferred_signature.rbs +27 -0
- data/sig/herb/analysis/render_graph/partial_call_site.rbs +36 -0
- data/sig/herb/analysis/render_graph/partial_context.rbs +31 -0
- data/sig/herb/analysis/render_graph/template_roots.rbs +32 -0
- data/sig/herb/analysis/render_graph.rbs +83 -0
- data/sig/herb/analysis/ruby_locals_index/local.rbs +21 -0
- data/sig/herb/analysis/ruby_locals_index/named_reference.rbs +20 -0
- data/sig/herb/analysis/ruby_locals_index/offset_table.rbs +26 -0
- data/sig/herb/analysis/ruby_locals_index/reference_collector.rbs +40 -0
- data/sig/herb/analysis/ruby_locals_index/state_locals.rbs +19 -0
- data/sig/herb/analysis/ruby_locals_index.rbs +62 -0
- data/sig/herb/analysis/ruby_reference.rbs +28 -0
- data/sig/herb/analysis/template_dependencies/dependency_collector.rbs +52 -0
- data/sig/herb/analysis/template_dependencies/node_dependency_collector.rbs +81 -0
- data/sig/herb/analysis/template_dependencies.rbs +125 -0
- data/sig/herb/ast/erb_render_node.rbs +10 -2
- data/sig/herb/ast/helpers.rbs +31 -1
- data/sig/herb/ast/herb_directive_node.rbs +13 -0
- data/sig/herb/ast/node.rbs +9 -0
- data/sig/herb/ast/nodes.rbs +662 -89
- data/sig/herb/backend.rbs +52 -0
- data/sig/herb/colors.rbs +3 -0
- data/sig/herb/configuration.rbs +27 -3
- data/sig/herb/dev/assets.rbs +27 -0
- data/sig/herb/dev/classifier.rbs +57 -0
- data/sig/herb/dev/embedded.rbs +21 -0
- data/sig/herb/dev/pipeline.rbs +118 -0
- data/sig/herb/dev/protocol.rbs +78 -0
- data/sig/herb/dev/runner.rbs +61 -23
- data/sig/herb/dev/server.rbs +49 -22
- data/sig/herb/dev/server_entry.rbs +46 -21
- data/sig/herb/dev/watcher.rbs +84 -0
- data/sig/herb/dev.rbs +58 -0
- data/sig/herb/diagnostic/formatter.rbs +28 -0
- data/sig/herb/diagnostic.rbs +88 -0
- data/sig/herb/diff/operation.rbs +36 -0
- data/sig/herb/diff/result.rbs +36 -0
- data/sig/herb/diff.rbs +6 -0
- data/sig/herb/engine/collector.rbs +48 -0
- data/sig/herb/engine/compiler.rbs +62 -23
- data/sig/herb/engine/component_tags/constant_resolver.rbs +19 -0
- data/sig/herb/engine/component_tags/partial_resolver.rbs +30 -0
- data/sig/herb/engine/component_tags/resolver.rbs +25 -0
- data/sig/herb/engine/component_tags/visitor.rbs +69 -0
- data/sig/herb/engine/css_inliner/inliner.rbs +65 -0
- data/sig/herb/engine/css_inliner/visitor.rbs +87 -0
- data/sig/herb/engine/errors.rbs +68 -0
- data/sig/herb/engine/helpers.rbs +28 -0
- data/sig/herb/engine/inline_render/inliner.rbs +39 -0
- data/sig/herb/engine/inline_render/visitor.rbs +104 -0
- data/sig/herb/engine/runtime/entry.rbs +43 -0
- data/sig/herb/engine/runtime/error_page.rbs +115 -0
- data/sig/herb/engine/runtime/html_safe_assertions.rbs +99 -0
- data/sig/herb/engine/runtime/journal/summary.rbs +172 -0
- data/sig/herb/engine/runtime/journal.rbs +126 -0
- data/sig/herb/engine/runtime/middleware.rbs +96 -0
- data/sig/herb/engine/runtime/observations.rbs +38 -0
- data/sig/herb/engine/runtime/report.rbs +97 -0
- data/sig/herb/engine/runtime/session.rbs +233 -0
- data/sig/herb/engine/runtime.rbs +14 -0
- data/sig/herb/engine/scoped_style/channel.rbs +45 -0
- data/sig/herb/engine/scoped_style/collector.rbs +45 -0
- data/sig/herb/engine/scoped_style/visitor.rbs +220 -0
- data/sig/herb/engine/slots/annotation.rbs +72 -0
- data/sig/herb/engine/slots/bindings.rbs +34 -0
- data/sig/herb/engine/slots/callee.rbs +62 -0
- data/sig/herb/engine/slots/component_definitions.rbs +19 -0
- data/sig/herb/engine/slots/components/async.rbs +20 -0
- data/sig/herb/engine/slots/components/base.rbs +60 -0
- data/sig/herb/engine/slots/components/deferred.rbs +29 -0
- data/sig/herb/engine/slots/components/fallback.rbs +21 -0
- data/sig/herb/engine/slots/components/fragment.rbs +34 -0
- data/sig/herb/engine/slots/components/lazy.rbs +20 -0
- data/sig/herb/engine/slots/components.rbs +30 -0
- data/sig/herb/engine/slots/dependencies/channel.rbs +51 -0
- data/sig/herb/engine/slots/dependencies.rbs +94 -0
- data/sig/herb/engine/slots/dynamics_compiler.rbs +349 -0
- data/sig/herb/engine/slots/identifier.rbs +19 -0
- data/sig/herb/engine/slots/manifest/channel.rbs +49 -0
- data/sig/herb/engine/slots/manifest/collector.rbs +45 -0
- data/sig/herb/engine/slots/markers.rbs +85 -0
- data/sig/herb/engine/slots/render_bindings.rbs +69 -0
- data/sig/herb/engine/slots/schema_compiler.rbs +62 -0
- data/sig/herb/engine/slots/state_anchor.rbs +41 -0
- data/sig/herb/engine/slots/state_compiler.rbs +258 -0
- data/sig/herb/engine/slots/state_directives.rbs +278 -0
- data/sig/herb/engine/slots/state_kinds.rbs +24 -0
- data/sig/herb/engine/slots/state_operators.rbs +19 -0
- data/sig/herb/engine/slots/state_overrides.rbs +33 -0
- data/sig/herb/engine/slots/state_predicates.rbs +16 -0
- data/sig/herb/engine/slots/state_transforms.rbs +15 -0
- data/sig/herb/engine/slots/statics.rbs +67 -0
- data/sig/herb/engine/slots/subtree.rbs +49 -0
- data/sig/herb/engine/slots/subtree_compiler.rbs +130 -0
- data/sig/herb/engine/slots/types.rbs +46 -0
- data/sig/herb/engine/slots/visitor.rbs +599 -0
- data/sig/herb/engine/validators/accessibility_validator.rbs +1 -1
- data/sig/herb/engine/validators/base.rbs +28 -0
- data/sig/herb/engine/validators/generator_template_validator.rbs +19 -0
- data/sig/herb/engine/validators/nesting_validator.rbs +1 -1
- data/sig/herb/engine/validators/render_validator.rbs +2 -6
- data/sig/herb/engine/validators/security_validator.rbs +1 -3
- data/sig/herb/engine/validators.rbs +21 -0
- data/sig/herb/engine/visitors/auto_close_omitted_tags_visitor.rbs +26 -0
- data/sig/herb/engine/visitors/content_for_visitor.rbs +52 -0
- data/sig/herb/engine/{debug_visitor.rbs → visitors/debug_visitor.rbs} +26 -15
- data/sig/herb/engine/visitors/html_safe_assertions_visitor.rbs +100 -0
- data/sig/herb/engine/visitors/instrumentation_visitor.rbs +111 -0
- data/sig/herb/engine/visitors/optimize_visitor.rbs +246 -0
- data/sig/herb/engine/visitors/remove_comments_visitor.rbs +66 -0
- data/sig/herb/engine/visitors/source_attribution_visitor.rbs +90 -0
- data/sig/herb/engine.rbs +47 -41
- data/sig/herb/ensure_installed.rbs +9 -0
- data/sig/herb/errors.rbs +293 -0
- data/sig/herb/fingerprint.rbs +37 -0
- data/sig/herb/html/elements.rbs +19 -0
- data/sig/herb/html/util.rbs +15 -1
- data/sig/herb/lex_result.rbs +0 -6
- data/sig/herb/locate.rbs +89 -0
- data/sig/herb/location.rbs +12 -0
- data/sig/herb/parse_result.rbs +10 -8
- data/sig/herb/parser_options.rbs +47 -21
- data/sig/herb/position.rbs +11 -0
- data/sig/herb/range.rbs +3 -0
- data/sig/herb/ruby_program.rbs +51 -0
- data/sig/herb/source_path.rbs +132 -0
- data/sig/herb/token.rbs +5 -2
- data/sig/herb/visitor/context/origin.rbs +51 -0
- data/sig/herb/visitor/context/replacements.rbs +39 -0
- data/sig/herb/visitor/context.rbs +83 -0
- data/sig/herb/visitor/context_aware.rbs +32 -0
- data/sig/herb/visitor/diagnostics.rbs +82 -0
- data/sig/herb/visitor/experimental.rbs +23 -0
- data/sig/herb/visitor/parser_option_requirements.rbs +76 -0
- data/sig/herb/visitor/stack.rbs +91 -0
- data/sig/herb/visitor.rbs +22 -0
- data/sig/herb/warnings.rbs +10 -0
- data/sig/herb.rbs +27 -10
- data/sig/serialized_ast_errors.rbs +58 -1
- data/sig/serialized_ast_nodes.rbs +58 -2
- data/src/analyze/action_view/attribute_extraction_helpers.c +73 -36
- data/src/analyze/action_view/generated_handlers.c +37 -1
- data/src/analyze/action_view/generated_handlers.h +2 -1
- data/src/analyze/action_view/helper_registry.c +1353 -58
- data/src/analyze/action_view/registry.c +10 -17
- data/src/analyze/action_view/stylesheet_link_tag.c +40 -0
- data/src/analyze/action_view/tag_helper_node_builders.c +57 -0
- data/src/analyze/action_view/tag_helpers.c +423 -93
- data/src/analyze/analyze.c +301 -64
- data/src/analyze/analyze_helpers.c +420 -23
- data/src/analyze/builders.c +79 -51
- data/src/analyze/conditional_elements.c +13 -8
- data/src/analyze/conditional_open_tags.c +11 -5
- data/src/analyze/control_type.c +16 -1
- data/src/analyze/herb_directives.c +701 -0
- data/src/analyze/invalid_structures.c +11 -7
- data/src/analyze/iteration_nodes.c +306 -0
- data/src/analyze/missing_end.c +116 -32
- data/src/analyze/parse_errors.c +8 -3
- data/src/analyze/postfix_conditionals.c +98 -63
- data/src/analyze/prism_annotate.c +13 -4
- data/src/analyze/render_nodes.c +345 -123
- data/src/analyze/strict_locals.c +30 -26
- data/src/analyze/ternary_conditionals.c +95 -70
- data/src/analyze/transform.c +43 -1
- data/src/ast/ast_node.c +3 -13
- data/src/ast/ast_nodes.c +911 -112
- data/src/ast/ast_pretty_print.c +161 -2
- data/src/diff/herb_diff.c +8 -0
- data/src/diff/herb_diff_attributes.c +1 -0
- data/src/diff/herb_diff_children.c +4 -3
- data/src/diff/herb_diff_helpers.c +7 -1
- data/src/diff/herb_diff_nodes.c +186 -71
- data/src/diff/herb_hash_tree.c +99 -1
- data/src/errors.c +1096 -128
- data/src/extract.c +30 -8
- data/src/herb.c +30 -11
- data/src/include/analyze/action_view/attribute_extraction_helpers.h +1 -1
- data/src/include/analyze/action_view/helper_registry.h +28 -4
- data/src/include/analyze/action_view/tag_helper_handler.h +1 -1
- data/src/include/analyze/action_view/tag_helper_node_builders.h +7 -0
- data/src/include/analyze/analyze.h +11 -0
- data/src/include/analyze/builders.h +16 -0
- data/src/include/analyze/helpers.h +23 -2
- data/src/include/analyze/herb_directive_kinds.h +41 -0
- data/src/include/analyze/herb_directives.h +14 -0
- data/src/include/analyze/iteration_nodes.h +11 -0
- data/src/include/analyze/prism_annotate.h +3 -3
- data/src/include/analyze/ternary_conditionals.h +2 -0
- data/src/include/ast/ast_node.h +1 -5
- data/src/include/ast/ast_nodes.h +76 -2
- data/src/include/ast/ast_pretty_print.h +1 -1
- data/src/include/diff/herb_diff.h +11 -0
- data/src/include/errors.h +156 -39
- data/src/include/extract.h +11 -0
- data/src/include/herb.h +6 -0
- data/src/include/lexer/erb_openers.h +29 -0
- data/src/include/lexer/lexer_peek_helpers.h +8 -1
- data/src/include/lexer/lexer_struct.h +4 -0
- data/src/include/lexer/token.h +3 -0
- data/src/include/lexer/token_struct.h +8 -6
- data/src/include/lib/hb_allocator.h +2 -1
- data/src/include/lib/hb_array.h +2 -0
- data/src/include/lib/hb_foreach.h +1 -1
- data/src/include/lib/hb_string.h +7 -0
- data/src/include/parser/dot_notation.h +1 -1
- data/src/include/parser/foreign_content_elements.h +32 -0
- data/src/include/parser/parser.h +16 -30
- data/src/include/parser/parser_helpers.h +13 -11
- data/src/include/parser/parser_options.h +41 -0
- data/src/include/prism/ruby_parser.h +6 -0
- data/src/include/util/html_elements.h +85 -0
- data/src/include/util/html_util.h +1 -0
- data/src/include/version.h +1 -1
- data/src/lexer/lexer_peek_helpers.c +15 -1
- data/src/lexer/token.c +83 -1
- data/src/lexer.c +196 -12
- data/src/lib/hb_allocator.c +2 -0
- data/src/lib/hb_array.c +26 -0
- data/src/lib/hb_string.c +26 -0
- data/src/main.c +1 -1
- data/src/parser/dot_notation.c +4 -3
- data/src/parser/match_tags.c +66 -1
- data/src/parser/parser_helpers.c +69 -37
- data/src/parser.c +606 -383
- data/src/parser_options_defaults.c +30 -0
- data/src/prism/prism_helpers.c +3 -0
- data/src/prism/ruby_parser.c +49 -0
- data/src/util/html_util.c +11 -58
- data/src/visitor.c +77 -1
- data/templates/ext/herb/error_helpers.c.erb +1 -1
- data/templates/ext/herb/nodes.c.erb +18 -13
- data/templates/ext/herb/nodes.h.erb +2 -1
- data/templates/ext/herb/parser_options_helpers.c.erb +69 -0
- data/templates/ext/herb/parser_options_helpers.h.erb +11 -0
- data/templates/java/nodes.c.erb +20 -16
- data/templates/java/nodes.h.erb +3 -2
- data/templates/java/org/herb/ParserOptions.java.erb +24 -0
- data/templates/java/org/herb/ast/HelperRegistry.java.erb +67 -31
- data/templates/java/org/herb/ast/HelperType.java.erb +29 -0
- data/templates/java/org/herb/ast/Nodes.java.erb +11 -7
- data/templates/java/parser_options_helpers.c.erb +45 -0
- data/templates/java/parser_options_helpers.h.erb +10 -0
- data/templates/javascript/packages/client/src/state-kinds.ts.erb +49 -0
- data/templates/javascript/packages/client/src/state-operators.ts.erb +15 -0
- data/templates/javascript/packages/client/src/state-predicates.ts.erb +27 -0
- data/templates/javascript/packages/client/src/state-transforms.ts.erb +19 -0
- data/templates/javascript/packages/core/src/action-view-helpers.ts.erb +47 -0
- data/templates/javascript/packages/core/src/built-in-components.ts.erb +67 -0
- data/templates/javascript/packages/core/src/errors.ts.erb +9 -3
- data/templates/javascript/packages/core/src/foreign-content-elements.ts.erb +18 -0
- data/templates/javascript/packages/core/src/html-constants.ts.erb +32 -0
- data/templates/javascript/packages/core/src/html-elements.ts.erb +41 -0
- data/templates/javascript/packages/core/src/node-type-guards.ts.erb +11 -7
- data/templates/javascript/packages/core/src/nodes.ts.erb +82 -19
- data/templates/javascript/packages/core/src/parser-options.ts.erb +41 -0
- data/templates/javascript/packages/core/src/visitor.ts.erb +1 -1
- data/templates/javascript/packages/node/extension/error_helpers.cpp.erb +3 -3
- data/templates/javascript/packages/node/extension/nodes.cpp.erb +17 -12
- data/templates/javascript/packages/node/extension/nodes.h.erb +3 -3
- data/templates/javascript/packages/node/extension/parser_options_helpers.cpp.erb +41 -0
- data/templates/javascript/packages/node/extension/parser_options_helpers.h.erb +12 -0
- data/templates/lib/herb/action_view/helper_registry.rb.erb +77 -3
- data/templates/lib/herb/ast/nodes.rb.erb +16 -6
- data/templates/lib/herb/engine/slots/component_definitions.rb.erb +38 -0
- data/templates/lib/herb/engine/slots/state_kinds.rb.erb +37 -0
- data/templates/lib/herb/engine/slots/state_operators.rb.erb +26 -0
- data/templates/lib/herb/engine/slots/state_predicates.rb.erb +39 -0
- data/templates/lib/herb/engine/slots/state_transforms.rb.erb +27 -0
- data/templates/lib/herb/errors.rb.erb +34 -6
- data/templates/lib/herb/html/elements.rb.erb +12 -0
- data/templates/lib/herb/parser_options.rb.erb +32 -0
- data/templates/lib/herb/visitor.rb.erb +7 -1
- data/templates/rust/herb-printer/src/printer_visitor.rs.erb +14 -0
- data/templates/rust/src/action_view_helpers.rs.erb +38 -0
- data/templates/rust/src/ast/nodes.rs.erb +24 -31
- data/templates/rust/src/errors.rs.erb +1 -1
- data/templates/rust/src/nodes.rs.erb +58 -26
- data/templates/rust/src/parser_options.rs.erb +16 -0
- data/templates/rust/src/prism/generated_deserialize.rs.erb +109 -0
- data/templates/rust/src/prism/generated_prettyprint.rs.erb +153 -0
- data/templates/rust/src/union_types.rs.erb +7 -1
- data/templates/rust/src/visitor.rs.erb +1 -1
- data/templates/src/analyze/action_view/helper_registry.c.erb +22 -0
- data/templates/src/analyze/missing_end.c.erb +13 -5
- data/templates/src/ast/ast_nodes.c.erb +41 -2
- data/templates/src/diff/herb_diff_nodes.c.erb +44 -8
- data/templates/src/errors.c.erb +8 -3
- data/templates/src/include/analyze/action_view/helper_registry.h.erb +19 -0
- data/templates/src/include/analyze/herb_directive_kinds.h.erb +25 -0
- data/templates/src/include/errors.h.erb +3 -1
- data/templates/src/include/parser/foreign_content_elements.h.erb +23 -0
- data/templates/src/include/parser/parser_options.h.erb +21 -0
- data/templates/src/include/util/html_elements.h.erb +28 -0
- data/templates/src/parser_options_defaults.c.erb +9 -0
- data/templates/template.rb +564 -9
- data/templates/wasm/error_helpers.cpp.erb +4 -4
- data/templates/wasm/nodes.cpp.erb +12 -12
- data/templates/wasm/nodes.h.erb +3 -3
- data/templates/wasm/parser_options_helpers.cpp.erb +25 -0
- data/templates/wasm/parser_options_helpers.h.erb +12 -0
- metadata +306 -27
- data/config/action_view_helpers/actionview/form_helper/button.yml +0 -38
- data/config/action_view_helpers/actionview/form_helper/submit.yml +0 -35
- data/lib/herb/ast.rb +0 -7
- data/lib/herb/diff_operation.rb +0 -34
- data/lib/herb/diff_result.rb +0 -59
- data/lib/herb/engine/error_formatter.rb +0 -432
- data/lib/herb/engine/parser_error_overlay.rb +0 -773
- data/lib/herb/engine/validation_error_overlay.rb +0 -182
- data/lib/herb/engine/validation_errors.rb +0 -65
- data/lib/herb/engine/validator.rb +0 -80
- data/sig/herb/ast.rbs +0 -6
- data/sig/herb/diff_operation.rbs +0 -34
- data/sig/herb/diff_result.rbs +0 -34
- data/sig/herb/engine/debug.rbs +0 -38
- data/sig/herb/engine/error_formatter.rbs +0 -47
- data/sig/herb/engine/parser_error_overlay.rbs +0 -41
- data/sig/herb/engine/validation_error_overlay.rbs +0 -35
- data/sig/herb/engine/validation_errors.rbs +0 -45
- data/sig/herb/engine/validator.rbs +0 -41
- data/sig/herb_c_extension.rbs +0 -10
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Generated from lib/herb/engine/component_tags/partial_resolver.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Herb
|
|
4
|
+
class Engine
|
|
5
|
+
module ComponentTags
|
|
6
|
+
# Resolves a dot separated tag name to a partial path, so `<Users.ProfileCard />` becomes
|
|
7
|
+
# `render "users/profile_card"`.
|
|
8
|
+
#
|
|
9
|
+
# The tag name has to parse first, which needs the `dot_notation_tags` parser option.
|
|
10
|
+
class PartialResolver < Resolver
|
|
11
|
+
TAG_NAME: ::Regexp
|
|
12
|
+
|
|
13
|
+
# : (String) -> bool
|
|
14
|
+
def handles?: (String) -> bool
|
|
15
|
+
|
|
16
|
+
# : (String, Hash[String, String], block: bool) -> String
|
|
17
|
+
def render_code: (String, Hash[String, String], block: bool) -> String
|
|
18
|
+
|
|
19
|
+
private
|
|
20
|
+
|
|
21
|
+
# `Users.ProfileCard` -> `users/profile_card`
|
|
22
|
+
# : (String) -> String
|
|
23
|
+
def partial_path: (String) -> String
|
|
24
|
+
|
|
25
|
+
# : (String) -> String
|
|
26
|
+
def underscore: (String) -> String
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Generated from lib/herb/engine/component_tags/resolver.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Herb
|
|
4
|
+
class Engine
|
|
5
|
+
module ComponentTags
|
|
6
|
+
# Decides what a tag renders to. A resolver claims a tag name through `handles?` and turns
|
|
7
|
+
# it into the Ruby source for a `render` call through `render_code`.
|
|
8
|
+
#
|
|
9
|
+
# Resolution is static: a resolver only ever sees the tag name and its attributes, never the
|
|
10
|
+
# application it compiles against.
|
|
11
|
+
class Resolver
|
|
12
|
+
# : (String) -> bool
|
|
13
|
+
def handles?: (String) -> bool
|
|
14
|
+
|
|
15
|
+
# : (String, Hash[String, String], block: bool) -> String
|
|
16
|
+
def render_code: (String, Hash[String, String], block: bool) -> String
|
|
17
|
+
|
|
18
|
+
private
|
|
19
|
+
|
|
20
|
+
# : (Hash[String, String]) -> String
|
|
21
|
+
def keyword_arguments: (Hash[String, String]) -> String
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Generated from lib/herb/engine/component_tags/visitor.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Herb
|
|
4
|
+
class Engine
|
|
5
|
+
module ComponentTags
|
|
6
|
+
class Visitor < Herb::Visitor
|
|
7
|
+
extend Herb::Visitor::Experimental
|
|
8
|
+
|
|
9
|
+
TAG_NAME_SEPARATOR: ::Regexp
|
|
10
|
+
|
|
11
|
+
KEYWORD_NAME: ::Regexp
|
|
12
|
+
|
|
13
|
+
ARRAY_PROPERTIES: untyped
|
|
14
|
+
|
|
15
|
+
NODE_PROPERTIES: untyped
|
|
16
|
+
|
|
17
|
+
# : (?resolvers: Array[Herb::Engine::ComponentTags::Resolver]) -> void
|
|
18
|
+
def initialize: (?resolvers: Array[Herb::Engine::ComponentTags::Resolver]) -> void
|
|
19
|
+
|
|
20
|
+
def visit_document_node: (untyped node) -> untyped
|
|
21
|
+
|
|
22
|
+
# : () -> String
|
|
23
|
+
def inspect: () -> String
|
|
24
|
+
|
|
25
|
+
private
|
|
26
|
+
|
|
27
|
+
def replace_component_nodes_recursive: (untyped node) -> untyped
|
|
28
|
+
|
|
29
|
+
# : (Herb::AST::Node?) -> bool
|
|
30
|
+
def component?: (Herb::AST::Node?) -> bool
|
|
31
|
+
|
|
32
|
+
def transform_to_erb_component: (untyped element_node) -> untyped
|
|
33
|
+
|
|
34
|
+
# : (String) -> Herb::Engine::ComponentTags::Resolver?
|
|
35
|
+
def resolver_for: (String) -> Herb::Engine::ComponentTags::Resolver?
|
|
36
|
+
|
|
37
|
+
# : (String?, Hash[String, String], block: bool) -> String?
|
|
38
|
+
def render_code: (String?, Hash[String, String], block: bool) -> String?
|
|
39
|
+
|
|
40
|
+
# : (Herb::AST::HTMLElementNode) -> Hash[String, String]
|
|
41
|
+
def extract_attributes_from_element: (Herb::AST::HTMLElementNode) -> Hash[String, String]
|
|
42
|
+
|
|
43
|
+
# : (Herb::AST::HTMLAttributeNode) -> String?
|
|
44
|
+
def attribute_name: (Herb::AST::HTMLAttributeNode) -> String?
|
|
45
|
+
|
|
46
|
+
# : (Herb::AST::HTMLAttributeNode, directive: bool) -> String
|
|
47
|
+
def attribute_value: (Herb::AST::HTMLAttributeNode, directive: bool) -> String
|
|
48
|
+
|
|
49
|
+
# : (Array[Herb::AST::Node]) -> String
|
|
50
|
+
def ruby_code_from: (Array[Herb::AST::Node]) -> String
|
|
51
|
+
|
|
52
|
+
# : (Array[Herb::AST::Node]) -> String
|
|
53
|
+
def string_literal_from: (Array[Herb::AST::Node]) -> String
|
|
54
|
+
|
|
55
|
+
# : (String) -> String
|
|
56
|
+
def escape: (String) -> String
|
|
57
|
+
|
|
58
|
+
# : (Herb::AST::HTMLElementNode, String) -> Herb::AST::ERBContentNode
|
|
59
|
+
def erb_content_node: (Herb::AST::HTMLElementNode, String) -> Herb::AST::ERBContentNode
|
|
60
|
+
|
|
61
|
+
# : (Herb::AST::HTMLElementNode, String, Array[Herb::AST::Node]) -> Herb::AST::ERBBlockNode
|
|
62
|
+
def erb_block_node: (Herb::AST::HTMLElementNode, String, Array[Herb::AST::Node]) -> Herb::AST::ERBBlockNode
|
|
63
|
+
|
|
64
|
+
# : (Herb::AST::HTMLElementNode) -> Herb::AST::ERBEndNode
|
|
65
|
+
def erb_end_node: (Herb::AST::HTMLElementNode) -> Herb::AST::ERBEndNode
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Generated from lib/herb/engine/css_inliner/inliner.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Herb
|
|
4
|
+
class Engine
|
|
5
|
+
module CSSInliner
|
|
6
|
+
# Writes the CSS a template rendered into `style` attributes on the markup it applies to.
|
|
7
|
+
#
|
|
8
|
+
# Herb::Engine::CSSInliner.inliner = Herb::Engine::CSSInliner::Inliner.new
|
|
9
|
+
#
|
|
10
|
+
# A template compiled with `CSSInliner::Visitor` hands everything it rendered to
|
|
11
|
+
# `CSSInliner.inline`, and this is what answers. Where the CSS came from is not something this
|
|
12
|
+
# has to know: a `<style>` block the template wrote, a block `ScopedStyle::Visitor` narrowed,
|
|
13
|
+
# and a stylesheet read at compile time all arrive the same way, and all of it is matched
|
|
14
|
+
# against the markup in the same buffer.
|
|
15
|
+
#
|
|
16
|
+
# Without an inliner installed, or if one fails, the markup is answered as it was rendered. The
|
|
17
|
+
# `<style>` blocks are still in it, so the CSS applies as it was written and the template is
|
|
18
|
+
# correct either way. Installing this is what turns a block into attributes, not what makes it
|
|
19
|
+
# work.
|
|
20
|
+
#
|
|
21
|
+
# The markup is wrapped in a `<template>` before it is parsed. A template renders a fragment,
|
|
22
|
+
# and a fragment is parsed in whatever context it is given: parsed as a body, a file whose
|
|
23
|
+
# roots are `<tr>` or `<td>` is not mangled but dropped, and `<tr><td>x</td></tr>` comes back
|
|
24
|
+
# as `x`. `<template>` is the one context that holds every element a file can start with.
|
|
25
|
+
#
|
|
26
|
+
# `keep` says whether the blocks the CSS came from are written out again, which they have to be
|
|
27
|
+
# when the CSS holds anything a `style` attribute cannot say. An inliner drops those rules
|
|
28
|
+
# instead of keeping them, so CSS holding `:hover` or `@media` is kept and says the rest twice.
|
|
29
|
+
# Which it is, is decided when the template is compiled.
|
|
30
|
+
#
|
|
31
|
+
# Anything answering `inline_fragment` with the markup and a stylesheet can stand in for
|
|
32
|
+
# `CSSInline::CSSInliner`, which is the only thing this needs it to be.
|
|
33
|
+
class Inliner
|
|
34
|
+
OPEN: String
|
|
35
|
+
|
|
36
|
+
CLOSE: String
|
|
37
|
+
|
|
38
|
+
# : (?keeping: untyped, ?dropping: untyped) -> void
|
|
39
|
+
def initialize: (?keeping: untyped, ?dropping: untyped) -> void
|
|
40
|
+
|
|
41
|
+
# : (String, ?String, ?keep: bool) -> String
|
|
42
|
+
def call: (String, ?String, ?keep: bool) -> String
|
|
43
|
+
|
|
44
|
+
# : () -> String
|
|
45
|
+
def inspect: () -> String
|
|
46
|
+
|
|
47
|
+
private
|
|
48
|
+
|
|
49
|
+
# : (bool) -> untyped
|
|
50
|
+
def build: (bool) -> untyped
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
attr_writer inliner: untyped
|
|
54
|
+
|
|
55
|
+
# : () -> untyped
|
|
56
|
+
def self.inliner: () -> untyped
|
|
57
|
+
|
|
58
|
+
# : (String, ?String, ?keep: bool) -> String
|
|
59
|
+
def self.inline: (String, ?String, ?keep: bool) -> String
|
|
60
|
+
|
|
61
|
+
# : () -> untyped
|
|
62
|
+
private def self.build: () -> untyped
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# Generated from lib/herb/engine/css_inliner/visitor.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Herb
|
|
4
|
+
class Engine
|
|
5
|
+
module CSSInliner
|
|
6
|
+
# Writes the CSS a template rendered into `style` attributes on the markup it applies to.
|
|
7
|
+
#
|
|
8
|
+
# Herb::Engine.new(source, filename: path, visitors: [
|
|
9
|
+
# Herb::Engine::CSSInliner::Visitor.new(stylesheets: ["app/assets/email.css"])
|
|
10
|
+
# ])
|
|
11
|
+
#
|
|
12
|
+
# A `style` attribute is the only way to say something an email client reads, and this is how a
|
|
13
|
+
# stylesheet gets there. The CSS is matched against the markup once the file has rendered, not
|
|
14
|
+
# when it is compiled, because that is the first moment the markup exists.
|
|
15
|
+
#
|
|
16
|
+
# Every `<style>` block the template rendered is inlined, whoever wrote it. A block the author
|
|
17
|
+
# wrote by hand, and a block `ScopedStyle::Visitor` narrowed, are both read out of the markup
|
|
18
|
+
# by the inliner itself. `stylesheets` are files read when the template is compiled and carried
|
|
19
|
+
# in the compiled template, so nothing reads a file to render one and the CSS a template was
|
|
20
|
+
# compiled against cannot change under it.
|
|
21
|
+
#
|
|
22
|
+
# Because it inlines every block it finds, this belongs in a stack that wants all of its CSS on
|
|
23
|
+
# the elements. That is what an email wants. A page that meant a `<style>` block to stay a
|
|
24
|
+
# `<style>` block does not.
|
|
25
|
+
#
|
|
26
|
+
# What a template holds when this runs is what it decides about, so it has to run after anything
|
|
27
|
+
# that rewrites the blocks, which the stack checks. A `ScopedStyle::Visitor` delivering anywhere
|
|
28
|
+
# other than `:inline` takes its block out of the markup, and reading a template before that
|
|
29
|
+
# happens is reading a block that will not be there to inline.
|
|
30
|
+
class Visitor < Herb::Visitor
|
|
31
|
+
extend Herb::Visitor::Experimental
|
|
32
|
+
|
|
33
|
+
include Herb::Visitor::ContextAware
|
|
34
|
+
|
|
35
|
+
include Herb::Visitor::Diagnostics
|
|
36
|
+
|
|
37
|
+
AT_RULES: Regexp
|
|
38
|
+
|
|
39
|
+
STATEFUL: Regexp
|
|
40
|
+
|
|
41
|
+
# : () -> bool
|
|
42
|
+
def self.reads_style_blocks?: () -> bool
|
|
43
|
+
|
|
44
|
+
# : (?stylesheets: Array[String]) -> void
|
|
45
|
+
def initialize: (?stylesheets: Array[String]) -> void
|
|
46
|
+
|
|
47
|
+
# : (Herb::AST::DocumentNode) -> void
|
|
48
|
+
def visit_document_node: (Herb::AST::DocumentNode) -> void
|
|
49
|
+
|
|
50
|
+
# : (Herb::AST::HTMLElementNode) -> void
|
|
51
|
+
def visit_html_element_node: (Herb::AST::HTMLElementNode) -> void
|
|
52
|
+
|
|
53
|
+
# : (Herb::AST::DocumentNode) -> void
|
|
54
|
+
def finish: (Herb::AST::DocumentNode) -> void
|
|
55
|
+
|
|
56
|
+
# : (String) -> String
|
|
57
|
+
def postamble: (String) -> String
|
|
58
|
+
|
|
59
|
+
# : () -> String
|
|
60
|
+
def inspect: () -> String
|
|
61
|
+
|
|
62
|
+
private
|
|
63
|
+
|
|
64
|
+
# : () -> void
|
|
65
|
+
def report_missing_inliner: () -> void
|
|
66
|
+
|
|
67
|
+
# : (Herb::AST::HTMLElementNode) -> String?
|
|
68
|
+
def block_css: (Herb::AST::HTMLElementNode) -> String?
|
|
69
|
+
|
|
70
|
+
# : () -> bool
|
|
71
|
+
def keeping?: () -> bool
|
|
72
|
+
|
|
73
|
+
# : (String) -> Herb::AST::LiteralNode
|
|
74
|
+
def literal_node: (String) -> Herb::AST::LiteralNode
|
|
75
|
+
|
|
76
|
+
# : () -> String?
|
|
77
|
+
def read_stylesheets: () -> String?
|
|
78
|
+
|
|
79
|
+
# : (String) -> String
|
|
80
|
+
def resolve: (String) -> String
|
|
81
|
+
|
|
82
|
+
# : (String) -> String?
|
|
83
|
+
def read_stylesheet: (String) -> String?
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Generated from lib/herb/engine/errors.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Herb
|
|
4
|
+
class Engine
|
|
5
|
+
class CompilationError < SyntaxError
|
|
6
|
+
attr_reader details: untyped
|
|
7
|
+
|
|
8
|
+
attr_reader diagnostics: untyped
|
|
9
|
+
|
|
10
|
+
attr_reader visitors: untyped
|
|
11
|
+
|
|
12
|
+
attr_reader parser_options: untyped
|
|
13
|
+
|
|
14
|
+
def initialize: (untyped message, ?details: untyped, ?diagnostics: untyped, ?visitors: untyped, ?parser_options: untyped) -> untyped
|
|
15
|
+
|
|
16
|
+
def detailed_message: (?highlight: untyped, **untyped) -> untyped
|
|
17
|
+
|
|
18
|
+
def formatted_errors: (?highlight: untyped) -> untyped
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
module LocatedError
|
|
22
|
+
attr_reader line: untyped
|
|
23
|
+
|
|
24
|
+
attr_reader column: untyped
|
|
25
|
+
|
|
26
|
+
attr_reader filename: untyped
|
|
27
|
+
|
|
28
|
+
attr_reader suggestion: untyped
|
|
29
|
+
|
|
30
|
+
def initialize: (untyped message, ?line: untyped, ?column: untyped, ?filename: untyped, ?suggestion: untyped) -> untyped
|
|
31
|
+
|
|
32
|
+
private
|
|
33
|
+
|
|
34
|
+
def build_error_message: (untyped message) -> untyped
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
class GeneratorTemplateError < CompilationError
|
|
38
|
+
include LocatedError
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
class InvalidRubyError < CompilationError
|
|
42
|
+
attr_reader compiled_source: untyped
|
|
43
|
+
|
|
44
|
+
def initialize: (untyped message, ?compiled_source: untyped) -> untyped
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
class SecurityError < StandardError
|
|
48
|
+
include LocatedError
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
class ParseError < CompilationError
|
|
52
|
+
CONTEXT_LINES: Integer
|
|
53
|
+
|
|
54
|
+
attr_reader source: String
|
|
55
|
+
|
|
56
|
+
attr_reader filename: String?
|
|
57
|
+
|
|
58
|
+
# : (String, diagnostics: Array[Herb::Diagnostic], source: String, ?filename: String?, ?visitors: Array[String], ?parser_options: Hash[Symbol, untyped], ?details: untyped) -> void
|
|
59
|
+
def initialize: (String, diagnostics: Array[Herb::Diagnostic], source: String, ?filename: String?, ?visitors: Array[String], ?parser_options: Hash[Symbol, untyped], ?details: untyped) -> void
|
|
60
|
+
|
|
61
|
+
# : () -> Integer?
|
|
62
|
+
def line_number: () -> Integer?
|
|
63
|
+
|
|
64
|
+
# : () -> Array[String]
|
|
65
|
+
def annotated_source_code: () -> Array[String]
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Generated from lib/herb/engine/helpers.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Herb
|
|
4
|
+
class Engine
|
|
5
|
+
module Helpers
|
|
6
|
+
# : (String) -> bool
|
|
7
|
+
def self.comment?: (String) -> bool
|
|
8
|
+
|
|
9
|
+
# : (String) -> String
|
|
10
|
+
def self.without_trailing_spaces: (String) -> String
|
|
11
|
+
|
|
12
|
+
# : (String) -> bool
|
|
13
|
+
def self.ends_on_heredoc_terminator?: (String) -> bool
|
|
14
|
+
|
|
15
|
+
# : (String) -> bool
|
|
16
|
+
def self.heredoc?: (String) -> bool
|
|
17
|
+
|
|
18
|
+
# : (String) -> Array[untyped]?
|
|
19
|
+
def self.heredoc_tokens: (String) -> Array[untyped]?
|
|
20
|
+
|
|
21
|
+
# : (String) -> String
|
|
22
|
+
def self.strip_trailing_comment: (String) -> String
|
|
23
|
+
|
|
24
|
+
# : () -> bool
|
|
25
|
+
def self.prism_available?: () -> bool
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Generated from lib/herb/engine/inline_render/inliner.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Herb
|
|
4
|
+
class Engine
|
|
5
|
+
module InlineRender
|
|
6
|
+
class Inliner
|
|
7
|
+
VIRTUAL_PATH_DEPENDENT: ::Regexp
|
|
8
|
+
|
|
9
|
+
STRICT_LOCALS: ::Regexp
|
|
10
|
+
|
|
11
|
+
attr_reader filename: untyped
|
|
12
|
+
|
|
13
|
+
def initialize: (?untyped options) -> untyped
|
|
14
|
+
|
|
15
|
+
def can_inline?: (untyped node, ?shadowed: untyped) -> untyped
|
|
16
|
+
|
|
17
|
+
def can_inline_collection?: (untyped node, ?shadowed: untyped) -> untyped
|
|
18
|
+
|
|
19
|
+
def collection?: (untyped node) -> untyped
|
|
20
|
+
|
|
21
|
+
def collection_expression: (untyped node) -> untyped
|
|
22
|
+
|
|
23
|
+
def collection_item_name: (untyped node) -> untyped
|
|
24
|
+
|
|
25
|
+
def resolve_path: (untyped node) -> untyped
|
|
26
|
+
|
|
27
|
+
def own_locals: (untyped source) -> untyped
|
|
28
|
+
|
|
29
|
+
def local_assignments: (untyped node) -> untyped
|
|
30
|
+
|
|
31
|
+
private
|
|
32
|
+
|
|
33
|
+
def safe_to_inline?: (untyped file_path, ?item: untyped, ?shadowed: untyped) -> untyped
|
|
34
|
+
|
|
35
|
+
def find_format: () -> untyped
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# Generated from lib/herb/engine/inline_render/visitor.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Herb
|
|
4
|
+
class Engine
|
|
5
|
+
module InlineRender
|
|
6
|
+
# Replaces a `render` of a static partial with the partial itself, so the rendered page costs
|
|
7
|
+
# no partial lookup at run time.
|
|
8
|
+
#
|
|
9
|
+
# require "herb/engine/inline_render/visitor"
|
|
10
|
+
#
|
|
11
|
+
# Herb::Engine.new(source, visitors: [Herb::Engine::InlineRender::Visitor.new])
|
|
12
|
+
#
|
|
13
|
+
# It has to run first, and the engine refuses a stack that puts it anywhere else. Everything
|
|
14
|
+
# after it sees the partial's markup as part of the template it landed in, which is what holds
|
|
15
|
+
# a partial to whatever the template around it is held to: a validator that refuses markup in a
|
|
16
|
+
# template refuses it in a partial, and a transform that rewrites a tag rewrites it wherever it
|
|
17
|
+
# was written. Were it to run last, moving markup into a partial would be a way of turning
|
|
18
|
+
# those off.
|
|
19
|
+
#
|
|
20
|
+
# What it moves is recorded on `Herb::Visitor::Context::Origin`, because a tree alone cannot say that a
|
|
21
|
+
# node was written somewhere else or that nobody wrote it at all. That is what lets a position
|
|
22
|
+
# reported from inside an inlined partial name the partial rather than the template it landed
|
|
23
|
+
# in, and leaves the wrapper written here attributed to nobody.
|
|
24
|
+
#
|
|
25
|
+
# A partial is inlined only when the file it names is knowable and the copy would mean what the
|
|
26
|
+
# original did. Some of what a partial means is answered by where it is rather than by what it
|
|
27
|
+
# says, and none of that survives being copied, so `Inliner` reads the partial and leaves it
|
|
28
|
+
# alone when it finds any of it. Anything left alone stays the `render` call it was written as.
|
|
29
|
+
class Visitor < Herb::Visitor
|
|
30
|
+
extend Herb::Visitor::Experimental
|
|
31
|
+
|
|
32
|
+
include Herb::Visitor::ContextAware
|
|
33
|
+
|
|
34
|
+
ARRAY_PROPERTIES: Array[Symbol]
|
|
35
|
+
|
|
36
|
+
NODE_PROPERTIES: Array[Symbol]
|
|
37
|
+
|
|
38
|
+
ASSIGNMENT_NODES: Array[Symbol]
|
|
39
|
+
|
|
40
|
+
# : () -> bool
|
|
41
|
+
def self.inlines_renders?: () -> bool
|
|
42
|
+
|
|
43
|
+
# : (Herb::AST::DocumentNode) -> void
|
|
44
|
+
def visit_document_node: (Herb::AST::DocumentNode) -> void
|
|
45
|
+
|
|
46
|
+
# : () -> String
|
|
47
|
+
def inspect: () -> String
|
|
48
|
+
|
|
49
|
+
private
|
|
50
|
+
|
|
51
|
+
# : (Herb::AST::Node) -> void
|
|
52
|
+
def inline: (Herb::AST::Node) -> void
|
|
53
|
+
|
|
54
|
+
# : (Array[Herb::AST::Node]) -> void
|
|
55
|
+
def expand: (Array[Herb::AST::Node]) -> void
|
|
56
|
+
|
|
57
|
+
# : (Herb::AST::Node) -> bool
|
|
58
|
+
def inlinable?: (Herb::AST::Node) -> bool
|
|
59
|
+
|
|
60
|
+
# : (Herb::AST::Node) -> Array[String]
|
|
61
|
+
def shadowed: (Herb::AST::Node) -> Array[String]
|
|
62
|
+
|
|
63
|
+
# : (Herb::AST::Node, ?Array[String]) -> Array[String]
|
|
64
|
+
def assigned_locals: (Herb::AST::Node, ?Array[String]) -> Array[String]
|
|
65
|
+
|
|
66
|
+
# : (Herb::AST::Node) -> String?
|
|
67
|
+
def assigned_name: (Herb::AST::Node) -> String?
|
|
68
|
+
|
|
69
|
+
# : (Herb::AST::Node) -> bool
|
|
70
|
+
def outputs?: (Herb::AST::Node) -> bool
|
|
71
|
+
|
|
72
|
+
# : (Herb::AST::Node) -> Array[Herb::AST::Node]
|
|
73
|
+
def spliced: (Herb::AST::Node) -> Array[Herb::AST::Node]
|
|
74
|
+
|
|
75
|
+
# : (Pathname) -> String
|
|
76
|
+
def relative: (Pathname) -> String
|
|
77
|
+
|
|
78
|
+
# : (Array[Herb::AST::Node]) -> void
|
|
79
|
+
def inline_nested: (Array[Herb::AST::Node]) -> void
|
|
80
|
+
|
|
81
|
+
# : (String) -> Herb::AST::DocumentNode?
|
|
82
|
+
def parse: (String) -> Herb::AST::DocumentNode?
|
|
83
|
+
|
|
84
|
+
# : (Herb::AST::Node, Array[String]) -> String
|
|
85
|
+
def opening_for: (Herb::AST::Node, Array[String]) -> String
|
|
86
|
+
|
|
87
|
+
# : (Array[String], Array[String]) -> String
|
|
88
|
+
def block_locals: (Array[String], Array[String]) -> String
|
|
89
|
+
|
|
90
|
+
# : (Herb::AST::Node) -> String
|
|
91
|
+
def closing_for_code: (Herb::AST::Node) -> String
|
|
92
|
+
|
|
93
|
+
# : (Herb::AST::Node, Array[Herb::AST::Node], Pathname, Array[String]) -> Herb::AST::ERBBlockNode
|
|
94
|
+
def block: (Herb::AST::Node, Array[Herb::AST::Node], Pathname, Array[String]) -> Herb::AST::ERBBlockNode
|
|
95
|
+
|
|
96
|
+
# : (Herb::AST::Node) -> Herb::AST::ERBEndNode
|
|
97
|
+
def closing_for: (Herb::AST::Node) -> Herb::AST::ERBEndNode
|
|
98
|
+
|
|
99
|
+
# : () -> untyped
|
|
100
|
+
def inliner: () -> untyped
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Generated from lib/herb/engine/runtime/entry.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Herb
|
|
4
|
+
class Engine
|
|
5
|
+
module Runtime
|
|
6
|
+
# What was observed at one position in one template while it rendered.
|
|
7
|
+
#
|
|
8
|
+
# A collector puts things here by name, so several can share a position without knowing about
|
|
9
|
+
# each other: a query count and a render time sit side by side under different keys.
|
|
10
|
+
class Entry
|
|
11
|
+
attr_reader template: String?
|
|
12
|
+
|
|
13
|
+
attr_reader line: Integer
|
|
14
|
+
|
|
15
|
+
attr_reader column: Integer
|
|
16
|
+
|
|
17
|
+
attr_reader end_line: Integer?
|
|
18
|
+
|
|
19
|
+
attr_reader end_column: Integer?
|
|
20
|
+
|
|
21
|
+
attr_reader observations: Hash[Symbol, Array[untyped]]
|
|
22
|
+
|
|
23
|
+
# : (String?, Integer, Integer, ?Integer?, ?Integer?) -> void
|
|
24
|
+
def initialize: (String?, Integer, Integer, ?Integer?, ?Integer?) -> void
|
|
25
|
+
|
|
26
|
+
# : (Symbol, untyped) -> void
|
|
27
|
+
def observe: (Symbol, untyped) -> void
|
|
28
|
+
|
|
29
|
+
# : (Symbol) -> Array[untyped]
|
|
30
|
+
def []: (Symbol) -> Array[untyped]
|
|
31
|
+
|
|
32
|
+
# : () -> bool
|
|
33
|
+
def empty?: () -> bool
|
|
34
|
+
|
|
35
|
+
# : () -> Herb::Location
|
|
36
|
+
def location: () -> Herb::Location
|
|
37
|
+
|
|
38
|
+
# : () -> String
|
|
39
|
+
def to_s: () -> String
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
# Generated from lib/herb/engine/runtime/error_page.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Herb
|
|
4
|
+
class Engine
|
|
5
|
+
module Runtime
|
|
6
|
+
# Serves a page the dev tools can boot into when a template refused to compile.
|
|
7
|
+
#
|
|
8
|
+
# config.middleware.use Herb::Engine::Runtime::ErrorPage, dev_tools: "/assets/herb-dev-tools.js"
|
|
9
|
+
#
|
|
10
|
+
# A template that fails to compile takes the whole response with it, so there is no page left
|
|
11
|
+
# for `Middleware` to inject into and nothing for the dev tools to attach to. This serves a
|
|
12
|
+
# document of its own carrying the same diagnostics payload, which the panel reads on start and
|
|
13
|
+
# shows as a blocking overlay.
|
|
14
|
+
#
|
|
15
|
+
# Action View wraps the failure in its own error, so what arrives here is an
|
|
16
|
+
# `ActionView::Template::Error` whose `cause` is the Herb one. The chain is walked rather than
|
|
17
|
+
# rescued by class for that reason.
|
|
18
|
+
#
|
|
19
|
+
# A link in that chain can also be a delegator standing in for the real error. Action View
|
|
20
|
+
# hands a template syntax error to `ActiveSupport::SyntaxErrorProxy`, which answers `is_a?`
|
|
21
|
+
# for itself and `cause` for the error it wraps, so the walk steps through `__getobj__`
|
|
22
|
+
# whenever a link has one.
|
|
23
|
+
#
|
|
24
|
+
# The page says what is wrong without any JavaScript at all. The dev tools are an enhancement
|
|
25
|
+
# on top of that, so a missing or misconfigured bundle costs the overlay and not the message.
|
|
26
|
+
class ErrorPage
|
|
27
|
+
HTML_REQUEST: Regexp
|
|
28
|
+
|
|
29
|
+
MAX_CAUSES: Integer
|
|
30
|
+
|
|
31
|
+
CONTEXT_LINES: Integer
|
|
32
|
+
|
|
33
|
+
ORIGIN: String
|
|
34
|
+
|
|
35
|
+
UNKNOWN_TEMPLATE: String
|
|
36
|
+
|
|
37
|
+
STYLES: String
|
|
38
|
+
|
|
39
|
+
# : (untyped, ?dev_tools: (String | ^() -> String?)?, ?dev_server_port: (Integer | String | ^() -> untyped)?, ?enabled: bool) -> void
|
|
40
|
+
def initialize: (untyped, ?dev_tools: (String | ^() -> String?)?, ?dev_server_port: (Integer | String | ^() -> untyped)?, ?enabled: bool) -> void
|
|
41
|
+
|
|
42
|
+
# : (untyped) -> untyped
|
|
43
|
+
def call: (untyped) -> untyped
|
|
44
|
+
|
|
45
|
+
private
|
|
46
|
+
|
|
47
|
+
# : (Exception) -> Herb::Engine::CompilationError?
|
|
48
|
+
def compilation_error: (Exception) -> Herb::Engine::CompilationError?
|
|
49
|
+
|
|
50
|
+
# : (untyped) -> Exception?
|
|
51
|
+
def delegated: (untyped) -> Exception?
|
|
52
|
+
|
|
53
|
+
# : (untyped) -> bool
|
|
54
|
+
def wants_html?: (untyped) -> bool
|
|
55
|
+
|
|
56
|
+
# : (Herb::Engine::CompilationError) -> untyped
|
|
57
|
+
def respond: (Herb::Engine::CompilationError) -> untyped
|
|
58
|
+
|
|
59
|
+
# : (Herb::Engine::CompilationError) -> Herb::Engine::Runtime::Report
|
|
60
|
+
def report_for: (Herb::Engine::CompilationError) -> Herb::Engine::Runtime::Report
|
|
61
|
+
|
|
62
|
+
# : (Herb::Engine::Runtime::Report, Herb::Engine::CompilationError) -> void
|
|
63
|
+
def note_source: (Herb::Engine::Runtime::Report, Herb::Engine::CompilationError) -> void
|
|
64
|
+
|
|
65
|
+
# : (Herb::Engine::Runtime::Report, Herb::Engine::CompilationError) -> void
|
|
66
|
+
def note_provenance: (Herb::Engine::Runtime::Report, Herb::Engine::CompilationError) -> void
|
|
67
|
+
|
|
68
|
+
# : (Herb::Engine::CompilationError) -> Array[Herb::Diagnostic]
|
|
69
|
+
def diagnostics_for: (Herb::Engine::CompilationError) -> Array[Herb::Diagnostic]
|
|
70
|
+
|
|
71
|
+
# : (Herb::Diagnostic) -> Herb::Diagnostic
|
|
72
|
+
def blocking: (Herb::Diagnostic) -> Herb::Diagnostic
|
|
73
|
+
|
|
74
|
+
# : (Herb::Engine::CompilationError) -> String?
|
|
75
|
+
def template_for: (Herb::Engine::CompilationError) -> String?
|
|
76
|
+
|
|
77
|
+
# : (Herb::Engine::CompilationError) -> String
|
|
78
|
+
def page: (Herb::Engine::CompilationError) -> String
|
|
79
|
+
|
|
80
|
+
# : (Array[Herb::Diagnostic]) -> String
|
|
81
|
+
def title: (Array[Herb::Diagnostic]) -> String
|
|
82
|
+
|
|
83
|
+
# : () -> String
|
|
84
|
+
def script_tag: () -> String
|
|
85
|
+
|
|
86
|
+
# : () -> String?
|
|
87
|
+
def dev_tools_path: () -> String?
|
|
88
|
+
|
|
89
|
+
# : () -> String
|
|
90
|
+
def dev_server_port_meta_tag: () -> String
|
|
91
|
+
|
|
92
|
+
# : (untyped) -> untyped
|
|
93
|
+
def resolved: (untyped) -> untyped
|
|
94
|
+
|
|
95
|
+
# : (Hash[Symbol, untyped]) -> String
|
|
96
|
+
def provenance: (Hash[Symbol, untyped]) -> String
|
|
97
|
+
|
|
98
|
+
# : (Array[Herb::Diagnostic], Hash[String, String], String) -> String
|
|
99
|
+
def fallback: (Array[Herb::Diagnostic], Hash[String, String], String) -> String
|
|
100
|
+
|
|
101
|
+
# : (Herb::Diagnostic, String?) -> String
|
|
102
|
+
def section: (Herb::Diagnostic, String?) -> String
|
|
103
|
+
|
|
104
|
+
# : (String?, Integer?) -> String
|
|
105
|
+
def excerpt: (String?, Integer?) -> String
|
|
106
|
+
|
|
107
|
+
# : (String) -> String
|
|
108
|
+
def escape: (String) -> String
|
|
109
|
+
|
|
110
|
+
# : (String) -> String
|
|
111
|
+
def escape_attribute: (String) -> String
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
end
|