Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 6 additions & 14 deletions javascript/packages/linter/src/rules/action-view-utils.ts
Original file line number Diff line number Diff line change
@@ -1,19 +1,11 @@
import { isPrismNodeType } from "@herb-tools/core"
import { isPrismNodeType, getHelperEntries } from "@herb-tools/core"
import type { PrismNode } from "@herb-tools/core"

// TODO: use Action View Helper Registry
export const ACTION_VIEW_HELPER_NAMES = new Set([
"content_tag",
"link_to",
"turbo_frame_tag",
"javascript_tag",
"javascript_include_tag",
"image_tag",
"button_to",
"form_with",
"form_for",
"form_tag",
])
const ACTION_VIEW_HELPER_NAMES = new Set(
getHelperEntries()
.filter(helper => helper.output === "html" && helper.visibility === "public" && helper.name !== "tag")
.flatMap(helper => [helper.name, ...helper.aliases])
)

export function isTagBuilderCall(prismNode: PrismNode): boolean {
if (!isPrismNodeType(prismNode, "CallNode")) return false
Expand Down
6 changes: 4 additions & 2 deletions sig/herb/action_view/helper_registry.rbs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 5 additions & 1 deletion templates/java/org/herb/ast/HelperRegistry.java.erb
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,7 @@ class HelperEntry {
private final String source;
private final String gem;
private final String output;
private final String visibility;
private final String tagName;
private final boolean isVoid;
private final boolean supportsBlock;
Expand All @@ -133,7 +134,7 @@ class HelperEntry {
private final List<String> aliases;

HelperEntry(
String name, HelperType type, String source, String gem, String output, String tagName,
String name, HelperType type, String source, String gem, String output, String visibility, String tagName,
boolean isVoid, boolean supportsBlock, boolean preferredForTag, boolean supported, String detectStyle, String description,
String signature, String documentationUrl, HelperImplicitAttribute implicitAttribute,
List<HelperArgument> arguments, List<HelperOption> options, List<String> specialBehaviors, List<String> aliases
Expand All @@ -143,6 +144,7 @@ class HelperEntry {
this.source = source;
this.gem = gem;
this.output = output;
this.visibility = visibility;
this.tagName = tagName;
this.isVoid = isVoid;
this.supportsBlock = supportsBlock;
Expand All @@ -164,6 +166,7 @@ class HelperEntry {
public String getSource() { return source; }
public String getGem() { return gem; }
public String getOutput() { return output; }
public String getVisibility() { return visibility; }
public String getTagName() { return tagName; }
public boolean isVoid() { return isVoid; }
public boolean supportsBlock() { return supportsBlock; }
Expand Down Expand Up @@ -206,6 +209,7 @@ public final class HelperRegistry {
"<%= helper.source %>",
"<%= helper.gem %>",
"<%= helper.output %>",
"<%= helper.visibility %>",
<%= helper.tag_name ? "\"#{helper.tag_name}\"" : "null" %>,
<%= helper.void? %>,
<%= helper.supports_block %>,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ export interface HelperEntry {
readonly source: string
readonly gem: string
readonly output: HelperOutput
readonly visibility: "public" | "internal"
readonly tagName: string | null
readonly isVoid: boolean
readonly supportsBlock: boolean
Expand All @@ -61,6 +62,7 @@ const <%= helper.lower_camel_case_name %>Entry: HelperEntry = {
source: "<%= helper.source %>",
gem: "<%= helper.gem %>",
output: "<%= helper.output %>",
visibility: "<%= helper.visibility %>",
tagName: <%= helper.tag_name ? "\"#{helper.tag_name}\"" : "null" %>,
isVoid: <%= helper.void? %>,
supportsBlock: <%= helper.supports_block %>,
Expand Down
7 changes: 5 additions & 2 deletions templates/lib/herb/action_view/helper_registry.rb.erb
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ module Herb
attr_reader :source #: String
attr_reader :gem #: String
attr_reader :output #: Symbol
attr_reader :visibility #: String
attr_reader :tag_name #: String?
attr_reader :detect_style #: Symbol
attr_reader :description #: String
Expand All @@ -92,9 +93,9 @@ module Herb
attr_reader :special_behaviors #: Array[Symbol]
attr_reader :aliases #: Array[String]

#: (name: String, type: Symbol, source: String, gem: String, output: Symbol, tag_name: String?, is_void: bool, supports_block: bool, preferred_for_tag: bool, supported: bool, detect_style: Symbol, description: String, signature: String, documentation_url: String, implicit_attribute: HelperImplicitAttribute?, arguments: Array[HelperArgument], options: Array[HelperOption], special_behaviors: Array[Symbol], aliases: Array[String]) -> void
#: (name: String, type: Symbol, source: String, gem: String, output: Symbol, visibility: String, tag_name: String?, is_void: bool, supports_block: bool, preferred_for_tag: bool, supported: bool, detect_style: Symbol, description: String, signature: String, documentation_url: String, implicit_attribute: HelperImplicitAttribute?, arguments: Array[HelperArgument], options: Array[HelperOption], special_behaviors: Array[Symbol], aliases: Array[String]) -> void
def initialize( # rubocop:disable Metrics/ParameterLists
name:, type:, source:, gem:, output:, tag_name:, is_void:, supports_block:,
name:, type:, source:, gem:, output:, visibility:, tag_name:, is_void:, supports_block:,
preferred_for_tag:, supported:, detect_style:, description:, signature:, documentation_url:,
implicit_attribute:, arguments:, options:, special_behaviors:, aliases:
)
Expand All @@ -103,6 +104,7 @@ module Herb
@source = source
@gem = gem
@output = output
@visibility = visibility
@tag_name = tag_name
@is_void = is_void
@supports_block = supports_block
Expand Down Expand Up @@ -152,6 +154,7 @@ module Herb
source: "<%= helper.source %>",
gem: "<%= helper.gem %>",
output: :<%= helper.output %>,
visibility: "<%= helper.visibility %>",
tag_name: <%= helper.tag_name ? "\"#{helper.tag_name}\"" : "nil" %>,
is_void: <%= helper.void? %>,
supports_block: <%= helper.supports_block %>,
Expand Down
2 changes: 2 additions & 0 deletions templates/rust/src/action_view_helpers.rs.erb
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ pub struct HelperEntry {
pub source: &'static str,
pub gem: &'static str,
pub output: &'static str,
pub visibility: &'static str,
pub tag_name: Option<&'static str>,
pub is_void: bool,
pub supports_block: bool,
Expand Down Expand Up @@ -97,6 +98,7 @@ static REGISTRY: [HelperEntry; <%= helpers.size %>] = [
source: "<%= helper.source %>",
gem: "<%= helper.gem %>",
output: "<%= helper.output %>",
visibility: "<%= helper.visibility %>",
tag_name: <%= helper.tag_name ? "Some(\"#{helper.tag_name}\")" : "None" %>,
is_void: <%= helper.void? %>,
supports_block: <%= helper.supports_block %>,
Expand Down
1 change: 1 addition & 0 deletions templates/src/analyze/action_view/helper_registry.c.erb
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ static const helper_registry_entry_T registry_entries[HELPER_COUNT] = {
.source = HB_STRING_LITERAL("<%= helper.source %>"),
.gem = "<%= helper.gem %>",
.output = HELPER_OUTPUT_<%= helper.output.upcase %>,
.visibility = "<%= helper.visibility %>",
.tag_name = <%= helper.tag_name ? "\"#{helper.tag_name}\"" : "NULL" %>,
.is_void = <%= helper.void? %>,
.supports_block = <%= helper.supports_block %>,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ typedef struct {
hb_string_T source;
const char* gem;
helper_output_T output;
const char* visibility;
const char* tag_name;
bool is_void;
bool supports_block;
Expand Down
Loading