@herb-tools/rewriter 0.9.0 → 0.9.1

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.
package/dist/index.cjs CHANGED
@@ -202,7 +202,7 @@ class Token {
202
202
  }
203
203
 
204
204
  // NOTE: This file is generated by the templates/template.rb script and should not
205
- // be modified manually. See /Users/marcoroth/Development/herb-release-0.9.0/templates/javascript/packages/core/src/errors.ts.erb
205
+ // be modified manually. See /Users/marcoroth/Development/herb-release-0.9.1/templates/javascript/packages/core/src/errors.ts.erb
206
206
  class HerbError {
207
207
  type;
208
208
  message;
@@ -1203,6 +1203,279 @@ class NestedERBTagError extends HerbError {
1203
1203
  return output;
1204
1204
  }
1205
1205
  }
1206
+ class RenderAmbiguousLocalsError extends HerbError {
1207
+ partial;
1208
+ static from(data) {
1209
+ return new RenderAmbiguousLocalsError({
1210
+ type: data.type,
1211
+ message: data.message,
1212
+ location: Location.from(data.location),
1213
+ partial: data.partial,
1214
+ });
1215
+ }
1216
+ constructor(props) {
1217
+ super(props.type, props.message, props.location);
1218
+ this.partial = props.partial;
1219
+ }
1220
+ toJSON() {
1221
+ return {
1222
+ ...super.toJSON(),
1223
+ type: "RENDER_AMBIGUOUS_LOCALS_ERROR",
1224
+ partial: this.partial,
1225
+ };
1226
+ }
1227
+ toMonacoDiagnostic() {
1228
+ return {
1229
+ line: this.location.start.line,
1230
+ column: this.location.start.column,
1231
+ endLine: this.location.end.line,
1232
+ endColumn: this.location.end.column,
1233
+ message: this.message,
1234
+ severity: 'error'
1235
+ };
1236
+ }
1237
+ treeInspect() {
1238
+ let output = "";
1239
+ output += `@ RenderAmbiguousLocalsError ${this.location.treeInspectWithLabel()}\n`;
1240
+ output += `├── message: "${this.message}"\n`;
1241
+ output += `└── partial: ${JSON.stringify(this.partial)}\n`;
1242
+ return output;
1243
+ }
1244
+ }
1245
+ class RenderMissingLocalsError extends HerbError {
1246
+ partial;
1247
+ keywords;
1248
+ static from(data) {
1249
+ return new RenderMissingLocalsError({
1250
+ type: data.type,
1251
+ message: data.message,
1252
+ location: Location.from(data.location),
1253
+ partial: data.partial,
1254
+ keywords: data.keywords,
1255
+ });
1256
+ }
1257
+ constructor(props) {
1258
+ super(props.type, props.message, props.location);
1259
+ this.partial = props.partial;
1260
+ this.keywords = props.keywords;
1261
+ }
1262
+ toJSON() {
1263
+ return {
1264
+ ...super.toJSON(),
1265
+ type: "RENDER_MISSING_LOCALS_ERROR",
1266
+ partial: this.partial,
1267
+ keywords: this.keywords,
1268
+ };
1269
+ }
1270
+ toMonacoDiagnostic() {
1271
+ return {
1272
+ line: this.location.start.line,
1273
+ column: this.location.start.column,
1274
+ endLine: this.location.end.line,
1275
+ endColumn: this.location.end.column,
1276
+ message: this.message,
1277
+ severity: 'error'
1278
+ };
1279
+ }
1280
+ treeInspect() {
1281
+ let output = "";
1282
+ output += `@ RenderMissingLocalsError ${this.location.treeInspectWithLabel()}\n`;
1283
+ output += `├── message: "${this.message}"\n`;
1284
+ output += `├── partial: ${JSON.stringify(this.partial)}\n`;
1285
+ output += `└── keywords: ${JSON.stringify(this.keywords)}\n`;
1286
+ return output;
1287
+ }
1288
+ }
1289
+ class RenderNoArgumentsError extends HerbError {
1290
+ static from(data) {
1291
+ return new RenderNoArgumentsError({
1292
+ type: data.type,
1293
+ message: data.message,
1294
+ location: Location.from(data.location),
1295
+ });
1296
+ }
1297
+ constructor(props) {
1298
+ super(props.type, props.message, props.location);
1299
+ }
1300
+ toJSON() {
1301
+ return {
1302
+ ...super.toJSON(),
1303
+ type: "RENDER_NO_ARGUMENTS_ERROR",
1304
+ };
1305
+ }
1306
+ toMonacoDiagnostic() {
1307
+ return {
1308
+ line: this.location.start.line,
1309
+ column: this.location.start.column,
1310
+ endLine: this.location.end.line,
1311
+ endColumn: this.location.end.column,
1312
+ message: this.message,
1313
+ severity: 'error'
1314
+ };
1315
+ }
1316
+ treeInspect() {
1317
+ let output = "";
1318
+ output += `@ RenderNoArgumentsError ${this.location.treeInspectWithLabel()}\n`;
1319
+ output += `└── message: "${this.message}"\n`;
1320
+ return output;
1321
+ }
1322
+ }
1323
+ class RenderConflictingPartialError extends HerbError {
1324
+ positional_partial;
1325
+ keyword_partial;
1326
+ static from(data) {
1327
+ return new RenderConflictingPartialError({
1328
+ type: data.type,
1329
+ message: data.message,
1330
+ location: Location.from(data.location),
1331
+ positional_partial: data.positional_partial,
1332
+ keyword_partial: data.keyword_partial,
1333
+ });
1334
+ }
1335
+ constructor(props) {
1336
+ super(props.type, props.message, props.location);
1337
+ this.positional_partial = props.positional_partial;
1338
+ this.keyword_partial = props.keyword_partial;
1339
+ }
1340
+ toJSON() {
1341
+ return {
1342
+ ...super.toJSON(),
1343
+ type: "RENDER_CONFLICTING_PARTIAL_ERROR",
1344
+ positional_partial: this.positional_partial,
1345
+ keyword_partial: this.keyword_partial,
1346
+ };
1347
+ }
1348
+ toMonacoDiagnostic() {
1349
+ return {
1350
+ line: this.location.start.line,
1351
+ column: this.location.start.column,
1352
+ endLine: this.location.end.line,
1353
+ endColumn: this.location.end.column,
1354
+ message: this.message,
1355
+ severity: 'error'
1356
+ };
1357
+ }
1358
+ treeInspect() {
1359
+ let output = "";
1360
+ output += `@ RenderConflictingPartialError ${this.location.treeInspectWithLabel()}\n`;
1361
+ output += `├── message: "${this.message}"\n`;
1362
+ output += `├── positional_partial: ${JSON.stringify(this.positional_partial)}\n`;
1363
+ output += `└── keyword_partial: ${JSON.stringify(this.keyword_partial)}\n`;
1364
+ return output;
1365
+ }
1366
+ }
1367
+ class RenderInvalidAsOptionError extends HerbError {
1368
+ as_value;
1369
+ static from(data) {
1370
+ return new RenderInvalidAsOptionError({
1371
+ type: data.type,
1372
+ message: data.message,
1373
+ location: Location.from(data.location),
1374
+ as_value: data.as_value,
1375
+ });
1376
+ }
1377
+ constructor(props) {
1378
+ super(props.type, props.message, props.location);
1379
+ this.as_value = props.as_value;
1380
+ }
1381
+ toJSON() {
1382
+ return {
1383
+ ...super.toJSON(),
1384
+ type: "RENDER_INVALID_AS_OPTION_ERROR",
1385
+ as_value: this.as_value,
1386
+ };
1387
+ }
1388
+ toMonacoDiagnostic() {
1389
+ return {
1390
+ line: this.location.start.line,
1391
+ column: this.location.start.column,
1392
+ endLine: this.location.end.line,
1393
+ endColumn: this.location.end.column,
1394
+ message: this.message,
1395
+ severity: 'error'
1396
+ };
1397
+ }
1398
+ treeInspect() {
1399
+ let output = "";
1400
+ output += `@ RenderInvalidAsOptionError ${this.location.treeInspectWithLabel()}\n`;
1401
+ output += `├── message: "${this.message}"\n`;
1402
+ output += `└── as_value: ${JSON.stringify(this.as_value)}\n`;
1403
+ return output;
1404
+ }
1405
+ }
1406
+ class RenderObjectAndCollectionError extends HerbError {
1407
+ static from(data) {
1408
+ return new RenderObjectAndCollectionError({
1409
+ type: data.type,
1410
+ message: data.message,
1411
+ location: Location.from(data.location),
1412
+ });
1413
+ }
1414
+ constructor(props) {
1415
+ super(props.type, props.message, props.location);
1416
+ }
1417
+ toJSON() {
1418
+ return {
1419
+ ...super.toJSON(),
1420
+ type: "RENDER_OBJECT_AND_COLLECTION_ERROR",
1421
+ };
1422
+ }
1423
+ toMonacoDiagnostic() {
1424
+ return {
1425
+ line: this.location.start.line,
1426
+ column: this.location.start.column,
1427
+ endLine: this.location.end.line,
1428
+ endColumn: this.location.end.column,
1429
+ message: this.message,
1430
+ severity: 'error'
1431
+ };
1432
+ }
1433
+ treeInspect() {
1434
+ let output = "";
1435
+ output += `@ RenderObjectAndCollectionError ${this.location.treeInspectWithLabel()}\n`;
1436
+ output += `└── message: "${this.message}"\n`;
1437
+ return output;
1438
+ }
1439
+ }
1440
+ class RenderLayoutWithoutBlockError extends HerbError {
1441
+ layout;
1442
+ static from(data) {
1443
+ return new RenderLayoutWithoutBlockError({
1444
+ type: data.type,
1445
+ message: data.message,
1446
+ location: Location.from(data.location),
1447
+ layout: data.layout,
1448
+ });
1449
+ }
1450
+ constructor(props) {
1451
+ super(props.type, props.message, props.location);
1452
+ this.layout = props.layout;
1453
+ }
1454
+ toJSON() {
1455
+ return {
1456
+ ...super.toJSON(),
1457
+ type: "RENDER_LAYOUT_WITHOUT_BLOCK_ERROR",
1458
+ layout: this.layout,
1459
+ };
1460
+ }
1461
+ toMonacoDiagnostic() {
1462
+ return {
1463
+ line: this.location.start.line,
1464
+ column: this.location.start.column,
1465
+ endLine: this.location.end.line,
1466
+ endColumn: this.location.end.column,
1467
+ message: this.message,
1468
+ severity: 'error'
1469
+ };
1470
+ }
1471
+ treeInspect() {
1472
+ let output = "";
1473
+ output += `@ RenderLayoutWithoutBlockError ${this.location.treeInspectWithLabel()}\n`;
1474
+ output += `├── message: "${this.message}"\n`;
1475
+ output += `└── layout: ${JSON.stringify(this.layout)}\n`;
1476
+ return output;
1477
+ }
1478
+ }
1206
1479
  function fromSerializedError(error) {
1207
1480
  switch (error.type) {
1208
1481
  case "UNEXPECTED_ERROR": return UnexpectedError.from(error);
@@ -1228,6 +1501,13 @@ function fromSerializedError(error) {
1228
1501
  case "UNCLOSED_ERB_TAG_ERROR": return UnclosedERBTagError.from(error);
1229
1502
  case "STRAY_ERB_CLOSING_TAG_ERROR": return StrayERBClosingTagError.from(error);
1230
1503
  case "NESTED_ERB_TAG_ERROR": return NestedERBTagError.from(error);
1504
+ case "RENDER_AMBIGUOUS_LOCALS_ERROR": return RenderAmbiguousLocalsError.from(error);
1505
+ case "RENDER_MISSING_LOCALS_ERROR": return RenderMissingLocalsError.from(error);
1506
+ case "RENDER_NO_ARGUMENTS_ERROR": return RenderNoArgumentsError.from(error);
1507
+ case "RENDER_CONFLICTING_PARTIAL_ERROR": return RenderConflictingPartialError.from(error);
1508
+ case "RENDER_INVALID_AS_OPTION_ERROR": return RenderInvalidAsOptionError.from(error);
1509
+ case "RENDER_OBJECT_AND_COLLECTION_ERROR": return RenderObjectAndCollectionError.from(error);
1510
+ case "RENDER_LAYOUT_WITHOUT_BLOCK_ERROR": return RenderLayoutWithoutBlockError.from(error);
1231
1511
  default:
1232
1512
  throw new Error(`Unknown node type: ${error.type}`);
1233
1513
  }
@@ -19816,7 +20096,7 @@ function deserializePrismNode(bytes, source) {
19816
20096
  }
19817
20097
 
19818
20098
  // NOTE: This file is generated by the templates/template.rb script and should not
19819
- // be modified manually. See /Users/marcoroth/Development/herb-release-0.9.0/templates/javascript/packages/core/src/nodes.ts.erb
20099
+ // be modified manually. See /Users/marcoroth/Development/herb-release-0.9.1/templates/javascript/packages/core/src/nodes.ts.erb
19820
20100
  class Node {
19821
20101
  type;
19822
20102
  location;
@@ -22360,6 +22640,225 @@ class ERBUnlessNode extends Node {
22360
22640
  return output;
22361
22641
  }
22362
22642
  }
22643
+ class RubyRenderLocalNode extends Node {
22644
+ name;
22645
+ value;
22646
+ static get type() {
22647
+ return "AST_RUBY_RENDER_LOCAL_NODE";
22648
+ }
22649
+ static from(data) {
22650
+ return new RubyRenderLocalNode({
22651
+ type: data.type,
22652
+ location: Location.from(data.location),
22653
+ errors: (data.errors || []).map(error => HerbError.from(error)),
22654
+ name: data.name ? Token.from(data.name) : null,
22655
+ value: data.value ? fromSerializedNode((data.value)) : null,
22656
+ });
22657
+ }
22658
+ constructor(props) {
22659
+ super(props.type, props.location, props.errors);
22660
+ this.name = props.name;
22661
+ this.value = props.value;
22662
+ }
22663
+ accept(visitor) {
22664
+ visitor.visitRubyRenderLocalNode(this);
22665
+ }
22666
+ childNodes() {
22667
+ return [
22668
+ this.value,
22669
+ ];
22670
+ }
22671
+ compactChildNodes() {
22672
+ return this.childNodes().filter(node => node !== null && node !== undefined);
22673
+ }
22674
+ recursiveErrors() {
22675
+ return [
22676
+ ...this.errors,
22677
+ this.value ? this.value.recursiveErrors() : [],
22678
+ ].flat();
22679
+ }
22680
+ toJSON() {
22681
+ return {
22682
+ ...super.toJSON(),
22683
+ type: "AST_RUBY_RENDER_LOCAL_NODE",
22684
+ name: this.name ? this.name.toJSON() : null,
22685
+ value: this.value ? this.value.toJSON() : null,
22686
+ };
22687
+ }
22688
+ treeInspect() {
22689
+ let output = "";
22690
+ output += `@ RubyRenderLocalNode ${this.location.treeInspectWithLabel()}\n`;
22691
+ output += `├── errors: ${this.inspectArray(this.errors, "│ ")}`;
22692
+ output += `├── name: ${this.name ? this.name.treeInspect() : "∅"}\n`;
22693
+ output += `└── value: ${this.inspectNode(this.value, " ")}`;
22694
+ return output;
22695
+ }
22696
+ }
22697
+ class ERBRenderNode extends Node {
22698
+ tag_opening;
22699
+ content;
22700
+ tag_closing;
22701
+ // no-op for analyzed_ruby
22702
+ prism_node;
22703
+ partial;
22704
+ template_path;
22705
+ layout;
22706
+ file;
22707
+ inline_template;
22708
+ body;
22709
+ plain;
22710
+ html;
22711
+ renderable;
22712
+ collection;
22713
+ object;
22714
+ as_name;
22715
+ spacer_template;
22716
+ formats;
22717
+ variants;
22718
+ handlers;
22719
+ content_type;
22720
+ locals;
22721
+ static get type() {
22722
+ return "AST_ERB_RENDER_NODE";
22723
+ }
22724
+ static from(data) {
22725
+ return new ERBRenderNode({
22726
+ type: data.type,
22727
+ location: Location.from(data.location),
22728
+ errors: (data.errors || []).map(error => HerbError.from(error)),
22729
+ tag_opening: data.tag_opening ? Token.from(data.tag_opening) : null,
22730
+ content: data.content ? Token.from(data.content) : null,
22731
+ tag_closing: data.tag_closing ? Token.from(data.tag_closing) : null,
22732
+ // no-op for analyzed_ruby
22733
+ prism_node: data.prism_node ? new Uint8Array(data.prism_node) : null,
22734
+ partial: data.partial ? Token.from(data.partial) : null,
22735
+ template_path: data.template_path ? Token.from(data.template_path) : null,
22736
+ layout: data.layout ? Token.from(data.layout) : null,
22737
+ file: data.file ? Token.from(data.file) : null,
22738
+ inline_template: data.inline_template ? Token.from(data.inline_template) : null,
22739
+ body: data.body ? Token.from(data.body) : null,
22740
+ plain: data.plain ? Token.from(data.plain) : null,
22741
+ html: data.html ? Token.from(data.html) : null,
22742
+ renderable: data.renderable ? Token.from(data.renderable) : null,
22743
+ collection: data.collection ? Token.from(data.collection) : null,
22744
+ object: data.object ? Token.from(data.object) : null,
22745
+ as_name: data.as_name ? Token.from(data.as_name) : null,
22746
+ spacer_template: data.spacer_template ? Token.from(data.spacer_template) : null,
22747
+ formats: data.formats ? Token.from(data.formats) : null,
22748
+ variants: data.variants ? Token.from(data.variants) : null,
22749
+ handlers: data.handlers ? Token.from(data.handlers) : null,
22750
+ content_type: data.content_type ? Token.from(data.content_type) : null,
22751
+ locals: (data.locals || []).map(node => fromSerializedNode(node)),
22752
+ });
22753
+ }
22754
+ constructor(props) {
22755
+ super(props.type, props.location, props.errors);
22756
+ this.tag_opening = props.tag_opening;
22757
+ this.content = props.content;
22758
+ this.tag_closing = props.tag_closing;
22759
+ // no-op for analyzed_ruby
22760
+ this.prism_node = props.prism_node;
22761
+ this.partial = props.partial;
22762
+ this.template_path = props.template_path;
22763
+ this.layout = props.layout;
22764
+ this.file = props.file;
22765
+ this.inline_template = props.inline_template;
22766
+ this.body = props.body;
22767
+ this.plain = props.plain;
22768
+ this.html = props.html;
22769
+ this.renderable = props.renderable;
22770
+ this.collection = props.collection;
22771
+ this.object = props.object;
22772
+ this.as_name = props.as_name;
22773
+ this.spacer_template = props.spacer_template;
22774
+ this.formats = props.formats;
22775
+ this.variants = props.variants;
22776
+ this.handlers = props.handlers;
22777
+ this.content_type = props.content_type;
22778
+ this.locals = props.locals;
22779
+ }
22780
+ accept(visitor) {
22781
+ visitor.visitERBRenderNode(this);
22782
+ }
22783
+ childNodes() {
22784
+ return [
22785
+ ...this.locals,
22786
+ ];
22787
+ }
22788
+ compactChildNodes() {
22789
+ return this.childNodes().filter(node => node !== null && node !== undefined);
22790
+ }
22791
+ get prismNode() {
22792
+ if (!this.prism_node || !this.source)
22793
+ return null;
22794
+ return deserializePrismNode(this.prism_node, this.source);
22795
+ }
22796
+ recursiveErrors() {
22797
+ return [
22798
+ ...this.errors,
22799
+ ...this.locals.map(node => node.recursiveErrors()),
22800
+ ].flat();
22801
+ }
22802
+ toJSON() {
22803
+ return {
22804
+ ...super.toJSON(),
22805
+ type: "AST_ERB_RENDER_NODE",
22806
+ tag_opening: this.tag_opening ? this.tag_opening.toJSON() : null,
22807
+ content: this.content ? this.content.toJSON() : null,
22808
+ tag_closing: this.tag_closing ? this.tag_closing.toJSON() : null,
22809
+ // no-op for analyzed_ruby
22810
+ prism_node: this.prism_node ? Array.from(this.prism_node) : null,
22811
+ partial: this.partial ? this.partial.toJSON() : null,
22812
+ template_path: this.template_path ? this.template_path.toJSON() : null,
22813
+ layout: this.layout ? this.layout.toJSON() : null,
22814
+ file: this.file ? this.file.toJSON() : null,
22815
+ inline_template: this.inline_template ? this.inline_template.toJSON() : null,
22816
+ body: this.body ? this.body.toJSON() : null,
22817
+ plain: this.plain ? this.plain.toJSON() : null,
22818
+ html: this.html ? this.html.toJSON() : null,
22819
+ renderable: this.renderable ? this.renderable.toJSON() : null,
22820
+ collection: this.collection ? this.collection.toJSON() : null,
22821
+ object: this.object ? this.object.toJSON() : null,
22822
+ as_name: this.as_name ? this.as_name.toJSON() : null,
22823
+ spacer_template: this.spacer_template ? this.spacer_template.toJSON() : null,
22824
+ formats: this.formats ? this.formats.toJSON() : null,
22825
+ variants: this.variants ? this.variants.toJSON() : null,
22826
+ handlers: this.handlers ? this.handlers.toJSON() : null,
22827
+ content_type: this.content_type ? this.content_type.toJSON() : null,
22828
+ locals: this.locals.map(node => node.toJSON()),
22829
+ };
22830
+ }
22831
+ treeInspect() {
22832
+ let output = "";
22833
+ output += `@ ERBRenderNode ${this.location.treeInspectWithLabel()}\n`;
22834
+ output += `├── errors: ${this.inspectArray(this.errors, "│ ")}`;
22835
+ output += `├── tag_opening: ${this.tag_opening ? this.tag_opening.treeInspect() : "∅"}\n`;
22836
+ output += `├── content: ${this.content ? this.content.treeInspect() : "∅"}\n`;
22837
+ output += `├── tag_closing: ${this.tag_closing ? this.tag_closing.treeInspect() : "∅"}\n`;
22838
+ if (this.prism_node) {
22839
+ output += `├── prism_node: ${this.source ? inspectPrismSerialized(this.prism_node, this.source, "│ ") : `(${this.prism_node.length} bytes)`}\n`;
22840
+ }
22841
+ output += `├── partial: ${this.partial ? this.partial.treeInspect() : "∅"}\n`;
22842
+ output += `├── template_path: ${this.template_path ? this.template_path.treeInspect() : "∅"}\n`;
22843
+ output += `├── layout: ${this.layout ? this.layout.treeInspect() : "∅"}\n`;
22844
+ output += `├── file: ${this.file ? this.file.treeInspect() : "∅"}\n`;
22845
+ output += `├── inline_template: ${this.inline_template ? this.inline_template.treeInspect() : "∅"}\n`;
22846
+ output += `├── body: ${this.body ? this.body.treeInspect() : "∅"}\n`;
22847
+ output += `├── plain: ${this.plain ? this.plain.treeInspect() : "∅"}\n`;
22848
+ output += `├── html: ${this.html ? this.html.treeInspect() : "∅"}\n`;
22849
+ output += `├── renderable: ${this.renderable ? this.renderable.treeInspect() : "∅"}\n`;
22850
+ output += `├── collection: ${this.collection ? this.collection.treeInspect() : "∅"}\n`;
22851
+ output += `├── object: ${this.object ? this.object.treeInspect() : "∅"}\n`;
22852
+ output += `├── as_name: ${this.as_name ? this.as_name.treeInspect() : "∅"}\n`;
22853
+ output += `├── spacer_template: ${this.spacer_template ? this.spacer_template.treeInspect() : "∅"}\n`;
22854
+ output += `├── formats: ${this.formats ? this.formats.treeInspect() : "∅"}\n`;
22855
+ output += `├── variants: ${this.variants ? this.variants.treeInspect() : "∅"}\n`;
22856
+ output += `├── handlers: ${this.handlers ? this.handlers.treeInspect() : "∅"}\n`;
22857
+ output += `├── content_type: ${this.content_type ? this.content_type.treeInspect() : "∅"}\n`;
22858
+ output += `└── locals: ${this.inspectArray(this.locals, " ")}`;
22859
+ return output;
22860
+ }
22861
+ }
22363
22862
  class ERBYieldNode extends Node {
22364
22863
  tag_opening;
22365
22864
  content;
@@ -22523,6 +23022,8 @@ function fromSerializedNode(node) {
22523
23022
  case "AST_ERB_ENSURE_NODE": return ERBEnsureNode.from(node);
22524
23023
  case "AST_ERB_BEGIN_NODE": return ERBBeginNode.from(node);
22525
23024
  case "AST_ERB_UNLESS_NODE": return ERBUnlessNode.from(node);
23025
+ case "AST_RUBY_RENDER_LOCAL_NODE": return RubyRenderLocalNode.from(node);
23026
+ case "AST_ERB_RENDER_NODE": return ERBRenderNode.from(node);
22526
23027
  case "AST_ERB_YIELD_NODE": return ERBYieldNode.from(node);
22527
23028
  case "AST_ERB_IN_NODE": return ERBInNode.from(node);
22528
23029
  default:
@@ -22572,6 +23073,7 @@ const DEFAULT_PARSER_OPTIONS = {
22572
23073
  analyze: true,
22573
23074
  strict: true,
22574
23075
  action_view_helpers: false,
23076
+ render_nodes: false,
22575
23077
  prism_nodes: false,
22576
23078
  prism_nodes_deep: false,
22577
23079
  prism_program: false,
@@ -22588,6 +23090,8 @@ class ParserOptions {
22588
23090
  analyze;
22589
23091
  /** Whether ActionView tag helper transformation was enabled during parsing. */
22590
23092
  action_view_helpers;
23093
+ /** Whether ActionView render call detection was enabled during parsing. */
23094
+ render_nodes;
22591
23095
  /** Whether Prism node serialization was enabled during parsing. */
22592
23096
  prism_nodes;
22593
23097
  /** Whether deep Prism node serialization was enabled during parsing. */
@@ -22602,6 +23106,7 @@ class ParserOptions {
22602
23106
  this.track_whitespace = options.track_whitespace ?? DEFAULT_PARSER_OPTIONS.track_whitespace;
22603
23107
  this.analyze = options.analyze ?? DEFAULT_PARSER_OPTIONS.analyze;
22604
23108
  this.action_view_helpers = options.action_view_helpers ?? DEFAULT_PARSER_OPTIONS.action_view_helpers;
23109
+ this.render_nodes = options.render_nodes ?? DEFAULT_PARSER_OPTIONS.render_nodes;
22605
23110
  this.prism_nodes = options.prism_nodes ?? DEFAULT_PARSER_OPTIONS.prism_nodes;
22606
23111
  this.prism_nodes_deep = options.prism_nodes_deep ?? DEFAULT_PARSER_OPTIONS.prism_nodes_deep;
22607
23112
  this.prism_program = options.prism_program ?? DEFAULT_PARSER_OPTIONS.prism_program;
@@ -22681,7 +23186,7 @@ class ParseResult extends Result {
22681
23186
  }
22682
23187
 
22683
23188
  // NOTE: This file is generated by the templates/template.rb script and should not
22684
- // be modified manually. See /Users/marcoroth/Development/herb-release-0.9.0/templates/javascript/packages/core/src/node-type-guards.ts.erb
23189
+ // be modified manually. See /Users/marcoroth/Development/herb-release-0.9.1/templates/javascript/packages/core/src/node-type-guards.ts.erb
22685
23190
  /**
22686
23191
  * Type guard functions for AST nodes.
22687
23192
  * These functions provide type checking by combining both instanceof
@@ -22976,6 +23481,22 @@ function isERBUnlessNode(node) {
22976
23481
  return false;
22977
23482
  return node instanceof ERBUnlessNode || node.type === "AST_ERB_UNLESS_NODE" || node.constructor.type === "AST_ERB_UNLESS_NODE";
22978
23483
  }
23484
+ /**
23485
+ * Checks if a node is a RubyRenderLocalNode
23486
+ */
23487
+ function isRubyRenderLocalNode(node) {
23488
+ if (!node)
23489
+ return false;
23490
+ return node instanceof RubyRenderLocalNode || node.type === "AST_RUBY_RENDER_LOCAL_NODE" || node.constructor.type === "AST_RUBY_RENDER_LOCAL_NODE";
23491
+ }
23492
+ /**
23493
+ * Checks if a node is a ERBRenderNode
23494
+ */
23495
+ function isERBRenderNode(node) {
23496
+ if (!node)
23497
+ return false;
23498
+ return node instanceof ERBRenderNode || node.type === "AST_ERB_RENDER_NODE" || node.constructor.type === "AST_ERB_RENDER_NODE";
23499
+ }
22979
23500
  /**
22980
23501
  * Checks if a node is a ERBYieldNode
22981
23502
  */
@@ -23039,6 +23560,8 @@ const NODE_TYPE_GUARDS = new Map([
23039
23560
  [ERBEnsureNode, isERBEnsureNode],
23040
23561
  [ERBBeginNode, isERBBeginNode],
23041
23562
  [ERBUnlessNode, isERBUnlessNode],
23563
+ [RubyRenderLocalNode, isRubyRenderLocalNode],
23564
+ [ERBRenderNode, isERBRenderNode],
23042
23565
  [ERBYieldNode, isERBYieldNode],
23043
23566
  [ERBInNode, isERBInNode],
23044
23567
  ]);
@@ -23089,6 +23612,8 @@ const AST_TYPE_GUARDS = new Map([
23089
23612
  ["AST_ERB_ENSURE_NODE", isERBEnsureNode],
23090
23613
  ["AST_ERB_BEGIN_NODE", isERBBeginNode],
23091
23614
  ["AST_ERB_UNLESS_NODE", isERBUnlessNode],
23615
+ ["AST_RUBY_RENDER_LOCAL_NODE", isRubyRenderLocalNode],
23616
+ ["AST_ERB_RENDER_NODE", isERBRenderNode],
23092
23617
  ["AST_ERB_YIELD_NODE", isERBYieldNode],
23093
23618
  ["AST_ERB_IN_NODE", isERBInNode],
23094
23619
  ]);
@@ -23210,7 +23735,7 @@ function createSyntheticToken(value, type = "TOKEN_SYNTHETIC") {
23210
23735
  }
23211
23736
 
23212
23737
  // NOTE: This file is generated by the templates/template.rb script and should not
23213
- // be modified manually. See /Users/marcoroth/Development/herb-release-0.9.0/templates/javascript/packages/core/src/visitor.ts.erb
23738
+ // be modified manually. See /Users/marcoroth/Development/herb-release-0.9.1/templates/javascript/packages/core/src/visitor.ts.erb
23214
23739
  class Visitor {
23215
23740
  visit(node) {
23216
23741
  if (!node)
@@ -23389,6 +23914,15 @@ class Visitor {
23389
23914
  this.visitERBNode(node);
23390
23915
  this.visitChildNodes(node);
23391
23916
  }
23917
+ visitRubyRenderLocalNode(node) {
23918
+ this.visitNode(node);
23919
+ this.visitChildNodes(node);
23920
+ }
23921
+ visitERBRenderNode(node) {
23922
+ this.visitNode(node);
23923
+ this.visitERBNode(node);
23924
+ this.visitChildNodes(node);
23925
+ }
23392
23926
  visitERBYieldNode(node) {
23393
23927
  this.visitNode(node);
23394
23928
  this.visitERBNode(node);
@@ -24272,6 +24806,12 @@ class IdentityPrinter extends Printer {
24272
24806
  this.visit(node.end_node);
24273
24807
  }
24274
24808
  }
24809
+ visitERBRenderNode(node) {
24810
+ this.printERBNode(node);
24811
+ }
24812
+ visitRubyRenderLocalNode(_node) {
24813
+ // extracted metadata, nothing to print
24814
+ }
24275
24815
  visitERBYieldNode(node) {
24276
24816
  this.printERBNode(node);
24277
24817
  }