From 050f94a09bb22965786b3aacd1b1446e11074746 Mon Sep 17 00:00:00 2001 From: Marco Roth Date: Fri, 27 Mar 2026 22:21:26 +0100 Subject: [PATCH] Herb: Implement Action View Helper Registry --- .clang-format-ignore | 4 + .gitignore | 8 + .rubocop.yml | 2 + .../action_cable_meta_tag.yml | 20 + .../content_security_policy?.yml | 16 + .../content_security_policy_nonce.yml | 16 + .../polymorphic_routes/polymorphic_path.yml | 27 + .../polymorphic_routes/polymorphic_url.yml | 33 + .../form_authenticity_token.yml | 19 + .../protect_against_forgery?.yml | 16 + .../render_action_text_content.yml | 21 + .../sanitize_action_text_content.yml | 21 + .../tag_helper/rich_textarea_tag.yml | 46 + .../active_model_helper/error_message.yml | 16 + .../active_model_helper/error_wrapping.yml | 16 + .../actionview/active_model_helper/object.yml | 16 + .../apply_stylesheet_media_default.yml | 16 + .../actionview/asset_tag_helper/audio_tag.yml | 45 + .../auto_discovery_link_tag.yml | 44 + .../asset_tag_helper/auto_include_nonce.yml | 16 + .../auto_include_nonce_for_scripts.yml | 16 + .../auto_include_nonce_for_styles.yml | 16 + .../asset_tag_helper/favicon_link_tag.yml | 46 + .../asset_tag_helper/image_decoding.yml | 16 + .../asset_tag_helper/image_loading.yml | 16 + .../actionview/asset_tag_helper/image_tag.yml | 68 + .../javascript_include_tag.yml | 59 + .../asset_tag_helper/picture_tag.yml | 29 + .../asset_tag_helper/preload_link_tag.yml | 50 + .../asset_tag_helper/preload_links_header.yml | 16 + .../asset_tag_helper/stylesheet_link_tag.yml | 50 + .../actionview/asset_tag_helper/video_tag.yml | 55 + .../asset_url_helper/asset_path.yml | 23 + .../actionview/asset_url_helper/asset_url.yml | 23 + .../asset_url_helper/audio_path.yml | 23 + .../actionview/asset_url_helper/audio_url.yml | 23 + .../compute_asset_extname.yml | 16 + .../asset_url_helper/compute_asset_host.yml | 16 + .../asset_url_helper/compute_asset_path.yml | 16 + .../actionview/asset_url_helper/font_path.yml | 23 + .../actionview/asset_url_helper/font_url.yml | 23 + .../asset_url_helper/image_path.yml | 23 + .../actionview/asset_url_helper/image_url.yml | 23 + .../asset_url_helper/javascript_path.yml | 23 + .../asset_url_helper/javascript_url.yml | 23 + .../public_compute_asset_path.yml | 16 + .../asset_url_helper/stylesheet_path.yml | 23 + .../asset_url_helper/stylesheet_url.yml | 23 + .../asset_url_helper/video_path.yml | 23 + .../actionview/asset_url_helper/video_url.yml | 23 + .../actionview/atom_feed_helper/atom_feed.yml | 40 + .../actionview/cache_helper/cache.yml | 28 + .../cache_helper/cache_fragment_name.yml | 16 + .../actionview/cache_helper/cache_if.yml | 27 + .../actionview/cache_helper/cache_unless.yml | 27 + .../cache_helper/caching_predicate.yml | 16 + .../digest_path_from_template.yml | 16 + .../actionview/cache_helper/fragment_for.yml | 16 + .../fragment_name_with_digest.yml | 16 + .../cache_helper/read_fragment_for.yml | 16 + .../actionview/cache_helper/uncacheable.yml | 16 + .../cache_helper/write_fragment_for.yml | 16 + .../actionview/capture_helper/capture.yml | 16 + .../actionview/capture_helper/content_for.yml | 24 + .../capture_helper/content_for_predicate.yml | 21 + .../actionview/capture_helper/provide.yml | 21 + .../capture_helper/with_output_buffer.yml | 16 + ...repend_content_exfiltration_prevention.yml | 16 + .../prevent_content_exfiltration.yml | 16 + .../controller_helper/action_name.yml | 16 + .../controller_helper/assign_controller.yml | 16 + .../controller_helper/controller.yml | 16 + .../controller_helper/controller_name.yml | 16 + .../controller_helper/controller_path.yml | 16 + .../actionview/controller_helper/cookies.yml | 16 + .../actionview/controller_helper/flash.yml | 16 + .../actionview/controller_helper/headers.yml | 16 + .../actionview/controller_helper/logger.yml | 18 + .../actionview/controller_helper/params.yml | 16 + .../actionview/controller_helper/request.yml | 16 + .../request_forgery_protection_token.yml | 16 + .../actionview/controller_helper/response.yml | 16 + .../actionview/controller_helper/session.yml | 16 + .../actionview/csp_helper/csp_meta_tag.yml | 23 + .../actionview/csrf_helper/csrf_meta_tags.yml | 23 + .../actionview/date_helper/date_select.yml | 71 + .../date_helper/datetime_select.yml | 59 + .../date_helper/distance_of_time_in_words.yml | 33 + .../date_helper/relative_time_in_words.yml | 36 + .../actionview/date_helper/select_date.yml | 49 + .../date_helper/select_datetime.yml | 58 + .../actionview/date_helper/select_day.yml | 42 + .../actionview/date_helper/select_hour.yml | 48 + .../actionview/date_helper/select_minute.yml | 42 + .../actionview/date_helper/select_month.yml | 54 + .../actionview/date_helper/select_second.yml | 39 + .../actionview/date_helper/select_time.yml | 52 + .../actionview/date_helper/select_year.yml | 45 + .../date_helper/time_ago_in_words.yml | 26 + .../actionview/date_helper/time_select.yml | 56 + .../actionview/date_helper/time_tag.yml | 37 + .../actionview/debug_helper/debug.yml | 21 + .../form_helper/apply_form_for_options.yml | 16 + .../actionview/form_helper/button.yml | 38 + .../actionview/form_helper/checkbox.yml | 49 + .../actionview/form_helper/color_field.yml | 32 + .../actionview/form_helper/date_field.yml | 38 + .../actionview/form_helper/datetime_field.yml | 43 + .../actionview/form_helper/email_field.yml | 32 + .../form_helper/emitted_hidden_id.yml | 16 + .../actionview/form_helper/fields.yml | 31 + .../actionview/form_helper/fields_for.yml | 33 + .../actionview/form_helper/file_field.yml | 44 + .../actionview/form_helper/form_for.yml | 41 + .../actionview/form_helper/form_with.yml | 42 + .../form_helper/form_with_generates_ids.yml | 16 + .../form_with_generates_remote_forms.yml | 16 + .../actionview/form_helper/hidden_field.yml | 32 + .../actionview/form_helper/label.yml | 47 + .../actionview/form_helper/month_field.yml | 32 + .../actionview/form_helper/multipart.yml | 16 + .../multiple_file_field_include_hidden.yml | 16 + .../actionview/form_helper/number_field.yml | 44 + .../actionview/form_helper/password_field.yml | 32 + .../actionview/form_helper/radio_button.yml | 37 + .../actionview/form_helper/range_field.yml | 44 + .../actionview/form_helper/search_field.yml | 32 + .../actionview/form_helper/submit.yml | 35 + .../form_helper/telephone_field.yml | 34 + .../actionview/form_helper/text_field.yml | 32 + .../actionview/form_helper/textarea.yml | 37 + .../actionview/form_helper/time_field.yml | 41 + .../actionview/form_helper/url_field.yml | 32 + .../actionview/form_helper/week_field.yml | 32 + .../collection_checkboxes.yml | 58 + .../collection_radio_buttons.yml | 56 + .../form_options_helper/collection_select.yml | 65 + .../grouped_collection_select.yml | 69 + .../grouped_options_for_select.yml | 39 + ...tion_groups_from_collection_for_select.yml | 47 + .../options_for_select.yml | 27 + .../options_from_collection_for_select.yml | 37 + .../actionview/form_options_helper/select.yml | 59 + .../time_zone_options_for_select.yml | 34 + .../form_options_helper/time_zone_select.yml | 53 + .../weekday_options_for_select.yml | 31 + .../form_options_helper/weekday_select.yml | 38 + .../actionview/form_tag_helper/button_tag.yml | 39 + .../form_tag_helper/checkbox_tag.yml | 45 + .../form_tag_helper/color_field_tag.yml | 38 + .../form_tag_helper/date_field_tag.yml | 37 + .../form_tag_helper/datetime_field_tag.yml | 39 + .../form_tag_helper/default_enforce_utf8.yml | 16 + .../form_tag_helper/email_field_tag.yml | 37 + ...bed_authenticity_token_in_remote_forms.yml | 16 + .../actionview/form_tag_helper/field_id.yml | 32 + .../actionview/form_tag_helper/field_name.yml | 32 + .../form_tag_helper/field_set_tag.yml | 34 + .../form_tag_helper/file_field_tag.yml | 41 + .../actionview/form_tag_helper/form_tag.yml | 42 + .../form_tag_helper/hidden_field_tag.yml | 37 + .../form_tag_helper/image_submit_tag.yml | 40 + .../actionview/form_tag_helper/label_tag.yml | 38 + .../form_tag_helper/month_field_tag.yml | 37 + .../form_tag_helper/number_field_tag.yml | 49 + .../form_tag_helper/password_field_tag.yml | 38 + .../form_tag_helper/radio_button_tag.yml | 42 + .../form_tag_helper/range_field_tag.yml | 49 + .../form_tag_helper/search_field_tag.yml | 37 + .../actionview/form_tag_helper/select_tag.yml | 49 + .../actionview/form_tag_helper/submit_tag.yml | 39 + .../form_tag_helper/telephone_field_tag.yml | 39 + .../form_tag_helper/text_field_tag.yml | 37 + .../form_tag_helper/textarea_tag.yml | 43 + .../form_tag_helper/time_field_tag.yml | 37 + .../form_tag_helper/url_field_tag.yml | 37 + .../form_tag_helper/utf8_enforcer_tag.yml | 16 + .../form_tag_helper/week_field_tag.yml | 37 + .../javascript_helper/escape_javascript.yml | 23 + .../javascript_cdata_section.yml | 16 + .../javascript_helper/javascript_tag.yml | 45 + .../number_helper/number_to_currency.yml | 36 + .../number_helper/number_to_human.yml | 27 + .../number_helper/number_to_human_size.yml | 24 + .../number_helper/number_to_percentage.yml | 24 + .../number_helper/number_to_phone.yml | 34 + .../number_helper/number_with_delimiter.yml | 29 + .../number_helper/number_with_precision.yml | 27 + .../actionview/output_safety_helper/raw.yml | 21 + .../output_safety_helper/safe_join.yml | 26 + .../output_safety_helper/to_sentence.yml | 33 + .../record_identifier/dom_class.yml | 27 + .../actionview/record_identifier/dom_id.yml | 27 + .../record_identifier/dom_target.yml | 22 + .../model_name_from_record_or_class.yml | 16 + .../actionview/rendering_helper/render.yml | 34 + .../actionview/sanitize_helper/sanitize.yml | 27 + .../sanitize_helper/sanitize_css.yml | 21 + .../sanitize_helper/sanitizer_vendor.yml | 16 + .../sanitize_helper/strip_links.yml | 21 + .../actionview/sanitize_helper/strip_tags.yml | 21 + .../actionview/tag_helper/cdata_section.yml | 21 + .../actionview/tag_helper/content_tag.yml | 64 + .../actionview/tag_helper/escape_once.yml | 21 + .../actionview/tag_helper/tag.yml | 47 + .../actionview/tag_helper/token_list.yml | 24 + .../actionview/text_helper/concat.yml | 21 + .../actionview/text_helper/current_cycle.yml | 22 + .../actionview/text_helper/cycle.yml | 31 + .../actionview/text_helper/excerpt.yml | 39 + .../actionview/text_helper/highlight.yml | 35 + .../actionview/text_helper/pluralize.yml | 32 + .../actionview/text_helper/reset_cycle.yml | 22 + .../actionview/text_helper/safe_concat.yml | 16 + .../actionview/text_helper/simple_format.yml | 40 + .../actionview/text_helper/truncate.yml | 40 + .../actionview/text_helper/word_wrap.yml | 27 + .../debug_missing_translation.yml | 16 + .../translation_helper/localize.yml | 29 + .../translation_helper/translate.yml | 32 + .../actionview/url_helper/button_to.yml | 55 + .../button_to_generates_button_tag.yml | 16 + .../actionview/url_helper/current_page?.yml | 28 + .../actionview/url_helper/link_to.yml | 76 ++ .../actionview/url_helper/link_to_if.yml | 42 + .../actionview/url_helper/link_to_unless.yml | 42 + .../url_helper/link_to_unless_current.yml | 37 + .../actionview/url_helper/mail_to.yml | 56 + .../actionview/url_helper/phone_to.yml | 44 + .../actionview/url_helper/sms_to.yml | 47 + .../actionview/url_helper/url_for.yml | 22 + .../turbo_exempts_page_from_cache.yml | 16 + .../turbo_exempts_page_from_cache_tag.yml | 20 + .../turbo_exempts_page_from_preview.yml | 16 + .../turbo_exempts_page_from_preview_tag.yml | 20 + .../turbo_page_requires_reload.yml | 16 + .../turbo_page_requires_reload_tag.yml | 20 + .../drive_helper/turbo_refresh_method_tag.yml | 26 + .../drive_helper/turbo_refresh_scroll_tag.yml | 26 + .../drive_helper/turbo_refreshes_with.yml | 22 + .../frames_helper/turbo_frame_tag.yml | 50 + .../includes_helper/turbo_include_tags.yml | 16 + .../turbo_stream_action_tag.yml | 34 + .../turbo_stream_refresh_tag.yml | 23 + .../streams_helper/turbo_stream.yml | 16 + .../streams_helper/turbo_stream_from.yml | 33 + .../annotate_rendered_view_with_filenames.yml | 8 + .../actionview/base/assign.yml | 8 + .../actionview/base/assigns.yml | 8 + .../base/automatically_disable_submit_tag.yml | 8 + .../base/compiled_method_container.yml | 8 + .../actionview/base/config.yml | 8 + .../actionview/base/default_form_builder.yml | 8 + .../actionview/base/default_formats.yml | 8 + .../actionview/base/field_error_proc.yml | 8 + .../actionview/base/formats.yml | 8 + .../actionview/base/in_rendering_context.yml | 8 + .../actionview/base/locale.yml | 8 + .../actionview/base/lookup_context.yml | 8 + .../actionview/base/output_buffer.yml | 8 + ...partial_path_with_controller_namespace.yml | 10 + .../base/remove_hidden_field_autocomplete.yml | 8 + .../streaming_completion_on_exception.yml | 8 + .../actionview/base/view_flow.yml | 8 + .../actionview/base/view_paths.yml | 8 + .../actionview/base/view_renderer.yml | 8 + .../actionview/template/local_assigns.yml | 8 + .../conversion/convert_to_model.yml | 8 + .../activesupport/benchmarkable/benchmark.yml | 8 + javascript/packages/core/src/index.ts | 4 +- .../src/action_view_helpers.ts | 35 - .../language-server/src/hover_service.ts | 157 ++- .../src/rewrite_code_action_service.ts | 24 +- .../test/hover_service.test.ts | 92 +- .../src/rules/a11y-no-autofocus-attribute.ts | 13 +- .../src/rules/erb-no-javascript-tag-helper.ts | 4 +- .../src/rules/html-require-script-nonce.ts | 20 +- javascript/packages/node/binding.gyp | 28 +- .../html-to-action-view-tag-helper.ts | 44 +- sig/herb/action_view/helper_registry.rbs | 1142 +++++++++++++++++ src/analyze/action_view/content_tag.c | 78 -- src/analyze/action_view/image_tag.c | 35 +- .../action_view/javascript_include_tag.c | 43 +- src/analyze/action_view/javascript_tag.c | 52 - src/analyze/action_view/registry.c | 4 +- src/analyze/action_view/tag.c | 87 -- src/analyze/action_view/turbo_frame_tag.c | 37 +- .../java/org/herb/ast/HelperRegistry.java.erb | 254 ++++ .../core/src/action-view-helpers.ts.erb | 169 +++ .../herb/action_view/helper_registry.rb.erb | 285 ++++ templates/rust/src/action_view_helpers.rs.erb | 152 +++ .../action_view/generated_handlers.c.erb | 230 ++++ .../action_view/generated_handlers.h.erb | 12 + .../analyze/action_view/helper_registry.c.erb | 113 ++ .../analyze/action_view/helper_registry.h.erb | 81 ++ templates/template.rb | 339 ++++- 296 files changed, 10746 insertions(+), 454 deletions(-) create mode 100644 config/action_view_helpers/actioncable/action_cable_helper/action_cable_meta_tag.yml create mode 100644 config/action_view_helpers/actionpack/content_security_policy/content_security_policy?.yml create mode 100644 config/action_view_helpers/actionpack/content_security_policy/content_security_policy_nonce.yml create mode 100644 config/action_view_helpers/actionpack/polymorphic_routes/polymorphic_path.yml create mode 100644 config/action_view_helpers/actionpack/polymorphic_routes/polymorphic_url.yml create mode 100644 config/action_view_helpers/actionpack/request_forgery_protection/form_authenticity_token.yml create mode 100644 config/action_view_helpers/actionpack/request_forgery_protection/protect_against_forgery?.yml create mode 100644 config/action_view_helpers/actiontext/content_helper/render_action_text_content.yml create mode 100644 config/action_view_helpers/actiontext/content_helper/sanitize_action_text_content.yml create mode 100644 config/action_view_helpers/actiontext/tag_helper/rich_textarea_tag.yml create mode 100644 config/action_view_helpers/actionview/active_model_helper/error_message.yml create mode 100644 config/action_view_helpers/actionview/active_model_helper/error_wrapping.yml create mode 100644 config/action_view_helpers/actionview/active_model_helper/object.yml create mode 100644 config/action_view_helpers/actionview/asset_tag_helper/apply_stylesheet_media_default.yml create mode 100644 config/action_view_helpers/actionview/asset_tag_helper/audio_tag.yml create mode 100644 config/action_view_helpers/actionview/asset_tag_helper/auto_discovery_link_tag.yml create mode 100644 config/action_view_helpers/actionview/asset_tag_helper/auto_include_nonce.yml create mode 100644 config/action_view_helpers/actionview/asset_tag_helper/auto_include_nonce_for_scripts.yml create mode 100644 config/action_view_helpers/actionview/asset_tag_helper/auto_include_nonce_for_styles.yml create mode 100644 config/action_view_helpers/actionview/asset_tag_helper/favicon_link_tag.yml create mode 100644 config/action_view_helpers/actionview/asset_tag_helper/image_decoding.yml create mode 100644 config/action_view_helpers/actionview/asset_tag_helper/image_loading.yml create mode 100644 config/action_view_helpers/actionview/asset_tag_helper/image_tag.yml create mode 100644 config/action_view_helpers/actionview/asset_tag_helper/javascript_include_tag.yml create mode 100644 config/action_view_helpers/actionview/asset_tag_helper/picture_tag.yml create mode 100644 config/action_view_helpers/actionview/asset_tag_helper/preload_link_tag.yml create mode 100644 config/action_view_helpers/actionview/asset_tag_helper/preload_links_header.yml create mode 100644 config/action_view_helpers/actionview/asset_tag_helper/stylesheet_link_tag.yml create mode 100644 config/action_view_helpers/actionview/asset_tag_helper/video_tag.yml create mode 100644 config/action_view_helpers/actionview/asset_url_helper/asset_path.yml create mode 100644 config/action_view_helpers/actionview/asset_url_helper/asset_url.yml create mode 100644 config/action_view_helpers/actionview/asset_url_helper/audio_path.yml create mode 100644 config/action_view_helpers/actionview/asset_url_helper/audio_url.yml create mode 100644 config/action_view_helpers/actionview/asset_url_helper/compute_asset_extname.yml create mode 100644 config/action_view_helpers/actionview/asset_url_helper/compute_asset_host.yml create mode 100644 config/action_view_helpers/actionview/asset_url_helper/compute_asset_path.yml create mode 100644 config/action_view_helpers/actionview/asset_url_helper/font_path.yml create mode 100644 config/action_view_helpers/actionview/asset_url_helper/font_url.yml create mode 100644 config/action_view_helpers/actionview/asset_url_helper/image_path.yml create mode 100644 config/action_view_helpers/actionview/asset_url_helper/image_url.yml create mode 100644 config/action_view_helpers/actionview/asset_url_helper/javascript_path.yml create mode 100644 config/action_view_helpers/actionview/asset_url_helper/javascript_url.yml create mode 100644 config/action_view_helpers/actionview/asset_url_helper/public_compute_asset_path.yml create mode 100644 config/action_view_helpers/actionview/asset_url_helper/stylesheet_path.yml create mode 100644 config/action_view_helpers/actionview/asset_url_helper/stylesheet_url.yml create mode 100644 config/action_view_helpers/actionview/asset_url_helper/video_path.yml create mode 100644 config/action_view_helpers/actionview/asset_url_helper/video_url.yml create mode 100644 config/action_view_helpers/actionview/atom_feed_helper/atom_feed.yml create mode 100644 config/action_view_helpers/actionview/cache_helper/cache.yml create mode 100644 config/action_view_helpers/actionview/cache_helper/cache_fragment_name.yml create mode 100644 config/action_view_helpers/actionview/cache_helper/cache_if.yml create mode 100644 config/action_view_helpers/actionview/cache_helper/cache_unless.yml create mode 100644 config/action_view_helpers/actionview/cache_helper/caching_predicate.yml create mode 100644 config/action_view_helpers/actionview/cache_helper/digest_path_from_template.yml create mode 100644 config/action_view_helpers/actionview/cache_helper/fragment_for.yml create mode 100644 config/action_view_helpers/actionview/cache_helper/fragment_name_with_digest.yml create mode 100644 config/action_view_helpers/actionview/cache_helper/read_fragment_for.yml create mode 100644 config/action_view_helpers/actionview/cache_helper/uncacheable.yml create mode 100644 config/action_view_helpers/actionview/cache_helper/write_fragment_for.yml create mode 100644 config/action_view_helpers/actionview/capture_helper/capture.yml create mode 100644 config/action_view_helpers/actionview/capture_helper/content_for.yml create mode 100644 config/action_view_helpers/actionview/capture_helper/content_for_predicate.yml create mode 100644 config/action_view_helpers/actionview/capture_helper/provide.yml create mode 100644 config/action_view_helpers/actionview/capture_helper/with_output_buffer.yml create mode 100644 config/action_view_helpers/actionview/content_exfiltration_prevention_helper/prepend_content_exfiltration_prevention.yml create mode 100644 config/action_view_helpers/actionview/content_exfiltration_prevention_helper/prevent_content_exfiltration.yml create mode 100644 config/action_view_helpers/actionview/controller_helper/action_name.yml create mode 100644 config/action_view_helpers/actionview/controller_helper/assign_controller.yml create mode 100644 config/action_view_helpers/actionview/controller_helper/controller.yml create mode 100644 config/action_view_helpers/actionview/controller_helper/controller_name.yml create mode 100644 config/action_view_helpers/actionview/controller_helper/controller_path.yml create mode 100644 config/action_view_helpers/actionview/controller_helper/cookies.yml create mode 100644 config/action_view_helpers/actionview/controller_helper/flash.yml create mode 100644 config/action_view_helpers/actionview/controller_helper/headers.yml create mode 100644 config/action_view_helpers/actionview/controller_helper/logger.yml create mode 100644 config/action_view_helpers/actionview/controller_helper/params.yml create mode 100644 config/action_view_helpers/actionview/controller_helper/request.yml create mode 100644 config/action_view_helpers/actionview/controller_helper/request_forgery_protection_token.yml create mode 100644 config/action_view_helpers/actionview/controller_helper/response.yml create mode 100644 config/action_view_helpers/actionview/controller_helper/session.yml create mode 100644 config/action_view_helpers/actionview/csp_helper/csp_meta_tag.yml create mode 100644 config/action_view_helpers/actionview/csrf_helper/csrf_meta_tags.yml create mode 100644 config/action_view_helpers/actionview/date_helper/date_select.yml create mode 100644 config/action_view_helpers/actionview/date_helper/datetime_select.yml create mode 100644 config/action_view_helpers/actionview/date_helper/distance_of_time_in_words.yml create mode 100644 config/action_view_helpers/actionview/date_helper/relative_time_in_words.yml create mode 100644 config/action_view_helpers/actionview/date_helper/select_date.yml create mode 100644 config/action_view_helpers/actionview/date_helper/select_datetime.yml create mode 100644 config/action_view_helpers/actionview/date_helper/select_day.yml create mode 100644 config/action_view_helpers/actionview/date_helper/select_hour.yml create mode 100644 config/action_view_helpers/actionview/date_helper/select_minute.yml create mode 100644 config/action_view_helpers/actionview/date_helper/select_month.yml create mode 100644 config/action_view_helpers/actionview/date_helper/select_second.yml create mode 100644 config/action_view_helpers/actionview/date_helper/select_time.yml create mode 100644 config/action_view_helpers/actionview/date_helper/select_year.yml create mode 100644 config/action_view_helpers/actionview/date_helper/time_ago_in_words.yml create mode 100644 config/action_view_helpers/actionview/date_helper/time_select.yml create mode 100644 config/action_view_helpers/actionview/date_helper/time_tag.yml create mode 100644 config/action_view_helpers/actionview/debug_helper/debug.yml create mode 100644 config/action_view_helpers/actionview/form_helper/apply_form_for_options.yml create mode 100644 config/action_view_helpers/actionview/form_helper/button.yml create mode 100644 config/action_view_helpers/actionview/form_helper/checkbox.yml create mode 100644 config/action_view_helpers/actionview/form_helper/color_field.yml create mode 100644 config/action_view_helpers/actionview/form_helper/date_field.yml create mode 100644 config/action_view_helpers/actionview/form_helper/datetime_field.yml create mode 100644 config/action_view_helpers/actionview/form_helper/email_field.yml create mode 100644 config/action_view_helpers/actionview/form_helper/emitted_hidden_id.yml create mode 100644 config/action_view_helpers/actionview/form_helper/fields.yml create mode 100644 config/action_view_helpers/actionview/form_helper/fields_for.yml create mode 100644 config/action_view_helpers/actionview/form_helper/file_field.yml create mode 100644 config/action_view_helpers/actionview/form_helper/form_for.yml create mode 100644 config/action_view_helpers/actionview/form_helper/form_with.yml create mode 100644 config/action_view_helpers/actionview/form_helper/form_with_generates_ids.yml create mode 100644 config/action_view_helpers/actionview/form_helper/form_with_generates_remote_forms.yml create mode 100644 config/action_view_helpers/actionview/form_helper/hidden_field.yml create mode 100644 config/action_view_helpers/actionview/form_helper/label.yml create mode 100644 config/action_view_helpers/actionview/form_helper/month_field.yml create mode 100644 config/action_view_helpers/actionview/form_helper/multipart.yml create mode 100644 config/action_view_helpers/actionview/form_helper/multiple_file_field_include_hidden.yml create mode 100644 config/action_view_helpers/actionview/form_helper/number_field.yml create mode 100644 config/action_view_helpers/actionview/form_helper/password_field.yml create mode 100644 config/action_view_helpers/actionview/form_helper/radio_button.yml create mode 100644 config/action_view_helpers/actionview/form_helper/range_field.yml create mode 100644 config/action_view_helpers/actionview/form_helper/search_field.yml create mode 100644 config/action_view_helpers/actionview/form_helper/submit.yml create mode 100644 config/action_view_helpers/actionview/form_helper/telephone_field.yml create mode 100644 config/action_view_helpers/actionview/form_helper/text_field.yml create mode 100644 config/action_view_helpers/actionview/form_helper/textarea.yml create mode 100644 config/action_view_helpers/actionview/form_helper/time_field.yml create mode 100644 config/action_view_helpers/actionview/form_helper/url_field.yml create mode 100644 config/action_view_helpers/actionview/form_helper/week_field.yml create mode 100644 config/action_view_helpers/actionview/form_options_helper/collection_checkboxes.yml create mode 100644 config/action_view_helpers/actionview/form_options_helper/collection_radio_buttons.yml create mode 100644 config/action_view_helpers/actionview/form_options_helper/collection_select.yml create mode 100644 config/action_view_helpers/actionview/form_options_helper/grouped_collection_select.yml create mode 100644 config/action_view_helpers/actionview/form_options_helper/grouped_options_for_select.yml create mode 100644 config/action_view_helpers/actionview/form_options_helper/option_groups_from_collection_for_select.yml create mode 100644 config/action_view_helpers/actionview/form_options_helper/options_for_select.yml create mode 100644 config/action_view_helpers/actionview/form_options_helper/options_from_collection_for_select.yml create mode 100644 config/action_view_helpers/actionview/form_options_helper/select.yml create mode 100644 config/action_view_helpers/actionview/form_options_helper/time_zone_options_for_select.yml create mode 100644 config/action_view_helpers/actionview/form_options_helper/time_zone_select.yml create mode 100644 config/action_view_helpers/actionview/form_options_helper/weekday_options_for_select.yml create mode 100644 config/action_view_helpers/actionview/form_options_helper/weekday_select.yml create mode 100644 config/action_view_helpers/actionview/form_tag_helper/button_tag.yml create mode 100644 config/action_view_helpers/actionview/form_tag_helper/checkbox_tag.yml create mode 100644 config/action_view_helpers/actionview/form_tag_helper/color_field_tag.yml create mode 100644 config/action_view_helpers/actionview/form_tag_helper/date_field_tag.yml create mode 100644 config/action_view_helpers/actionview/form_tag_helper/datetime_field_tag.yml create mode 100644 config/action_view_helpers/actionview/form_tag_helper/default_enforce_utf8.yml create mode 100644 config/action_view_helpers/actionview/form_tag_helper/email_field_tag.yml create mode 100644 config/action_view_helpers/actionview/form_tag_helper/embed_authenticity_token_in_remote_forms.yml create mode 100644 config/action_view_helpers/actionview/form_tag_helper/field_id.yml create mode 100644 config/action_view_helpers/actionview/form_tag_helper/field_name.yml create mode 100644 config/action_view_helpers/actionview/form_tag_helper/field_set_tag.yml create mode 100644 config/action_view_helpers/actionview/form_tag_helper/file_field_tag.yml create mode 100644 config/action_view_helpers/actionview/form_tag_helper/form_tag.yml create mode 100644 config/action_view_helpers/actionview/form_tag_helper/hidden_field_tag.yml create mode 100644 config/action_view_helpers/actionview/form_tag_helper/image_submit_tag.yml create mode 100644 config/action_view_helpers/actionview/form_tag_helper/label_tag.yml create mode 100644 config/action_view_helpers/actionview/form_tag_helper/month_field_tag.yml create mode 100644 config/action_view_helpers/actionview/form_tag_helper/number_field_tag.yml create mode 100644 config/action_view_helpers/actionview/form_tag_helper/password_field_tag.yml create mode 100644 config/action_view_helpers/actionview/form_tag_helper/radio_button_tag.yml create mode 100644 config/action_view_helpers/actionview/form_tag_helper/range_field_tag.yml create mode 100644 config/action_view_helpers/actionview/form_tag_helper/search_field_tag.yml create mode 100644 config/action_view_helpers/actionview/form_tag_helper/select_tag.yml create mode 100644 config/action_view_helpers/actionview/form_tag_helper/submit_tag.yml create mode 100644 config/action_view_helpers/actionview/form_tag_helper/telephone_field_tag.yml create mode 100644 config/action_view_helpers/actionview/form_tag_helper/text_field_tag.yml create mode 100644 config/action_view_helpers/actionview/form_tag_helper/textarea_tag.yml create mode 100644 config/action_view_helpers/actionview/form_tag_helper/time_field_tag.yml create mode 100644 config/action_view_helpers/actionview/form_tag_helper/url_field_tag.yml create mode 100644 config/action_view_helpers/actionview/form_tag_helper/utf8_enforcer_tag.yml create mode 100644 config/action_view_helpers/actionview/form_tag_helper/week_field_tag.yml create mode 100644 config/action_view_helpers/actionview/javascript_helper/escape_javascript.yml create mode 100644 config/action_view_helpers/actionview/javascript_helper/javascript_cdata_section.yml create mode 100644 config/action_view_helpers/actionview/javascript_helper/javascript_tag.yml create mode 100644 config/action_view_helpers/actionview/number_helper/number_to_currency.yml create mode 100644 config/action_view_helpers/actionview/number_helper/number_to_human.yml create mode 100644 config/action_view_helpers/actionview/number_helper/number_to_human_size.yml create mode 100644 config/action_view_helpers/actionview/number_helper/number_to_percentage.yml create mode 100644 config/action_view_helpers/actionview/number_helper/number_to_phone.yml create mode 100644 config/action_view_helpers/actionview/number_helper/number_with_delimiter.yml create mode 100644 config/action_view_helpers/actionview/number_helper/number_with_precision.yml create mode 100644 config/action_view_helpers/actionview/output_safety_helper/raw.yml create mode 100644 config/action_view_helpers/actionview/output_safety_helper/safe_join.yml create mode 100644 config/action_view_helpers/actionview/output_safety_helper/to_sentence.yml create mode 100644 config/action_view_helpers/actionview/record_identifier/dom_class.yml create mode 100644 config/action_view_helpers/actionview/record_identifier/dom_id.yml create mode 100644 config/action_view_helpers/actionview/record_identifier/dom_target.yml create mode 100644 config/action_view_helpers/actionview/record_identifier/model_name_from_record_or_class.yml create mode 100644 config/action_view_helpers/actionview/rendering_helper/render.yml create mode 100644 config/action_view_helpers/actionview/sanitize_helper/sanitize.yml create mode 100644 config/action_view_helpers/actionview/sanitize_helper/sanitize_css.yml create mode 100644 config/action_view_helpers/actionview/sanitize_helper/sanitizer_vendor.yml create mode 100644 config/action_view_helpers/actionview/sanitize_helper/strip_links.yml create mode 100644 config/action_view_helpers/actionview/sanitize_helper/strip_tags.yml create mode 100644 config/action_view_helpers/actionview/tag_helper/cdata_section.yml create mode 100644 config/action_view_helpers/actionview/tag_helper/content_tag.yml create mode 100644 config/action_view_helpers/actionview/tag_helper/escape_once.yml create mode 100644 config/action_view_helpers/actionview/tag_helper/tag.yml create mode 100644 config/action_view_helpers/actionview/tag_helper/token_list.yml create mode 100644 config/action_view_helpers/actionview/text_helper/concat.yml create mode 100644 config/action_view_helpers/actionview/text_helper/current_cycle.yml create mode 100644 config/action_view_helpers/actionview/text_helper/cycle.yml create mode 100644 config/action_view_helpers/actionview/text_helper/excerpt.yml create mode 100644 config/action_view_helpers/actionview/text_helper/highlight.yml create mode 100644 config/action_view_helpers/actionview/text_helper/pluralize.yml create mode 100644 config/action_view_helpers/actionview/text_helper/reset_cycle.yml create mode 100644 config/action_view_helpers/actionview/text_helper/safe_concat.yml create mode 100644 config/action_view_helpers/actionview/text_helper/simple_format.yml create mode 100644 config/action_view_helpers/actionview/text_helper/truncate.yml create mode 100644 config/action_view_helpers/actionview/text_helper/word_wrap.yml create mode 100644 config/action_view_helpers/actionview/translation_helper/debug_missing_translation.yml create mode 100644 config/action_view_helpers/actionview/translation_helper/localize.yml create mode 100644 config/action_view_helpers/actionview/translation_helper/translate.yml create mode 100644 config/action_view_helpers/actionview/url_helper/button_to.yml create mode 100644 config/action_view_helpers/actionview/url_helper/button_to_generates_button_tag.yml create mode 100644 config/action_view_helpers/actionview/url_helper/current_page?.yml create mode 100644 config/action_view_helpers/actionview/url_helper/link_to.yml create mode 100644 config/action_view_helpers/actionview/url_helper/link_to_if.yml create mode 100644 config/action_view_helpers/actionview/url_helper/link_to_unless.yml create mode 100644 config/action_view_helpers/actionview/url_helper/link_to_unless_current.yml create mode 100644 config/action_view_helpers/actionview/url_helper/mail_to.yml create mode 100644 config/action_view_helpers/actionview/url_helper/phone_to.yml create mode 100644 config/action_view_helpers/actionview/url_helper/sms_to.yml create mode 100644 config/action_view_helpers/actionview/url_helper/url_for.yml create mode 100644 config/action_view_helpers/turbo-rails/drive_helper/turbo_exempts_page_from_cache.yml create mode 100644 config/action_view_helpers/turbo-rails/drive_helper/turbo_exempts_page_from_cache_tag.yml create mode 100644 config/action_view_helpers/turbo-rails/drive_helper/turbo_exempts_page_from_preview.yml create mode 100644 config/action_view_helpers/turbo-rails/drive_helper/turbo_exempts_page_from_preview_tag.yml create mode 100644 config/action_view_helpers/turbo-rails/drive_helper/turbo_page_requires_reload.yml create mode 100644 config/action_view_helpers/turbo-rails/drive_helper/turbo_page_requires_reload_tag.yml create mode 100644 config/action_view_helpers/turbo-rails/drive_helper/turbo_refresh_method_tag.yml create mode 100644 config/action_view_helpers/turbo-rails/drive_helper/turbo_refresh_scroll_tag.yml create mode 100644 config/action_view_helpers/turbo-rails/drive_helper/turbo_refreshes_with.yml create mode 100644 config/action_view_helpers/turbo-rails/frames_helper/turbo_frame_tag.yml create mode 100644 config/action_view_helpers/turbo-rails/includes_helper/turbo_include_tags.yml create mode 100644 config/action_view_helpers/turbo-rails/streams_action_helper/turbo_stream_action_tag.yml create mode 100644 config/action_view_helpers/turbo-rails/streams_action_helper/turbo_stream_refresh_tag.yml create mode 100644 config/action_view_helpers/turbo-rails/streams_helper/turbo_stream.yml create mode 100644 config/action_view_helpers/turbo-rails/streams_helper/turbo_stream_from.yml create mode 100644 config/view_context_methods/actionview/base/annotate_rendered_view_with_filenames.yml create mode 100644 config/view_context_methods/actionview/base/assign.yml create mode 100644 config/view_context_methods/actionview/base/assigns.yml create mode 100644 config/view_context_methods/actionview/base/automatically_disable_submit_tag.yml create mode 100644 config/view_context_methods/actionview/base/compiled_method_container.yml create mode 100644 config/view_context_methods/actionview/base/config.yml create mode 100644 config/view_context_methods/actionview/base/default_form_builder.yml create mode 100644 config/view_context_methods/actionview/base/default_formats.yml create mode 100644 config/view_context_methods/actionview/base/field_error_proc.yml create mode 100644 config/view_context_methods/actionview/base/formats.yml create mode 100644 config/view_context_methods/actionview/base/in_rendering_context.yml create mode 100644 config/view_context_methods/actionview/base/locale.yml create mode 100644 config/view_context_methods/actionview/base/lookup_context.yml create mode 100644 config/view_context_methods/actionview/base/output_buffer.yml create mode 100644 config/view_context_methods/actionview/base/prefix_partial_path_with_controller_namespace.yml create mode 100644 config/view_context_methods/actionview/base/remove_hidden_field_autocomplete.yml create mode 100644 config/view_context_methods/actionview/base/streaming_completion_on_exception.yml create mode 100644 config/view_context_methods/actionview/base/view_flow.yml create mode 100644 config/view_context_methods/actionview/base/view_paths.yml create mode 100644 config/view_context_methods/actionview/base/view_renderer.yml create mode 100644 config/view_context_methods/actionview/template/local_assigns.yml create mode 100644 config/view_context_methods/activemodel/conversion/convert_to_model.yml create mode 100644 config/view_context_methods/activesupport/benchmarkable/benchmark.yml delete mode 100644 javascript/packages/language-server/src/action_view_helpers.ts create mode 100644 sig/herb/action_view/helper_registry.rbs delete mode 100644 src/analyze/action_view/content_tag.c delete mode 100644 src/analyze/action_view/tag.c create mode 100644 templates/java/org/herb/ast/HelperRegistry.java.erb create mode 100644 templates/javascript/packages/core/src/action-view-helpers.ts.erb create mode 100644 templates/lib/herb/action_view/helper_registry.rb.erb create mode 100644 templates/rust/src/action_view_helpers.rs.erb create mode 100644 templates/src/analyze/action_view/generated_handlers.c.erb create mode 100644 templates/src/analyze/action_view/generated_handlers.h.erb create mode 100644 templates/src/analyze/action_view/helper_registry.c.erb create mode 100644 templates/src/include/analyze/action_view/helper_registry.h.erb diff --git a/.clang-format-ignore b/.clang-format-ignore index 992622d28..9778be4ea 100644 --- a/.clang-format-ignore +++ b/.clang-format-ignore @@ -10,4 +10,8 @@ src/include/ast/ast_pretty_print.h src/include/errors.h src/include/lib/hb_foreach.h src/parser/match_tags.c +src/analyze/action_view/helper_registry.c +src/analyze/action_view/generated_handlers.c +src/analyze/action_view/generated_handlers.h +src/include/analyze/action_view/helper_registry.h src/visitor.c diff --git a/.gitignore b/.gitignore index cfdcbd0ee..15fc9defb 100644 --- a/.gitignore +++ b/.gitignore @@ -98,7 +98,9 @@ java/nodes.h java/org/herb/ast/Errors.java java/org/herb/ast/Nodes.java java/org/herb/ast/NodeVisitor.java +java/org/herb/ast/HelperRegistry.java java/org/herb/ast/Visitor.java +javascript/packages/core/src/action-view-helpers.ts javascript/packages/core/src/errors.ts javascript/packages/core/src/html-entities.json javascript/packages/core/src/node-type-guards.ts @@ -108,9 +110,11 @@ javascript/packages/node/extension/error_helpers.cpp javascript/packages/node/extension/error_helpers.h javascript/packages/node/extension/nodes.cpp javascript/packages/node/extension/nodes.h +lib/herb/action_view/helper_registry.rb lib/herb/ast/nodes.rb lib/herb/errors.rb lib/herb/visitor.rb +rust/src/action_view_helpers.rs rust/src/ast/nodes.rs rust/src/errors.rs rust/src/nodes.rs @@ -118,11 +122,15 @@ rust/src/union_types.rs rust/src/visitor.rs sig/serialized_ast_errors.rbs sig/serialized_ast_nodes.rbs +src/analyze/action_view/helper_registry.c +src/analyze/action_view/generated_handlers.c +src/analyze/action_view/generated_handlers.h src/analyze/missing_end.c src/analyze/transform.c src/ast/ast_nodes.c src/ast/ast_pretty_print.c src/errors.c +src/include/analyze/action_view/helper_registry.h src/include/ast/ast_nodes.h src/include/ast/ast_pretty_print.h src/include/errors.h diff --git a/.rubocop.yml b/.rubocop.yml index 86c75bb6c..48c105aca 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -7,6 +7,7 @@ AllCops: - 'vendor/**/*' - 'tmp/**/*' - 'node_modules/**/*' + - 'lib/herb/action_view/**/*' Style/StringLiterals: Enabled: true @@ -104,6 +105,7 @@ Metrics/ClassLength: - lib/herb/visitor.rb - lib/herb/ast/nodes.rb - test/**/*_test.rb + - templates/template.rb Metrics/ModuleLength: Exclude: diff --git a/config/action_view_helpers/actioncable/action_cable_helper/action_cable_meta_tag.yml b/config/action_view_helpers/actioncable/action_cable_helper/action_cable_meta_tag.yml new file mode 100644 index 000000000..dcc4290e4 --- /dev/null +++ b/config/action_view_helpers/actioncable/action_cable_helper/action_cable_meta_tag.yml @@ -0,0 +1,20 @@ +--- +name: action_cable_meta_tag +source: "ActionCable::Helpers::ActionCableHelper#action_cable_meta_tag" +gem: actioncable +output: html +visibility: public +supported: false +supports_block: false +description: |- + Returns an `"action-cable-url"` `` tag with the value of the URL specified in your configuration. Ensure this is above your JavaScript tag. Used by Action Cable to determine the URL of your WebSocket server. +signature: "action_cable_meta_tag" +documentation_url: "https://api.rubyonrails.org/classes/ActionCable/Helpers/ActionCableHelper.html#method-i-action_cable_meta_tag" +tag: + name: meta + is_void: true + preferred: false + detect_style: call_name +arguments: [] +options: [] +special_behaviors: [] diff --git a/config/action_view_helpers/actionpack/content_security_policy/content_security_policy?.yml b/config/action_view_helpers/actionpack/content_security_policy/content_security_policy?.yml new file mode 100644 index 000000000..9c20e36bb --- /dev/null +++ b/config/action_view_helpers/actionpack/content_security_policy/content_security_policy?.yml @@ -0,0 +1,16 @@ +--- +name: content_security_policy? +source: "ActionController::ContentSecurityPolicy#content_security_policy?" +gem: actionpack +output: boolean +visibility: public +supported: false +supports_block: false +description: |- + Returns whether a Content-Security-Policy is present for the current request. +signature: "content_security_policy?" +documentation_url: "" +tag: null +arguments: [] +options: [] +special_behaviors: [] diff --git a/config/action_view_helpers/actionpack/content_security_policy/content_security_policy_nonce.yml b/config/action_view_helpers/actionpack/content_security_policy/content_security_policy_nonce.yml new file mode 100644 index 000000000..f1662ef88 --- /dev/null +++ b/config/action_view_helpers/actionpack/content_security_policy/content_security_policy_nonce.yml @@ -0,0 +1,16 @@ +--- +name: content_security_policy_nonce +source: "ActionController::ContentSecurityPolicy#content_security_policy_nonce" +gem: actionpack +output: text +visibility: public +supported: false +supports_block: false +description: |- + Returns the Content-Security-Policy nonce for the current request. This nonce value is used in `