@@ -15,6 +15,7 @@ type Visitor = {
1515 visitCompoundAssign : (T .AstStatCompoundAssign ) -> boolean ,
1616 visitFunction : (T .AstStatFunction ) -> boolean ,
1717 visitLocalFunction : (T .AstStatLocalFunction ) -> boolean ,
18+ visitTypeAlias : (T .AstStatTypeAlias ) -> boolean ,
1819
1920 visitLocalReference : (T .AstExprLocal ) -> boolean ,
2021 visitGlobal : (T .AstExprGlobal ) -> boolean ,
@@ -28,6 +29,12 @@ type Visitor = {
2829 visitIndexExpr : (T .AstExprIndexExpr ) -> boolean ,
2930 visitGroup : (T .AstExprGroup ) -> boolean ,
3031
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+
3138 visitToken : (T .Token ) -> boolean ,
3239 visitNil : (T .AstExprConstantNil ) -> boolean ,
3340 visitString : (T .AstExprConstantString ) -> boolean ,
@@ -54,6 +61,7 @@ local defaultVisitor: Visitor = {
5461 visitCompoundAssign = alwaysVisit :: any ,
5562 visitFunction = alwaysVisit :: any ,
5663 visitLocalFunction = alwaysVisit :: any ,
64+ visitTypeAlias = alwaysVisit :: any ,
5765
5866 visitLocalReference = alwaysVisit :: any ,
5967 visitGlobal = alwaysVisit :: any ,
@@ -67,6 +75,12 @@ local defaultVisitor: Visitor = {
6775 visitIndexExpr = alwaysVisit :: any ,
6876 visitGroup = alwaysVisit :: any ,
6977
78+ visitTypeReference = alwaysVisit :: any ,
79+ visitTypeBoolean = alwaysVisit :: any ,
80+ visitTypeString = alwaysVisit :: any ,
81+ visitTypeTypeof = alwaysVisit :: any ,
82+ visitTypeGroup = alwaysVisit :: any ,
83+
7084 visitToken = alwaysVisit :: any ,
7185 visitNil = alwaysVisit :: any ,
7286 visitString = alwaysVisit :: any ,
@@ -209,6 +223,18 @@ local function visitCompoundAssign(node: T.AstStatCompoundAssign, visitor: Visit
209223 end
210224end
211225
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+
212238local function visitString (node : T .AstExprConstantString , visitor : Visitor )
213239 if visitor .visitString (node ) then
214240 visitor .visitToken (node )
@@ -370,6 +396,56 @@ local function visitGroup(node: T.AstExprGroup, visitor: Visitor)
370396 end
371397end
372398
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+
373449function visitExpression (expression : T .AstExpr , visitor : Visitor )
374450 if expression .tag == "nil" then
375451 visitNil (expression , visitor )
@@ -437,11 +513,29 @@ function visitStatement(statement: T.AstStat, visitor: Visitor)
437513 visitFunction (statement , visitor )
438514 elseif statement .tag == "localfunction" then
439515 visitLocalFunction (statement , visitor )
516+ elseif statement .tag == "typealias" then
517+ visitTypeAlias (statement , visitor )
440518 else
441519 exhaustiveMatch (statement .tag )
442520 end
443521end
444522
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+
445539local function createVisitor ()
446540 return table.clone (defaultVisitor )
447541end
0 commit comments