yukigo-ast 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/globals/generics.d.ts +740 -0
  3. package/dist/globals/generics.js +1128 -0
  4. package/dist/globals/helpers.d.ts +4 -0
  5. package/dist/globals/helpers.js +76 -0
  6. package/dist/globals/operators.d.ts +251 -0
  7. package/dist/globals/operators.js +336 -0
  8. package/dist/globals/patterns.d.ts +170 -0
  9. package/dist/globals/patterns.js +261 -0
  10. package/dist/globals/runtime.d.ts +22 -0
  11. package/dist/globals/runtime.js +6 -0
  12. package/dist/globals/types.d.ts +185 -0
  13. package/dist/globals/types.js +329 -0
  14. package/dist/index.d.ts +12 -0
  15. package/dist/index.js +12 -0
  16. package/dist/paradigms/data.d.ts +246 -0
  17. package/dist/paradigms/data.js +348 -0
  18. package/dist/paradigms/functional.d.ts +59 -0
  19. package/dist/paradigms/functional.js +103 -0
  20. package/dist/paradigms/imperative.d.ts +124 -0
  21. package/dist/paradigms/imperative.js +188 -0
  22. package/dist/paradigms/logic.d.ts +163 -0
  23. package/dist/paradigms/logic.js +240 -0
  24. package/dist/paradigms/object.d.ts +201 -0
  25. package/dist/paradigms/object.js +308 -0
  26. package/dist/visitor.d.ts +254 -0
  27. package/dist/visitor.js +426 -0
  28. package/package.json +25 -0
  29. package/src/globals/generics.ts +1421 -0
  30. package/src/globals/helpers.ts +107 -0
  31. package/src/globals/operators.ts +515 -0
  32. package/src/globals/patterns.ts +321 -0
  33. package/src/globals/runtime.ts +33 -0
  34. package/src/globals/types.ts +375 -0
  35. package/src/index.ts +12 -0
  36. package/src/paradigms/data.ts +393 -0
  37. package/src/paradigms/functional.ts +129 -0
  38. package/src/paradigms/imperative.ts +232 -0
  39. package/src/paradigms/logic.ts +314 -0
  40. package/src/paradigms/object.ts +366 -0
  41. package/src/visitor.ts +692 -0
  42. package/tsconfig.json +22 -0
