herb 0.9.5-aarch64-linux-gnu → 0.9.7-aarch64-linux-gnu
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ext/herb/extension.c +8 -0
- data/ext/herb/extension_helpers.c +1 -0
- data/lib/herb/3.0/herb.so +0 -0
- data/lib/herb/3.1/herb.so +0 -0
- data/lib/herb/3.2/herb.so +0 -0
- data/lib/herb/3.3/herb.so +0 -0
- data/lib/herb/3.4/herb.so +0 -0
- data/lib/herb/4.0/herb.so +0 -0
- data/lib/herb/action_view/helper_registry.rb +8107 -0
- data/lib/herb/parser_options.rb +7 -2
- data/lib/herb/project.rb +2 -5
- data/lib/herb/version.rb +1 -1
- data/sig/herb/action_view/helper_registry.rbs +1144 -0
- data/sig/herb/parser_options.rbs +6 -2
- data/src/analyze/action_view/generated_handlers.c +355 -0
- data/src/analyze/action_view/generated_handlers.h +16 -0
- data/src/analyze/action_view/helper_registry.c +7244 -0
- data/src/analyze/action_view/image_tag.c +4 -31
- data/src/analyze/action_view/javascript_include_tag.c +1 -42
- data/src/analyze/action_view/javascript_tag.c +0 -52
- data/src/analyze/action_view/registry.c +2 -2
- data/src/analyze/action_view/tag_helpers.c +8 -120
- data/src/analyze/action_view/turbo_frame_tag.c +1 -36
- data/src/analyze/analyze.c +7 -0
- data/src/analyze/postfix_conditionals.c +326 -0
- data/src/analyze/ternary_conditionals.c +265 -0
- data/src/include/analyze/action_view/helper_registry.h +325 -0
- data/src/include/analyze/action_view/tag_helpers.h +0 -1
- data/src/include/analyze/postfix_conditionals.h +9 -0
- data/src/include/analyze/ternary_conditionals.h +15 -0
- data/src/include/parser/parser.h +1 -0
- data/src/include/version.h +1 -1
- data/src/parser.c +1 -0
- data/templates/java/org/herb/ast/HelperRegistry.java.erb +258 -0
- data/templates/javascript/packages/core/src/action-view-helpers.ts.erb +171 -0
- data/templates/javascript/packages/core/src/nodes.ts.erb +5 -1
- data/templates/lib/herb/action_view/helper_registry.rb.erb +288 -0
- data/templates/rust/src/action_view_helpers.rs.erb +154 -0
- data/templates/src/analyze/action_view/generated_handlers.c.erb +230 -0
- data/templates/src/analyze/action_view/generated_handlers.h.erb +12 -0
- data/templates/src/analyze/action_view/helper_registry.c.erb +114 -0
- data/templates/src/include/analyze/action_view/helper_registry.h.erb +82 -0
- data/templates/template.rb +338 -1
- metadata +19 -3
- data/src/analyze/action_view/content_tag.c +0 -78
- data/src/analyze/action_view/tag.c +0 -87
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
// NOTE: This file is generated by the templates/template.rb script and should not
|
|
2
|
+
// be modified manually. See /home/runner/work/herb/herb/templates/src/include/analyze/action_view/helper_registry.h.erb
|
|
3
|
+
|
|
4
|
+
#ifndef HELPER_REGISTRY_H
|
|
5
|
+
#define HELPER_REGISTRY_H
|
|
6
|
+
|
|
7
|
+
#include "../../lib/hb_string.h"
|
|
8
|
+
|
|
9
|
+
#include <stdbool.h>
|
|
10
|
+
#include <stddef.h>
|
|
11
|
+
|
|
12
|
+
typedef enum {
|
|
13
|
+
HELPER_ACTION_CABLE_META_TAG,
|
|
14
|
+
HELPER_CONTENT_SECURITY_POLICY_P,
|
|
15
|
+
HELPER_CONTENT_SECURITY_POLICY_NONCE,
|
|
16
|
+
HELPER_POLYMORPHIC_PATH,
|
|
17
|
+
HELPER_POLYMORPHIC_URL,
|
|
18
|
+
HELPER_FORM_AUTHENTICITY_TOKEN,
|
|
19
|
+
HELPER_PROTECT_AGAINST_FORGERY_P,
|
|
20
|
+
HELPER_RENDER_ACTION_TEXT_CONTENT,
|
|
21
|
+
HELPER_SANITIZE_ACTION_TEXT_CONTENT,
|
|
22
|
+
HELPER_RICH_TEXTAREA_TAG,
|
|
23
|
+
HELPER_ERROR_MESSAGE,
|
|
24
|
+
HELPER_ERROR_WRAPPING,
|
|
25
|
+
HELPER_OBJECT,
|
|
26
|
+
HELPER_APPLY_STYLESHEET_MEDIA_DEFAULT,
|
|
27
|
+
HELPER_AUDIO_TAG,
|
|
28
|
+
HELPER_AUTO_DISCOVERY_LINK_TAG,
|
|
29
|
+
HELPER_AUTO_INCLUDE_NONCE,
|
|
30
|
+
HELPER_AUTO_INCLUDE_NONCE_FOR_SCRIPTS,
|
|
31
|
+
HELPER_AUTO_INCLUDE_NONCE_FOR_STYLES,
|
|
32
|
+
HELPER_FAVICON_LINK_TAG,
|
|
33
|
+
HELPER_IMAGE_DECODING,
|
|
34
|
+
HELPER_IMAGE_LOADING,
|
|
35
|
+
HELPER_IMAGE_TAG,
|
|
36
|
+
HELPER_JAVASCRIPT_INCLUDE_TAG,
|
|
37
|
+
HELPER_PICTURE_TAG,
|
|
38
|
+
HELPER_PRELOAD_LINK_TAG,
|
|
39
|
+
HELPER_PRELOAD_LINKS_HEADER,
|
|
40
|
+
HELPER_STYLESHEET_LINK_TAG,
|
|
41
|
+
HELPER_VIDEO_TAG,
|
|
42
|
+
HELPER_ASSET_PATH,
|
|
43
|
+
HELPER_ASSET_URL,
|
|
44
|
+
HELPER_AUDIO_PATH,
|
|
45
|
+
HELPER_AUDIO_URL,
|
|
46
|
+
HELPER_COMPUTE_ASSET_EXTNAME,
|
|
47
|
+
HELPER_COMPUTE_ASSET_HOST,
|
|
48
|
+
HELPER_COMPUTE_ASSET_PATH,
|
|
49
|
+
HELPER_FONT_PATH,
|
|
50
|
+
HELPER_FONT_URL,
|
|
51
|
+
HELPER_IMAGE_PATH,
|
|
52
|
+
HELPER_IMAGE_URL,
|
|
53
|
+
HELPER_JAVASCRIPT_PATH,
|
|
54
|
+
HELPER_JAVASCRIPT_URL,
|
|
55
|
+
HELPER_PUBLIC_COMPUTE_ASSET_PATH,
|
|
56
|
+
HELPER_STYLESHEET_PATH,
|
|
57
|
+
HELPER_STYLESHEET_URL,
|
|
58
|
+
HELPER_VIDEO_PATH,
|
|
59
|
+
HELPER_VIDEO_URL,
|
|
60
|
+
HELPER_ATOM_FEED,
|
|
61
|
+
HELPER_CACHE,
|
|
62
|
+
HELPER_CACHE_FRAGMENT_NAME,
|
|
63
|
+
HELPER_CACHE_IF,
|
|
64
|
+
HELPER_CACHE_UNLESS,
|
|
65
|
+
HELPER_CACHING_P,
|
|
66
|
+
HELPER_DIGEST_PATH_FROM_TEMPLATE,
|
|
67
|
+
HELPER_FRAGMENT_FOR,
|
|
68
|
+
HELPER_FRAGMENT_NAME_WITH_DIGEST,
|
|
69
|
+
HELPER_READ_FRAGMENT_FOR,
|
|
70
|
+
HELPER_UNCACHEABLE_BANG,
|
|
71
|
+
HELPER_WRITE_FRAGMENT_FOR,
|
|
72
|
+
HELPER_CAPTURE,
|
|
73
|
+
HELPER_CONTENT_FOR,
|
|
74
|
+
HELPER_CONTENT_FOR_P,
|
|
75
|
+
HELPER_PROVIDE,
|
|
76
|
+
HELPER_WITH_OUTPUT_BUFFER,
|
|
77
|
+
HELPER_PREPEND_CONTENT_EXFILTRATION_PREVENTION,
|
|
78
|
+
HELPER_PREVENT_CONTENT_EXFILTRATION,
|
|
79
|
+
HELPER_ACTION_NAME,
|
|
80
|
+
HELPER_ASSIGN_CONTROLLER,
|
|
81
|
+
HELPER_CONTROLLER,
|
|
82
|
+
HELPER_CONTROLLER_NAME,
|
|
83
|
+
HELPER_CONTROLLER_PATH,
|
|
84
|
+
HELPER_COOKIES,
|
|
85
|
+
HELPER_FLASH,
|
|
86
|
+
HELPER_HEADERS,
|
|
87
|
+
HELPER_LOGGER,
|
|
88
|
+
HELPER_PARAMS,
|
|
89
|
+
HELPER_REQUEST,
|
|
90
|
+
HELPER_REQUEST_FORGERY_PROTECTION_TOKEN,
|
|
91
|
+
HELPER_RESPONSE,
|
|
92
|
+
HELPER_SESSION,
|
|
93
|
+
HELPER_CSP_META_TAG,
|
|
94
|
+
HELPER_CSRF_META_TAGS,
|
|
95
|
+
HELPER_DATE_SELECT,
|
|
96
|
+
HELPER_DATETIME_SELECT,
|
|
97
|
+
HELPER_DISTANCE_OF_TIME_IN_WORDS,
|
|
98
|
+
HELPER_RELATIVE_TIME_IN_WORDS,
|
|
99
|
+
HELPER_SELECT_DATE,
|
|
100
|
+
HELPER_SELECT_DATETIME,
|
|
101
|
+
HELPER_SELECT_DAY,
|
|
102
|
+
HELPER_SELECT_HOUR,
|
|
103
|
+
HELPER_SELECT_MINUTE,
|
|
104
|
+
HELPER_SELECT_MONTH,
|
|
105
|
+
HELPER_SELECT_SECOND,
|
|
106
|
+
HELPER_SELECT_TIME,
|
|
107
|
+
HELPER_SELECT_YEAR,
|
|
108
|
+
HELPER_TIME_AGO_IN_WORDS,
|
|
109
|
+
HELPER_TIME_SELECT,
|
|
110
|
+
HELPER_TIME_TAG,
|
|
111
|
+
HELPER_DEBUG,
|
|
112
|
+
HELPER_APPLY_FORM_FOR_OPTIONS_BANG,
|
|
113
|
+
HELPER_BUTTON,
|
|
114
|
+
HELPER_CHECKBOX,
|
|
115
|
+
HELPER_COLOR_FIELD,
|
|
116
|
+
HELPER_DATE_FIELD,
|
|
117
|
+
HELPER_DATETIME_FIELD,
|
|
118
|
+
HELPER_EMAIL_FIELD,
|
|
119
|
+
HELPER_EMITTED_HIDDEN_ID_P,
|
|
120
|
+
HELPER_FIELDS,
|
|
121
|
+
HELPER_FIELDS_FOR,
|
|
122
|
+
HELPER_FILE_FIELD,
|
|
123
|
+
HELPER_FORM_FOR,
|
|
124
|
+
HELPER_FORM_WITH,
|
|
125
|
+
HELPER_FORM_WITH_GENERATES_IDS,
|
|
126
|
+
HELPER_FORM_WITH_GENERATES_REMOTE_FORMS,
|
|
127
|
+
HELPER_HIDDEN_FIELD,
|
|
128
|
+
HELPER_LABEL,
|
|
129
|
+
HELPER_MONTH_FIELD,
|
|
130
|
+
HELPER_MULTIPART,
|
|
131
|
+
HELPER_MULTIPLE_FILE_FIELD_INCLUDE_HIDDEN,
|
|
132
|
+
HELPER_NUMBER_FIELD,
|
|
133
|
+
HELPER_PASSWORD_FIELD,
|
|
134
|
+
HELPER_RADIO_BUTTON,
|
|
135
|
+
HELPER_RANGE_FIELD,
|
|
136
|
+
HELPER_SEARCH_FIELD,
|
|
137
|
+
HELPER_SUBMIT,
|
|
138
|
+
HELPER_TELEPHONE_FIELD,
|
|
139
|
+
HELPER_TEXT_FIELD,
|
|
140
|
+
HELPER_TEXTAREA,
|
|
141
|
+
HELPER_TIME_FIELD,
|
|
142
|
+
HELPER_URL_FIELD,
|
|
143
|
+
HELPER_WEEK_FIELD,
|
|
144
|
+
HELPER_COLLECTION_CHECKBOXES,
|
|
145
|
+
HELPER_COLLECTION_RADIO_BUTTONS,
|
|
146
|
+
HELPER_COLLECTION_SELECT,
|
|
147
|
+
HELPER_GROUPED_COLLECTION_SELECT,
|
|
148
|
+
HELPER_GROUPED_OPTIONS_FOR_SELECT,
|
|
149
|
+
HELPER_OPTION_GROUPS_FROM_COLLECTION_FOR_SELECT,
|
|
150
|
+
HELPER_OPTIONS_FOR_SELECT,
|
|
151
|
+
HELPER_OPTIONS_FROM_COLLECTION_FOR_SELECT,
|
|
152
|
+
HELPER_SELECT,
|
|
153
|
+
HELPER_TIME_ZONE_OPTIONS_FOR_SELECT,
|
|
154
|
+
HELPER_TIME_ZONE_SELECT,
|
|
155
|
+
HELPER_WEEKDAY_OPTIONS_FOR_SELECT,
|
|
156
|
+
HELPER_WEEKDAY_SELECT,
|
|
157
|
+
HELPER_BUTTON_TAG,
|
|
158
|
+
HELPER_CHECKBOX_TAG,
|
|
159
|
+
HELPER_COLOR_FIELD_TAG,
|
|
160
|
+
HELPER_DATE_FIELD_TAG,
|
|
161
|
+
HELPER_DATETIME_FIELD_TAG,
|
|
162
|
+
HELPER_DEFAULT_ENFORCE_UTF8,
|
|
163
|
+
HELPER_EMAIL_FIELD_TAG,
|
|
164
|
+
HELPER_EMBED_AUTHENTICITY_TOKEN_IN_REMOTE_FORMS,
|
|
165
|
+
HELPER_FIELD_ID,
|
|
166
|
+
HELPER_FIELD_NAME,
|
|
167
|
+
HELPER_FIELD_SET_TAG,
|
|
168
|
+
HELPER_FILE_FIELD_TAG,
|
|
169
|
+
HELPER_FORM_TAG,
|
|
170
|
+
HELPER_HIDDEN_FIELD_TAG,
|
|
171
|
+
HELPER_IMAGE_SUBMIT_TAG,
|
|
172
|
+
HELPER_LABEL_TAG,
|
|
173
|
+
HELPER_MONTH_FIELD_TAG,
|
|
174
|
+
HELPER_NUMBER_FIELD_TAG,
|
|
175
|
+
HELPER_PASSWORD_FIELD_TAG,
|
|
176
|
+
HELPER_RADIO_BUTTON_TAG,
|
|
177
|
+
HELPER_RANGE_FIELD_TAG,
|
|
178
|
+
HELPER_SEARCH_FIELD_TAG,
|
|
179
|
+
HELPER_SELECT_TAG,
|
|
180
|
+
HELPER_SUBMIT_TAG,
|
|
181
|
+
HELPER_TELEPHONE_FIELD_TAG,
|
|
182
|
+
HELPER_TEXT_FIELD_TAG,
|
|
183
|
+
HELPER_TEXTAREA_TAG,
|
|
184
|
+
HELPER_TIME_FIELD_TAG,
|
|
185
|
+
HELPER_URL_FIELD_TAG,
|
|
186
|
+
HELPER_UTF8_ENFORCER_TAG,
|
|
187
|
+
HELPER_WEEK_FIELD_TAG,
|
|
188
|
+
HELPER_ESCAPE_JAVASCRIPT,
|
|
189
|
+
HELPER_JAVASCRIPT_CDATA_SECTION,
|
|
190
|
+
HELPER_JAVASCRIPT_TAG,
|
|
191
|
+
HELPER_NUMBER_TO_CURRENCY,
|
|
192
|
+
HELPER_NUMBER_TO_HUMAN,
|
|
193
|
+
HELPER_NUMBER_TO_HUMAN_SIZE,
|
|
194
|
+
HELPER_NUMBER_TO_PERCENTAGE,
|
|
195
|
+
HELPER_NUMBER_TO_PHONE,
|
|
196
|
+
HELPER_NUMBER_WITH_DELIMITER,
|
|
197
|
+
HELPER_NUMBER_WITH_PRECISION,
|
|
198
|
+
HELPER_RAW,
|
|
199
|
+
HELPER_SAFE_JOIN,
|
|
200
|
+
HELPER_TO_SENTENCE,
|
|
201
|
+
HELPER_DOM_CLASS,
|
|
202
|
+
HELPER_DOM_ID,
|
|
203
|
+
HELPER_DOM_TARGET,
|
|
204
|
+
HELPER_MODEL_NAME_FROM_RECORD_OR_CLASS,
|
|
205
|
+
HELPER_RENDER,
|
|
206
|
+
HELPER_SANITIZE,
|
|
207
|
+
HELPER_SANITIZE_CSS,
|
|
208
|
+
HELPER_SANITIZER_VENDOR,
|
|
209
|
+
HELPER_STRIP_LINKS,
|
|
210
|
+
HELPER_STRIP_TAGS,
|
|
211
|
+
HELPER_CDATA_SECTION,
|
|
212
|
+
HELPER_CONTENT_TAG,
|
|
213
|
+
HELPER_ESCAPE_ONCE,
|
|
214
|
+
HELPER_TAG,
|
|
215
|
+
HELPER_TOKEN_LIST,
|
|
216
|
+
HELPER_CONCAT,
|
|
217
|
+
HELPER_CURRENT_CYCLE,
|
|
218
|
+
HELPER_CYCLE,
|
|
219
|
+
HELPER_EXCERPT,
|
|
220
|
+
HELPER_HIGHLIGHT,
|
|
221
|
+
HELPER_PLURALIZE,
|
|
222
|
+
HELPER_RESET_CYCLE,
|
|
223
|
+
HELPER_SAFE_CONCAT,
|
|
224
|
+
HELPER_SIMPLE_FORMAT,
|
|
225
|
+
HELPER_TRUNCATE,
|
|
226
|
+
HELPER_WORD_WRAP,
|
|
227
|
+
HELPER_DEBUG_MISSING_TRANSLATION,
|
|
228
|
+
HELPER_LOCALIZE,
|
|
229
|
+
HELPER_TRANSLATE,
|
|
230
|
+
HELPER_BUTTON_TO,
|
|
231
|
+
HELPER_BUTTON_TO_GENERATES_BUTTON_TAG,
|
|
232
|
+
HELPER_CURRENT_PAGE_P,
|
|
233
|
+
HELPER_LINK_TO,
|
|
234
|
+
HELPER_LINK_TO_IF,
|
|
235
|
+
HELPER_LINK_TO_UNLESS,
|
|
236
|
+
HELPER_LINK_TO_UNLESS_CURRENT,
|
|
237
|
+
HELPER_MAIL_TO,
|
|
238
|
+
HELPER_PHONE_TO,
|
|
239
|
+
HELPER_SMS_TO,
|
|
240
|
+
HELPER_URL_FOR,
|
|
241
|
+
HELPER_TURBO_EXEMPTS_PAGE_FROM_CACHE,
|
|
242
|
+
HELPER_TURBO_EXEMPTS_PAGE_FROM_CACHE_TAG,
|
|
243
|
+
HELPER_TURBO_EXEMPTS_PAGE_FROM_PREVIEW,
|
|
244
|
+
HELPER_TURBO_EXEMPTS_PAGE_FROM_PREVIEW_TAG,
|
|
245
|
+
HELPER_TURBO_PAGE_REQUIRES_RELOAD,
|
|
246
|
+
HELPER_TURBO_PAGE_REQUIRES_RELOAD_TAG,
|
|
247
|
+
HELPER_TURBO_REFRESH_METHOD_TAG,
|
|
248
|
+
HELPER_TURBO_REFRESH_SCROLL_TAG,
|
|
249
|
+
HELPER_TURBO_REFRESHES_WITH,
|
|
250
|
+
HELPER_TURBO_FRAME_TAG,
|
|
251
|
+
HELPER_TURBO_INCLUDE_TAGS,
|
|
252
|
+
HELPER_TURBO_STREAM_ACTION_TAG,
|
|
253
|
+
HELPER_TURBO_STREAM_REFRESH_TAG,
|
|
254
|
+
HELPER_TURBO_STREAM,
|
|
255
|
+
HELPER_TURBO_STREAM_FROM,
|
|
256
|
+
} helper_type_T;
|
|
257
|
+
|
|
258
|
+
#define HELPER_COUNT 243
|
|
259
|
+
|
|
260
|
+
typedef enum {
|
|
261
|
+
HELPER_DETECT_CALL_NAME,
|
|
262
|
+
HELPER_DETECT_RECEIVER_CALL,
|
|
263
|
+
} helper_detect_style_T;
|
|
264
|
+
|
|
265
|
+
typedef struct {
|
|
266
|
+
const char* name;
|
|
267
|
+
const char* type;
|
|
268
|
+
const char* description;
|
|
269
|
+
} helper_argument_T;
|
|
270
|
+
|
|
271
|
+
typedef struct {
|
|
272
|
+
const char* name;
|
|
273
|
+
const char* type;
|
|
274
|
+
const char* maps_to;
|
|
275
|
+
const char* description;
|
|
276
|
+
} helper_option_T;
|
|
277
|
+
|
|
278
|
+
typedef struct {
|
|
279
|
+
const char* name;
|
|
280
|
+
const char* source;
|
|
281
|
+
const char* source_with_block;
|
|
282
|
+
const char* wrapper;
|
|
283
|
+
} helper_implicit_attribute_T;
|
|
284
|
+
|
|
285
|
+
typedef enum {
|
|
286
|
+
HELPER_OUTPUT_HTML,
|
|
287
|
+
HELPER_OUTPUT_TEXT,
|
|
288
|
+
HELPER_OUTPUT_URL,
|
|
289
|
+
HELPER_OUTPUT_BOOLEAN,
|
|
290
|
+
HELPER_OUTPUT_VOID,
|
|
291
|
+
HELPER_OUTPUT_OBJECT,
|
|
292
|
+
} helper_output_T;
|
|
293
|
+
|
|
294
|
+
typedef struct {
|
|
295
|
+
helper_type_T type;
|
|
296
|
+
const char* name;
|
|
297
|
+
size_t name_length;
|
|
298
|
+
hb_string_T source;
|
|
299
|
+
const char* gem;
|
|
300
|
+
helper_output_T output;
|
|
301
|
+
const char* visibility;
|
|
302
|
+
const char* tag_name;
|
|
303
|
+
bool is_void;
|
|
304
|
+
bool supports_block;
|
|
305
|
+
bool preferred_for_tag;
|
|
306
|
+
bool supported;
|
|
307
|
+
helper_detect_style_T detect_style;
|
|
308
|
+
const char* description;
|
|
309
|
+
const char* signature;
|
|
310
|
+
const char* documentation_url;
|
|
311
|
+
const helper_implicit_attribute_T* implicit_attribute;
|
|
312
|
+
const helper_argument_T* arguments;
|
|
313
|
+
size_t arguments_count;
|
|
314
|
+
const helper_option_T* options;
|
|
315
|
+
size_t options_count;
|
|
316
|
+
} helper_registry_entry_T;
|
|
317
|
+
|
|
318
|
+
const helper_registry_entry_T* helper_registry_get(helper_type_T type);
|
|
319
|
+
const helper_registry_entry_T* helper_registry_find_by_name(const char* name, size_t length);
|
|
320
|
+
const helper_registry_entry_T* helper_registry_find_by_source(const char* source);
|
|
321
|
+
const helper_registry_entry_T* helper_registry_find_preferred_for_tag(const char* tag_name);
|
|
322
|
+
const helper_registry_entry_T* helper_registry_entries(void);
|
|
323
|
+
size_t helper_registry_count(void);
|
|
324
|
+
|
|
325
|
+
#endif
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#ifndef HERB_ANALYZE_TERNARY_CONDITIONALS_H
|
|
2
|
+
#define HERB_ANALYZE_TERNARY_CONDITIONALS_H
|
|
3
|
+
|
|
4
|
+
#include "../ast/ast_nodes.h"
|
|
5
|
+
#include "analyze.h"
|
|
6
|
+
|
|
7
|
+
AST_NODE_T* transform_ternary_expression(
|
|
8
|
+
AST_ERB_CONTENT_NODE_T* erb_node,
|
|
9
|
+
pm_if_node_t* if_node,
|
|
10
|
+
hb_allocator_T* allocator
|
|
11
|
+
);
|
|
12
|
+
|
|
13
|
+
bool transform_ternary_conditional_nodes(const AST_NODE_T* node, void* data);
|
|
14
|
+
|
|
15
|
+
#endif
|
data/src/include/parser/parser.h
CHANGED
data/src/include/version.h
CHANGED
data/src/parser.c
CHANGED
|
@@ -39,6 +39,7 @@ const parser_options_T HERB_DEFAULT_PARSER_OPTIONS = { .track_whitespace = false
|
|
|
39
39
|
.analyze = true,
|
|
40
40
|
.strict = true,
|
|
41
41
|
.action_view_helpers = false,
|
|
42
|
+
.transform_conditionals = false,
|
|
42
43
|
.render_nodes = false,
|
|
43
44
|
.strict_locals = false,
|
|
44
45
|
.prism_nodes_deep = false,
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
package org.herb.ast;
|
|
2
|
+
|
|
3
|
+
import java.util.Collections;
|
|
4
|
+
import java.util.LinkedHashMap;
|
|
5
|
+
import java.util.List;
|
|
6
|
+
import java.util.Map;
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Type enum for all supported Action View tag helpers.
|
|
10
|
+
*/
|
|
11
|
+
public enum HelperType {
|
|
12
|
+
<%- helpers.each_with_index do |helper, index| -%>
|
|
13
|
+
<%= helper.constant_name %>("<%= helper.name %>")<%= index < helpers.size - 1 ? "," : ";" %>
|
|
14
|
+
<%- end -%>
|
|
15
|
+
|
|
16
|
+
private final String name;
|
|
17
|
+
|
|
18
|
+
HelperType(String name) {
|
|
19
|
+
this.name = name;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
public String getName() {
|
|
23
|
+
return name;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
public static HelperType fromName(String name) {
|
|
27
|
+
for (HelperType type : values()) {
|
|
28
|
+
if (type.name.equals(name)) {
|
|
29
|
+
return type;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Argument metadata for a tag helper.
|
|
38
|
+
*/
|
|
39
|
+
class HelperArgument {
|
|
40
|
+
private final String name;
|
|
41
|
+
private final int position;
|
|
42
|
+
private final String type;
|
|
43
|
+
private final boolean optional;
|
|
44
|
+
private final String defaultValue;
|
|
45
|
+
private final boolean splat;
|
|
46
|
+
private final String description;
|
|
47
|
+
|
|
48
|
+
HelperArgument(String name, int position, String type, boolean optional, String defaultValue, boolean splat, String description) {
|
|
49
|
+
this.name = name;
|
|
50
|
+
this.position = position;
|
|
51
|
+
this.type = type;
|
|
52
|
+
this.optional = optional;
|
|
53
|
+
this.defaultValue = defaultValue;
|
|
54
|
+
this.splat = splat;
|
|
55
|
+
this.description = description;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
public String getName() { return name; }
|
|
59
|
+
public int getPosition() { return position; }
|
|
60
|
+
public String getType() { return type; }
|
|
61
|
+
public boolean isOptional() { return optional; }
|
|
62
|
+
public String getDefaultValue() { return defaultValue; }
|
|
63
|
+
public boolean isSplat() { return splat; }
|
|
64
|
+
public String getDescription() { return description; }
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Option metadata for a tag helper.
|
|
69
|
+
*/
|
|
70
|
+
class HelperOption {
|
|
71
|
+
private final String name;
|
|
72
|
+
private final String type;
|
|
73
|
+
private final String mapsTo;
|
|
74
|
+
private final String description;
|
|
75
|
+
|
|
76
|
+
HelperOption(String name, String type, String mapsTo, String description) {
|
|
77
|
+
this.name = name;
|
|
78
|
+
this.type = type;
|
|
79
|
+
this.mapsTo = mapsTo;
|
|
80
|
+
this.description = description;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
public String getName() { return name; }
|
|
84
|
+
public String getType() { return type; }
|
|
85
|
+
public String getMapsTo() { return mapsTo; }
|
|
86
|
+
public String getDescription() { return description; }
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Implicit attribute metadata for a tag helper.
|
|
91
|
+
*/
|
|
92
|
+
class HelperImplicitAttribute {
|
|
93
|
+
private final String name;
|
|
94
|
+
private final String source;
|
|
95
|
+
private final String sourceWithBlock;
|
|
96
|
+
private final String wrapper;
|
|
97
|
+
|
|
98
|
+
HelperImplicitAttribute(String name, String source, String sourceWithBlock, String wrapper) {
|
|
99
|
+
this.name = name;
|
|
100
|
+
this.source = source;
|
|
101
|
+
this.sourceWithBlock = sourceWithBlock;
|
|
102
|
+
this.wrapper = wrapper;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
public String getName() { return name; }
|
|
106
|
+
public String getSource() { return source; }
|
|
107
|
+
public String getSourceWithBlock() { return sourceWithBlock; }
|
|
108
|
+
public String getWrapper() { return wrapper; }
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Registry entry containing all metadata for a single tag helper.
|
|
113
|
+
*/
|
|
114
|
+
class HelperEntry {
|
|
115
|
+
private final String name;
|
|
116
|
+
private final HelperType type;
|
|
117
|
+
private final String source;
|
|
118
|
+
private final String gem;
|
|
119
|
+
private final String output;
|
|
120
|
+
private final String visibility;
|
|
121
|
+
private final String tagName;
|
|
122
|
+
private final boolean isVoid;
|
|
123
|
+
private final boolean supportsBlock;
|
|
124
|
+
private final boolean preferredForTag;
|
|
125
|
+
private final boolean supported;
|
|
126
|
+
private final String detectStyle;
|
|
127
|
+
private final String description;
|
|
128
|
+
private final String signature;
|
|
129
|
+
private final String documentationUrl;
|
|
130
|
+
private final HelperImplicitAttribute implicitAttribute;
|
|
131
|
+
private final List<HelperArgument> arguments;
|
|
132
|
+
private final List<HelperOption> options;
|
|
133
|
+
private final List<String> specialBehaviors;
|
|
134
|
+
private final List<String> aliases;
|
|
135
|
+
|
|
136
|
+
HelperEntry(
|
|
137
|
+
String name, HelperType type, String source, String gem, String output, String visibility, String tagName,
|
|
138
|
+
boolean isVoid, boolean supportsBlock, boolean preferredForTag, boolean supported, String detectStyle, String description,
|
|
139
|
+
String signature, String documentationUrl, HelperImplicitAttribute implicitAttribute,
|
|
140
|
+
List<HelperArgument> arguments, List<HelperOption> options, List<String> specialBehaviors, List<String> aliases
|
|
141
|
+
) {
|
|
142
|
+
this.name = name;
|
|
143
|
+
this.type = type;
|
|
144
|
+
this.source = source;
|
|
145
|
+
this.gem = gem;
|
|
146
|
+
this.output = output;
|
|
147
|
+
this.visibility = visibility;
|
|
148
|
+
this.tagName = tagName;
|
|
149
|
+
this.isVoid = isVoid;
|
|
150
|
+
this.supportsBlock = supportsBlock;
|
|
151
|
+
this.preferredForTag = preferredForTag;
|
|
152
|
+
this.supported = supported;
|
|
153
|
+
this.detectStyle = detectStyle;
|
|
154
|
+
this.description = description;
|
|
155
|
+
this.signature = signature;
|
|
156
|
+
this.documentationUrl = documentationUrl;
|
|
157
|
+
this.implicitAttribute = implicitAttribute;
|
|
158
|
+
this.arguments = arguments;
|
|
159
|
+
this.options = options;
|
|
160
|
+
this.specialBehaviors = specialBehaviors;
|
|
161
|
+
this.aliases = aliases;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
public String getName() { return name; }
|
|
165
|
+
public HelperType getType() { return type; }
|
|
166
|
+
public String getSource() { return source; }
|
|
167
|
+
public String getGem() { return gem; }
|
|
168
|
+
public String getOutput() { return output; }
|
|
169
|
+
public String getVisibility() { return visibility; }
|
|
170
|
+
public String getTagName() { return tagName; }
|
|
171
|
+
public boolean isVoid() { return isVoid; }
|
|
172
|
+
public boolean supportsBlock() { return supportsBlock; }
|
|
173
|
+
public boolean isPreferredForTag() { return preferredForTag; }
|
|
174
|
+
public boolean isSupported() { return supported; }
|
|
175
|
+
public String getDetectStyle() { return detectStyle; }
|
|
176
|
+
public String getDescription() { return description; }
|
|
177
|
+
public String getSignature() { return signature; }
|
|
178
|
+
public String getDocumentationUrl() { return documentationUrl; }
|
|
179
|
+
public HelperImplicitAttribute getImplicitAttribute() { return implicitAttribute; }
|
|
180
|
+
public List<HelperArgument> getArguments() { return arguments; }
|
|
181
|
+
public List<HelperOption> getOptions() { return options; }
|
|
182
|
+
public List<String> getSpecialBehaviors() { return specialBehaviors; }
|
|
183
|
+
public List<String> getAliases() { return aliases; }
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* Global registry of all supported Action View tag helpers.
|
|
188
|
+
*
|
|
189
|
+
* <p>Usage:
|
|
190
|
+
* <pre>
|
|
191
|
+
* HelperEntry entry = HelperRegistry.get("link_to");
|
|
192
|
+
* entry.supportsBlock(); // true
|
|
193
|
+
* entry.getTagName(); // "a"
|
|
194
|
+
* </pre>
|
|
195
|
+
*/
|
|
196
|
+
public final class HelperRegistry {
|
|
197
|
+
private static final Map<String, HelperEntry> BY_NAME;
|
|
198
|
+
private static final Map<String, HelperEntry> BY_SOURCE;
|
|
199
|
+
|
|
200
|
+
static {
|
|
201
|
+
Map<String, HelperEntry> byName = new LinkedHashMap<>();
|
|
202
|
+
Map<String, HelperEntry> bySource = new LinkedHashMap<>();
|
|
203
|
+
|
|
204
|
+
<%- helpers.each do |helper| -%>
|
|
205
|
+
{
|
|
206
|
+
HelperEntry entry = new HelperEntry(
|
|
207
|
+
"<%= helper.name %>",
|
|
208
|
+
HelperType.<%= helper.constant_name %>,
|
|
209
|
+
"<%= helper.source %>",
|
|
210
|
+
"<%= helper.gem %>",
|
|
211
|
+
"<%= helper.output %>",
|
|
212
|
+
"<%= helper.visibility %>",
|
|
213
|
+
<%= helper.tag_name ? "\"#{helper.tag_name}\"" : "null" %>,
|
|
214
|
+
<%= helper.void? %>,
|
|
215
|
+
<%= helper.supports_block %>,
|
|
216
|
+
<%= helper.preferred_for_tag %>,
|
|
217
|
+
<%= helper.supported %>,
|
|
218
|
+
"<%= helper.detect_style || "call_name" %>",
|
|
219
|
+
"<%= helper.escaped_description %>",
|
|
220
|
+
"<%= helper.escaped_signature %>",
|
|
221
|
+
"<%= helper.documentation_url %>",
|
|
222
|
+
<%- if helper.implicit_attribute? -%>
|
|
223
|
+
new HelperImplicitAttribute("<%= helper.implicit_attribute.name %>", "<%= helper.implicit_attribute.source %>", <%= helper.implicit_attribute.source_with_block ? "\"#{helper.implicit_attribute.source_with_block}\"" : "null" %>, "<%= helper.implicit_attribute.wrapper %>"),
|
|
224
|
+
<%- else -%>
|
|
225
|
+
null,
|
|
226
|
+
<%- end -%>
|
|
227
|
+
List.of(<%= helper.arguments.map { |arg| "new HelperArgument(\"#{arg.name}\", #{arg.position}, \"#{arg.type_display}\", #{arg.optional}, #{arg.default ? "\"#{arg.escaped_default}\"" : "null"}, #{arg.splat}, \"#{arg.escaped_description}\")" }.join(", ") %>),
|
|
228
|
+
List.of(<%= helper.options.map { |opt| "new HelperOption(\"#{opt.name}\", \"#{opt.type_display}\", #{opt.maps_to ? "\"#{opt.maps_to}\"" : "null"}, \"#{opt.escaped_description}\")" }.join(", ") %>),
|
|
229
|
+
List.of(<%= helper.special_behaviors.map { |b| "\"#{b}\"" }.join(", ") %>),
|
|
230
|
+
List.of(<%= helper.aliases.map { |a| "\"#{a}\"" }.join(", ") %>)
|
|
231
|
+
);
|
|
232
|
+
byName.put("<%= helper.name %>", entry);
|
|
233
|
+
bySource.put("<%= helper.source %>", entry);
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
<%- end -%>
|
|
237
|
+
BY_NAME = Collections.unmodifiableMap(byName);
|
|
238
|
+
BY_SOURCE = Collections.unmodifiableMap(bySource);
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
private HelperRegistry() {}
|
|
242
|
+
|
|
243
|
+
public static HelperEntry get(String name) {
|
|
244
|
+
return BY_NAME.get(name);
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
public static HelperEntry findBySource(String source) {
|
|
248
|
+
return BY_SOURCE.get(source);
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
public static List<HelperEntry> entries() {
|
|
252
|
+
return List.copyOf(BY_NAME.values());
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
public static int count() {
|
|
256
|
+
return BY_NAME.size();
|
|
257
|
+
}
|
|
258
|
+
}
|