@@ -15,6 +15,7 @@ type Visitor = {
15
15
visitCompoundAssign : (T .AstStatCompoundAssign ) -> boolean ,
16
16
visitFunction : (T .AstStatFunction ) -> boolean ,
17
17
visitLocalFunction : (T .AstStatLocalFunction ) -> boolean ,
18
+ visitTypeAlias : (T .AstStatTypeAlias ) -> boolean ,
18
19
19
20
visitLocalReference : (T .AstExprLocal ) -> boolean ,
20
21
visitGlobal : (T .AstExprGlobal ) -> boolean ,
@@ -28,6 +29,12 @@ type Visitor = {
28
29
visitIndexExpr : (T .AstExprIndexExpr ) -> boolean ,
29
30
visitGroup : (T .AstExprGroup ) -> boolean ,
30
31
32
+ visitTypeReference : (T .AstTypeReference ) -> boolean ,
33
+ visitTypeBoolean : (T .AstTypeSingletonBool ) -> boolean ,
34
+ visitTypeString : (T .AstTypeSingletonString ) -> boolean ,
35
+ visitTypeTypeof : (T .AstTypeTypeof ) -> boolean ,
36
+ visitTypeGroup : (T .AstTypeGroup ) -> boolean ,
37
+
31
38
visitToken : (T .Token ) -> boolean ,
32
39
visitNil : (T .AstExprConstantNil ) -> boolean ,
33
40
visitString : (T .AstExprConstantString ) -> boolean ,
@@ -54,6 +61,7 @@ local defaultVisitor: Visitor = {
54
61
visitCompoundAssign = alwaysVisit :: any ,
55
62
visitFunction = alwaysVisit :: any ,
56
63
visitLocalFunction = alwaysVisit :: any ,
64
+ visitTypeAlias = alwaysVisit :: any ,
57
65
58
66
visitLocalReference = alwaysVisit :: any ,
59
67
visitGlobal = alwaysVisit :: any ,
@@ -67,6 +75,12 @@ local defaultVisitor: Visitor = {
67
75
visitIndexExpr = alwaysVisit :: any ,
68
76
visitGroup = alwaysVisit :: any ,
69
77
78
+ visitTypeReference = alwaysVisit :: any ,
79
+ visitTypeBoolean = alwaysVisit :: any ,
80
+ visitTypeString = alwaysVisit :: any ,
81
+ visitTypeTypeof = alwaysVisit :: any ,
82
+ visitTypeGroup = alwaysVisit :: any ,
83
+
70
84
visitToken = alwaysVisit :: any ,
71
85
visitNil = alwaysVisit :: any ,
72
86
visitString = alwaysVisit :: any ,
@@ -209,6 +223,18 @@ local function visitCompoundAssign(node: T.AstStatCompoundAssign, visitor: Visit
209
223
end
210
224
end
211
225
226
+ local function visitTypeAlias (node : T .AstStatTypeAlias , visitor : Visitor )
227
+ if visitor .visitTypeAlias (node ) then
228
+ if node .export then
229
+ visitToken (node .export , visitor )
230
+ end
231
+ visitToken (node .typeToken , visitor )
232
+ visitToken (node .name , visitor )
233
+ visitToken (node .equals , visitor )
234
+ visitType (node .type , visitor )
235
+ end
236
+ end
237
+
212
238
local function visitString (node : T .AstExprConstantString , visitor : Visitor )
213
239
if visitor .visitString (node ) then
214
240
visitor .visitToken (node )
@@ -370,6 +396,56 @@ local function visitGroup(node: T.AstExprGroup, visitor: Visitor)
370
396
end
371
397
end
372
398
399
+ local function visitTypeReference (node : T .AstTypeReference , visitor : Visitor )
400
+ if visitor .visitTypeReference (node ) then
401
+ if node .prefix then
402
+ visitToken (node .prefix , visitor )
403
+ end
404
+ if node .prefixPoint then
405
+ visitToken (node .prefixPoint , visitor )
406
+ end
407
+ visitToken (node .name , visitor )
408
+ if node .openParameters then
409
+ visitToken (node .openParameters , visitor )
410
+ end
411
+ if node .parameters then
412
+ visitPunctuated (node .parameters , visitor , visitType )
413
+ end
414
+ if node .closeParameters then
415
+ visitToken (node .closeParameters , visitor )
416
+ end
417
+ end
418
+ end
419
+
420
+ local function visitTypeBoolean (node : T .AstTypeSingletonBool , visitor : Visitor )
421
+ if visitor .visitTypeBoolean (node ) then
422
+ visitToken (node , visitor )
423
+ end
424
+ end
425
+
426
+ local function visitTypeString (node : T .AstTypeSingletonString , visitor : Visitor )
427
+ if visitor .visitTypeString (node ) then
428
+ visitToken (node , visitor )
429
+ end
430
+ end
431
+
432
+ local function visitTypeTypeof (node : T .AstTypeTypeof , visitor : Visitor )
433
+ if visitor .visitTypeTypeof (node ) then
434
+ visitToken (node .typeof , visitor )
435
+ visitToken (node .openParens , visitor )
436
+ visitExpression (node .expr , visitor )
437
+ visitToken (node .closeParens , visitor )
438
+ end
439
+ end
440
+
441
+ local function visitTypeGroup (node : T .AstTypeGroup , visitor : Visitor )
442
+ if visitor .visitTypeGroup (node ) then
443
+ visitToken (node .openParens , visitor )
444
+ visitType (node .type , visitor )
445
+ visitToken (node .closeParens , visitor )
446
+ end
447
+ end
448
+
373
449
function visitExpression (expression : T .AstExpr , visitor : Visitor )
374
450
if expression .tag == "nil" then
375
451
visitNil (expression , visitor )
@@ -437,11 +513,29 @@ function visitStatement(statement: T.AstStat, visitor: Visitor)
437
513
visitFunction (statement , visitor )
438
514
elseif statement .tag == "localfunction" then
439
515
visitLocalFunction (statement , visitor )
516
+ elseif statement .tag == "typealias" then
517
+ visitTypeAlias (statement , visitor )
440
518
else
441
519
exhaustiveMatch (statement .tag )
442
520
end
443
521
end
444
522
523
+ function visitType (type : T .AstType , visitor : Visitor )
524
+ if type .tag == "reference" then
525
+ visitTypeReference (type , visitor )
526
+ elseif type .tag == "boolean" then
527
+ visitTypeBoolean (type , visitor )
528
+ elseif type .tag == "string" then
529
+ visitTypeString (type , visitor )
530
+ elseif type .tag == "typeof" then
531
+ visitTypeTypeof (type , visitor )
532
+ elseif type .tag == "group" then
533
+ visitTypeGroup (type , visitor )
534
+ else
535
+ exhaustiveMatch (type .tag )
536
+ end
537
+ end
538
+
445
539
local function createVisitor ()
446
540
return table.clone (defaultVisitor )
447
541
end
0 commit comments