package/src/visitor.ts ADDED
@@ -0,0 +1,692 @@
1
+ import {
2
+ Sequence,
3
+ NumberPrimitive,
4
+ BooleanPrimitive,
5
+ StringPrimitive,
6
+ ListPrimitive,
7
+ NilPrimitive,
8
+ SymbolPrimitive,
9
+ CharPrimitive,
10
+ TupleExpression,
11
+ FieldExpression,
12
+ DataExpression,
13
+ ConsExpression,
14
+ LetInExpression,
15
+ Otherwise,
16
+ ListComprehension,
17
+ RangeExpression,
18
+ If,
19
+ Return,
20
+ Field,
21
+ Constructor,
22
+ UnguardedBody,
23
+ GuardedBody,
24
+ Equation,
25
+ Switch,
26
+ Try,
27
+ Raise,
28
+ Print,
29
+ Function,
30
+ Generator,
31
+ For,
32
+ Break,
33
+ Continue,
34
+ Variable,
35
+ Assignment,
36
+ ASTNode,
37
+ Record,
38
+ Case,
39
+ Catch,
40
+ Input,
41
+ } from "./globals/generics.js";
42
+ import {
43
+ ArithmeticUnaryOperation,
44
+ ArithmeticBinaryOperation,
45
+ ListUnaryOperation,
46
+ ListBinaryOperation,
47
+ ComparisonOperation,
48
+ LogicalBinaryOperation,
49
+ LogicalUnaryOperation,
50
+ StringOperation,
51
+ UnifyOperation,
52
+ AssignOperation,
53
+ BitwiseBinaryOperation,
54
+ BitwiseUnaryOperation,
55
+ } from "./globals/operators.js";
56
+ import {
57
+ VariablePattern,
58
+ LiteralPattern,
59
+ ApplicationPattern,
60
+ TuplePattern,
61
+ ListPattern,
62
+ FunctorPattern,
63
+ AsPattern,
64
+ WildcardPattern,
65
+ UnionPattern,
66
+ ConstructorPattern,
67
+ ConsPattern,
68
+ } from "./globals/patterns.js";
69
+ import {
70
+ SimpleType,
71
+ TypeVar,
72
+ TypeApplication,
73
+ ListType,
74
+ TupleType,
75
+ Constraint,
76
+ ParameterizedType,
77
+ ConstrainedType,
78
+ TypeAlias,
79
+ TypeSignature,
80
+ TypeCast,
81
+ } from "./globals/types.js";
82
+ import {
83
+ AlterDatabase,
84
+ AlterTable,
85
+ Commit,
86
+ CreateDatabase,
87
+ CreateIndex,
88
+ CreateTable,
89
+ Delete,
90
+ DropIndex,
91
+ DropTable,
92
+ InsertInto,
93
+ Rollback,
94
+ Select,
95
+ Update,
96
+ } from "./paradigms/data.js";
97
+ import {
98
+ CompositionExpression,
99
+ Lambda,
100
+ Application,
101
+ Yield,
102
+ } from "./paradigms/functional.js";
103
+ import {
104
+ EntryPoint,
105
+ Procedure,
106
+ Enumeration,
107
+ While,
108
+ Repeat,
109
+ ForLoop,
110
+ Structure,
111
+ } from "./paradigms/imperative.js";
112
+ import {
113
+ Call,
114
+ Exist,
115
+ Not,
116
+ Findall,
117
+ Forall,
118
+ Goal,
119
+ Rule,
120
+ Fact,
121
+ Query,
122
+ } from "./paradigms/logic.js";
123
+ import {
124
+ Send,
125
+ New,
126
+ Implement,
127
+ Include,
128
+ Self,
129
+ Method,
130
+ Attribute,
131
+ Class,
132
+ Interface,
133
+ Object,
134
+ Super,
135
+ PrimitiveMethod,
136
+ } from "./paradigms/object.js";
137
+
138
+ export interface StrictVisitor<TReturn> {
139
+ visitSequence(node: Sequence): TReturn;
140
+ // Primitives
141
+ visitNumberPrimitive(node: NumberPrimitive): TReturn;
142
+ visitBooleanPrimitive(node: BooleanPrimitive): TReturn;
143
+ visitStringPrimitive(node: StringPrimitive): TReturn;
144
+ visitListPrimitive(node: ListPrimitive): TReturn;
145
+ visitNilPrimitive(node: NilPrimitive): TReturn;
146
+ visitSymbolPrimitive(node: SymbolPrimitive): TReturn;
147
+ visitCharPrimitive(node: CharPrimitive): TReturn;
148
+ // Operations
149
+ visitArithmeticUnaryOperation(node: ArithmeticUnaryOperation): TReturn;
150
+ visitArithmeticBinaryOperation(node: ArithmeticBinaryOperation): TReturn;
151
+ visitListUnaryOperation(node: ListUnaryOperation): TReturn;
152
+ visitListBinaryOperation(node: ListBinaryOperation): TReturn;
153
+ visitComparisonOperation(node: ComparisonOperation): TReturn;
154
+ visitLogicalBinaryOperation(node: LogicalBinaryOperation): TReturn;
155
+ visitLogicalUnaryOperation(node: LogicalUnaryOperation): TReturn;
156
+ visitBitwiseBinaryOperation(node: BitwiseBinaryOperation): TReturn;
157
+ visitBitwiseUnaryOperation(node: BitwiseUnaryOperation): TReturn;
158
+ visitStringOperation(node: StringOperation): TReturn;
159
+ visitUnifyOperation(node: UnifyOperation): TReturn;
160
+ visitAssignOperation(node: AssignOperation): TReturn;
161
+ // Expressions
162
+ visitTupleExpr(node: TupleExpression): TReturn;
163
+ visitFieldExpr(node: FieldExpression): TReturn;
164
+ visitDataExpr(node: DataExpression): TReturn;
165
+ visitConsExpr(node: ConsExpression): TReturn;
166
+ visitLetInExpr(node: LetInExpression): TReturn;
167
+ visitCall(node: Call): TReturn;
168
+ visitOtherwise(node: Otherwise): TReturn;
169
+ visitCompositionExpression(node: CompositionExpression): TReturn;
170
+ visitLambda(node: Lambda): TReturn;
171
+ visitApplication(node: Application): TReturn;
172
+ visitExist(node: Exist): TReturn;
173
+ visitNot(node: Not): TReturn;
174
+ visitFindall(node: Findall): TReturn;
175
+ visitForall(node: Forall): TReturn;
176
+ visitGoal(node: Goal): TReturn;
177
+ visitSend(node: Send): TReturn;
178
+ visitNew(node: New): TReturn;
179
+ visitImplement(node: Implement): TReturn;
180
+ visitInclude(node: Include): TReturn;
181
+ visitListComprehension(node: ListComprehension): TReturn;
182
+ visitGenerator(node: Generator): TReturn;
183
+ visitRangeExpression(node: RangeExpression): TReturn;
184
+ // Statements
185
+ visitSelf(node: Self): TReturn;
186
+ visitSuper(node: Super): TReturn;
187
+ visitYield(node: Yield): TReturn;
188
+ visitIf(node: If): TReturn;
189
+ visitReturn(node: Return): TReturn;
190
+ visitFunction(node: Function): TReturn;
191
+ visitField(node: Field): TReturn;
192
+ visitConstructor(node: Constructor): TReturn;
193
+ visitRecord(node: Record): TReturn;
194
+ visitUnguardedBody(node: UnguardedBody): TReturn;
195
+ visitGuardedBody(node: GuardedBody): TReturn;
196
+ visitEquation(node: Equation): TReturn;
197
+ visitSwitch(node: Switch): TReturn;
198
+ visitCase(node: Case): TReturn;
199
+ visitTry(node: Try): TReturn;
200
+ visitCatch(node: Catch): TReturn;
201
+ visitRaise(node: Raise): TReturn;
202
+ visitPrint(node: Print): TReturn;
203
+ visitInput(node: Input): TReturn;
204
+ visitFor(node: For): TReturn;
205
+ visitBreak(node: Break): TReturn;
206
+ visitContinue(node: Continue): TReturn;
207
+ visitVariable(node: Variable): TReturn;
208
+ visitAssignment(node: Assignment): TReturn;
209
+ visitStructure(node: Structure): TReturn;
210
+ visitEntryPoint(node: EntryPoint): TReturn;
211
+ visitProcedure(node: Procedure): TReturn;
212
+ visitEnumeration(node: Enumeration): TReturn;
213
+ visitWhile(node: While): TReturn;
214
+ visitRepeat(node: Repeat): TReturn;
215
+ visitForLoop(node: ForLoop): TReturn;
216
+ visitRule(node: Rule): TReturn;
217
+ visitFact(node: Fact): TReturn;
218
+ visitQuery(node: Query): TReturn;
219
+ visitMethod(node: Method): TReturn;
220
+ visitPrimitiveMethod(node: PrimitiveMethod): TReturn;
221
+ visitAttribute(node: Attribute): TReturn;
222
+ visitObject(node: Object): TReturn;
223
+ visitClass(node: Class): TReturn;
224
+ visitInterface(node: Interface): TReturn;
225
+ // Patterns
226
+ visitVariablePattern(node: VariablePattern): TReturn;
227
+ visitLiteralPattern(node: LiteralPattern): TReturn;
228
+ visitApplicationPattern(node: ApplicationPattern): TReturn;
229
+ visitTuplePattern(node: TuplePattern): TReturn;
230
+ visitListPattern(node: ListPattern): TReturn;
231
+ visitFunctorPattern(node: FunctorPattern): TReturn;
232
+ visitAsPattern(node: AsPattern): TReturn;
233
+ visitWildcardPattern(node: WildcardPattern): TReturn;
234
+ visitUnionPattern(node: UnionPattern): TReturn;
235
+ visitConstructorPattern(node: ConstructorPattern): TReturn;
236
+ visitConsPattern(node: ConsPattern): TReturn;
237
+ // Type
238
+ visitSimpleType(node: SimpleType): TReturn;
239
+ visitTypeVar(node: TypeVar): TReturn;
240
+ visitTypeApplication(node: TypeApplication): TReturn;
241
+ visitListType(node: ListType): TReturn;
242
+ visitTupleType(node: TupleType): TReturn;
243
+ visitConstraint(node: Constraint): TReturn;
244
+ visitParameterizedType(node: ParameterizedType): TReturn;
245
+ visitConstrainedType(node: ConstrainedType): TReturn;
246
+ visitTypeAlias(node: TypeAlias): TReturn;
247
+ visitTypeSignature(node: TypeSignature): TReturn;
248
+ visitTypeCast(node: TypeCast): TReturn;
249
+ // Data Manipulation Nodes
250
+ visitSelect(node: Select): TReturn;
251
+ visitUpdate(node: Update): TReturn;
252
+ visitDelete(node: Delete): TReturn;
253
+ visitInsertInto(node: InsertInto): TReturn;
254
+ visitCreateDatabase(node: CreateDatabase): TReturn;
255
+ visitAlterDatabase(node: AlterDatabase): TReturn;
256
+ visitCreateTable(node: CreateTable): TReturn;
257
+ visitAlterTable(node: AlterTable): TReturn;
258
+ visitDropTable(node: DropTable): TReturn;
259
+ visitCreateIndex(node: CreateIndex): TReturn;
260
+ visitDropIndex(node: DropIndex): TReturn;
261
+ visitCommit(node: Commit): TReturn;
262
+ visitRollback(node: Rollback): TReturn;
263
+ visit(node: ASTNode): TReturn;
264
+ }
265
+
266
+ export type Visitor<R> = Partial<StrictVisitor<R>>;
267
+
268
+ export class StopTraversalException extends Error {
269
+ constructor() {
270
+ super("Inspection found, aborting traversal.");
271
+ }
272
+ }
273
+
274
+ export class TraverseVisitor implements StrictVisitor<void> {
275
+ visitSelect(node: Select): void {
276
+ this.traverseCollection(node.columns);
277
+ node.where?.accept(this);
278
+ }
279
+ visitUpdate(node: Update): void {
280
+ this.traverseCollection(node.assignments);
281
+ node.where?.accept(this);
282
+ }
283
+ visitDelete(node: Delete): void {
284
+ node.where?.accept(this);
285
+ }
286
+ visitInsertInto(node: InsertInto): void {
287
+ node.values.forEach((val) => this.traverseCollection(val));
288
+ }
289
+ visitCreateDatabase(node: CreateDatabase): void {}
290
+ visitAlterDatabase(node: AlterDatabase): void {}
291
+ visitCreateTable(node: CreateTable): void {
292
+ this.traverseCollection(node.columns);
293
+ }
294
+ visitAlterTable(node: AlterTable): void {
295
+ node.action.accept(this);
296
+ }
297
+ visitDropTable(node: DropTable): void {}
298
+ visitCreateIndex(node: CreateIndex): void {}
299
+ visitDropIndex(node: DropIndex): void {}
300
+ visitCommit(node: Commit): void {
301
+ node.name.accept(this);
302
+ }
303
+ visitRollback(node: Rollback): void {
304
+ node.name.accept(this);
305
+ }
306
+ protected traverseCollection(nodes: ASTNode[]): void {
307
+ for (const node of nodes) {
308
+ try {
309
+ node.accept(this);
310
+ } catch (e) {
311
+ throw e;
312
+ }
313
+ }
314
+ }
315
+
316
+ visitSequence(node: Sequence): void {
317
+ this.traverseCollection(node.statements);
318
+ }
319
+ visitStructure(node: Structure): void {
320
+ this.traverseCollection(node.elements);
321
+ }
322
+ visitNumberPrimitive(node: NumberPrimitive): void {}
323
+ visitBooleanPrimitive(node: BooleanPrimitive): void {}
324
+ visitStringPrimitive(node: StringPrimitive): void {}
325
+ visitListPrimitive(node: ListPrimitive): void {
326
+ this.traverseCollection(node.elements);
327
+ }
328
+ visitNilPrimitive(node: NilPrimitive): void {}
329
+ visitSymbolPrimitive(node: SymbolPrimitive): void {}
330
+ visitCharPrimitive(node: CharPrimitive): void {}
331
+ visitArithmeticUnaryOperation(node: ArithmeticUnaryOperation): void {
332
+ node.operand.accept(this);
333
+ }
334
+ visitArithmeticBinaryOperation(node: ArithmeticBinaryOperation): void {
335
+ node.left.accept(this);
336
+ node.right.accept(this);
337
+ }
338
+ visitListUnaryOperation(node: ListUnaryOperation): void {
339
+ node.operand.accept(this);
340
+ }
341
+ visitListBinaryOperation(node: ListBinaryOperation): void {
342
+ node.left.accept(this);
343
+ node.right.accept(this);
344
+ }
345
+ visitComparisonOperation(node: ComparisonOperation): void {
346
+ node.left.accept(this);
347
+ node.right.accept(this);
348
+ }
349
+ visitLogicalBinaryOperation(node: LogicalBinaryOperation): void {
350
+ node.left.accept(this);
351
+ node.right.accept(this);
352
+ }
353
+ visitLogicalUnaryOperation(node: LogicalUnaryOperation): void {
354
+ node.operand.accept(this);
355
+ }
356
+ visitBitwiseBinaryOperation(node: BitwiseBinaryOperation): void {
357
+ node.left.accept(this);
358
+ node.right.accept(this);
359
+ }
360
+ visitBitwiseUnaryOperation(node: BitwiseUnaryOperation): void {
361
+ node.operand.accept(this);
362
+ }
363
+ visitStringOperation(node: StringOperation): void {
364
+ node.left.accept(this);
365
+ node.right.accept(this);
366
+ }
367
+ visitUnifyOperation(node: UnifyOperation): void {
368
+ node.left.accept(this);
369
+ node.right.accept(this);
370
+ }
371
+ visitAssignOperation(node: AssignOperation): void {
372
+ node.left.accept(this);
373
+ node.right.accept(this);
374
+ }
375
+ visitTupleExpr(node: TupleExpression): void {
376
+ this.traverseCollection(node.elements);
377
+ }
378
+ visitFieldExpr(node: FieldExpression): void {
379
+ node.name.accept(this);
380
+ node.expression.accept(this);
381
+ }
382
+ visitDataExpr(node: DataExpression): void {
383
+ node.name.accept(this);
384
+ this.traverseCollection(node.contents);
385
+ }
386
+ visitConsExpr(node: ConsExpression): void {
387
+ node.head.accept(this);
388
+ node.tail.accept(this);
389
+ }
390
+ visitLetInExpr(node: LetInExpression): void {
391
+ node.expression.accept(this);
392
+ node.declarations.accept(this);
393
+ }
394
+ visitCall(node: Call): void {
395
+ node.callee.accept(this);
396
+ this.traverseCollection(node.args);
397
+ }
398
+ visitOtherwise(node: Otherwise): void {}
399
+ visitCompositionExpression(node: CompositionExpression): void {
400
+ node.left.accept(this);
401
+ node.right.accept(this);
402
+ }
403
+ visitLambda(node: Lambda): void {
404
+ node.body.accept(this);
405
+ this.traverseCollection(node.parameters);
406
+ }
407
+ visitApplication(node: Application): void {
408
+ node.functionExpr.accept(this);
409
+ node.parameter.accept(this);
410
+ }
411
+ visitExist(node: Exist): void {
412
+ node.identifier.accept(this);
413
+ this.traverseCollection(node.patterns);
414
+ }
415
+ visitNot(node: Not): void {
416
+ this.traverseCollection(node.expressions);
417
+ }
418
+ visitFindall(node: Findall): void {
419
+ node.template.accept(this);
420
+ node.goal.accept(this);
421
+ node.bag.accept(this);
422
+ }
423
+ visitForall(node: Forall): void {
424
+ node.condition.accept(this);
425
+ node.action.accept(this);
426
+ }
427
+ visitGoal(node: Goal): void {
428
+ node.identifier.accept(this);
429
+ this.traverseCollection(node.args);
430
+ }
431
+ visitSend(node: Send): void {
432
+ node.selector.accept(this);
433
+ node.receiver.accept(this);
434
+ this.traverseCollection(node.args);
435
+ }
436
+ visitNew(node: New): void {
437
+ node.identifier.accept(this);
438
+ this.traverseCollection(node.args);
439
+ }
440
+ visitImplement(node: Implement): void {
441
+ node.identifier.accept(this);
442
+ }
443
+ visitInclude(node: Include): void {
444
+ node.identifier.accept(this);
445
+ }
446
+ visitSelf(node: Self): void {}
447
+ visitSuper(node: Super): void {}
448
+ visitListComprehension(node: ListComprehension): void {
449
+ node.projection.accept(this);
450
+ this.traverseCollection(node.generators);
451
+ }
452
+ visitGenerator(node: Generator): void {
453
+ node.variable.accept(this);
454
+ node.expression.accept(this);
455
+ }
456
+ visitRangeExpression(node: RangeExpression): void {
457
+ node.start.accept(this);
458
+ node.step?.accept(this);
459
+ node.end?.accept(this);
460
+ }
461
+ visitYield(node: Yield): void {
462
+ node.expression.accept(this);
463
+ }
464
+ visitIf(node: If): void {
465
+ node.condition.accept(this);
466
+ node.then.accept(this);
467
+ node.elseExpr.accept(this);
468
+ }
469
+ visitReturn(node: Return): void {
470
+ node.body.accept(this);
471
+ }
472
+ visitFunction(node: Function): void {
473
+ node.identifier.accept(this);
474
+ this.traverseCollection(node.equations);
475
+ }
476
+ visitField(node: Field): void {
477
+ node.name?.accept(this);
478
+ node.value.accept(this);
479
+ }
480
+ visitConstructor(node: Constructor): void {
481
+ node.name.accept(this);
482
+ this.traverseCollection(node.fields);
483
+ }
484
+ visitRecord(node: Record): void {
485
+ node.name.accept(this);
486
+ this.traverseCollection(node.contents);
487
+ if (node.deriving) this.traverseCollection(node.deriving);
488
+ }
489
+ visitUnguardedBody(node: UnguardedBody): void {
490
+ node.sequence.accept(this);
491
+ }
492
+ visitGuardedBody(node: GuardedBody): void {
493
+ node.condition.accept(this);
494
+ node.body.accept(this);
495
+ }
496
+ visitEquation(node: Equation): void {
497
+ if (Array.isArray(node.body)) {
498
+ this.traverseCollection(node.body);
499
+ } else {
500
+ node.body.accept(this);
501
+ }
502
+ this.traverseCollection(node.patterns);
503
+ node.returnExpr?.accept(this);
504
+ }
505
+ visitSwitch(node: Switch): void {
506
+ node.value.accept(this);
507
+ this.traverseCollection(node.cases);
508
+ }
509
+ visitCase(node: Case): void {
510
+ node.condition.accept(this);
511
+ node.body.accept(this);
512
+ }
513
+ visitTry(node: Try): void {
514
+ node.body.accept(this);
515
+ this.traverseCollection(node.catchExpr);
516
+ node.finallyExpr.accept(this);
517
+ }
518
+ visitCatch(node: Catch): void {
519
+ node.body.accept(this);
520
+ this.traverseCollection(node.patterns);
521
+ }
522
+ visitRaise(node: Raise): void {
523
+ node.body.accept(this);
524
+ }
525
+ visitPrint(node: Print): void {
526
+ node.expression.accept(this);
527
+ }
528
+ visitInput(node: Input): void {
529
+ node.message.accept(this);
530
+ }
531
+ visitFor(node: For): void {
532
+ node.body.accept(this);
533
+ this.traverseCollection(node.statements);
534
+ }
535
+ visitBreak(node: Break): void {
536
+ node.body.accept(this);
537
+ }
538
+ visitContinue(node: Continue): void {
539
+ node.body.accept(this);
540
+ }
541
+ visitVariable(node: Variable): void {
542
+ node.identifier.accept(this);
543
+ node.expression.accept(this);
544
+ node.variableType?.accept(this);
545
+ }
546
+ visitAssignment(node: Assignment): void {
547
+ node.identifier.accept(this);
548
+ node.expression.accept(this);
549
+ }
550
+ visitEntryPoint(node: EntryPoint): void {
551
+ node.identifier.accept(this);
552
+ node.expression.accept(this);
553
+ }
554
+ visitProcedure(node: Procedure): void {
555
+ node.identifier.accept(this);
556
+ this.traverseCollection(node.equations);
557
+ }
558
+ visitEnumeration(node: Enumeration): void {
559
+ node.identifier.accept(this);
560
+ this.traverseCollection(node.contents);
561
+ }
562
+ visitWhile(node: While): void {
563
+ node.condition.accept(this);
564
+ node.body.accept(this);
565
+ }
566
+ visitRepeat(node: Repeat): void {
567
+ node.body.accept(this);
568
+ node.count.accept(this);
569
+ }
570
+ visitForLoop(node: ForLoop): void {
571
+ node.initialization.accept(this);
572
+ node.condition.accept(this);
573
+ node.update.accept(this);
574
+ node.body.accept(this);
575
+ }
576
+ visitRule(node: Rule): void {
577
+ node.identifier.accept(this);
578
+ this.traverseCollection(node.expressions);
579
+ this.traverseCollection(node.patterns);
580
+ }
581
+ visitFact(node: Fact): void {
582
+ node.identifier.accept(this);
583
+ this.traverseCollection(node.patterns);
584
+ }
585
+ visitQuery(node: Query): void {
586
+ node.expression.accept(this);
587
+ }
588
+ visitMethod(node: Method): void {
589
+ node.identifier.accept(this);
590
+ this.traverseCollection(node.equations);
591
+ }
592
+ visitPrimitiveMethod(node: PrimitiveMethod): void {
593
+ this.traverseCollection(node.equations);
594
+ }
595
+ visitAttribute(node: Attribute): void {
596
+ node.identifier.accept(this);
597
+ node.expression.accept(this);
598
+ }
599
+ visitObject(node: Object): void {
600
+ node.identifier.accept(this);
601
+ node.expression.accept(this);
602
+ }
603
+ visitClass(node: Class): void {
604
+ node.identifier.accept(this);
605
+ node.expression.accept(this);
606
+ node.extendsSymbol?.accept(this);
607
+ node.implementsNode?.accept(this);
608
+ }
609
+ visitInterface(node: Interface): void {
610
+ node.identifier.accept(this);
611
+ this.traverseCollection(node.extendsSymbol);
612
+ node.expression.accept(this);
613
+ }
614
+ visitVariablePattern(node: VariablePattern): void {
615
+ node.name.accept(this);
616
+ }
617
+ visitLiteralPattern(node: LiteralPattern): void {
618
+ node.name.accept(this);
619
+ }
620
+ visitApplicationPattern(node: ApplicationPattern): void {
621
+ node.symbol.accept(this);
622
+ this.traverseCollection(node.args);
623
+ }
624
+ visitTuplePattern(node: TuplePattern): void {
625
+ this.traverseCollection(node.elements);
626
+ }
627
+ visitListPattern(node: ListPattern): void {
628
+ this.traverseCollection(node.elements);
629
+ }
630
+ visitFunctorPattern(node: FunctorPattern): void {
631
+ node.identifier.accept(this);
632
+ this.traverseCollection(node.args);
633
+ }
634
+ visitAsPattern(node: AsPattern): void {
635
+ node.alias.accept(this);
636
+ node.pattern.accept(this);
637
+ }
638
+ visitWildcardPattern(node: WildcardPattern): void {}
639
+ visitUnionPattern(node: UnionPattern): void {
640
+ this.traverseCollection(node.patterns);
641
+ }
642
+ visitConstructorPattern(node: ConstructorPattern): void {
643
+ this.traverseCollection(node.patterns);
644
+ }
645
+ visitConsPattern(node: ConsPattern): void {
646
+ node.head.accept(this);
647
+ node.tail.accept(this);
648
+ }
649
+ visitSimpleType(node: SimpleType): void {
650
+ this.traverseCollection(node.constraints);
651
+ }
652
+ visitTypeVar(node: TypeVar): void {
653
+ this.traverseCollection(node.constraints);
654
+ }
655
+ visitTypeApplication(node: TypeApplication): void {
656
+ node.functionType.accept(this);
657
+ node.argument.accept(this);
658
+ }
659
+ visitListType(node: ListType): void {
660
+ this.traverseCollection(node.constraints);
661
+ }
662
+ visitTupleType(node: TupleType): void {
663
+ this.traverseCollection(node.constraints);
664
+ this.traverseCollection(node.values);
665
+ }
666
+ visitConstraint(node: Constraint): void {
667
+ this.traverseCollection(node.parameters);
668
+ }
669
+ visitParameterizedType(node: ParameterizedType): void {
670
+ this.traverseCollection(node.inputs);
671
+ this.traverseCollection(node.constraints);
672
+ node.returnType.accept(this);
673
+ }
674
+ visitConstrainedType(node: ConstrainedType): void {
675
+ this.traverseCollection(node.constraints);
676
+ }
677
+ visitTypeAlias(node: TypeAlias): void {
678
+ node.identifier.accept(this);
679
+ node.value.accept(this);
680
+ }
681
+ visitTypeSignature(node: TypeSignature): void {
682
+ node.body.accept(this);
683
+ node.identifier.accept(this);
684
+ }
685
+ visitTypeCast(node: TypeCast): void {
686
+ node.body.accept(this);
687
+ node.expression.accept(this);
688
+ }
689
+ visit(node: ASTNode): void {
690
+ node.accept(this);
691
+ }
692
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,22 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "module": "NodeNext",
5
+ "moduleResolution": "NodeNext",
6
+ "lib": ["ES2022"],
7
+ "outDir": "./dist",
8
+ "declaration": true,
9
+ "esModuleInterop": true,
10
+ "allowSyntheticDefaultImports": true,
11
+ "forceConsistentCasingInFileNames": true,
12
+ "skipLibCheck": true
13
+ },
14
+ "typedocOptions": {
15
+ "entryPoints": [
16
+ "src/*.ts"
17
+ ],
18
+ "out": "docs/typedoc"
19
+ },
20
+ "include": ["src"],
21
+ "exclude": ["dist/**/*"]
22
+ }