]>
dreyeck.freedombox.rocks Git - idiomatic.git/blob - visitor.js
61d26809dfeb49a17a59ad1fc4096c0b4bc0ee3b
2 let log
= false ? console
.log
: () => null
6 Program({body
}) {body
.map(walk
)},
7 VariableDeclaration({kind
,declarations
}) {declarations
.map(walk
)},
8 VariableDeclarator({id
,init
}) {walk(id
);if(init
)walk(init
)},
9 Identifier({start
,name
}) {doit(name
); log(start
,name
)},
10 CallExpression({callee
}) {walk(callee
); arguments
[0]['arguments'].map(walk
)},
11 NewExpression({callee
}) {walk(callee
); arguments
[0]['arguments'].map(walk
)},
12 FunctionExpression({params
,body
}) {params
.map(walk
); walk(body
)},
13 MemberExpression({object
,property
}) {walk(object
); walk(property
)},
14 ObjectPattern({properties
}) {properties
.map(walk
)},
15 ExpressionStatement({expression
}) {walk(expression
)},
16 IfStatement({test
,consequent
}) {walk(test
); walk(consequent
)},
17 BlockStatement({body
}) {body
.map(walk
)},
18 ReturnStatement({argument
}) {if(argument
)walk(argument
)},
20 Literal({start
,value
,raw
}) {log(start
,raw
)},
21 AssignmentExpression({operator
,left
,right
}) {log(operator
);walk(left
);walk(right
)},
22 LogicalExpression({operator
,left
,right
}) {log(operator
);walk(left
);walk(right
)},
23 BinaryExpression({operator
,left
,right
}) {log(operator
);walk(left
);walk(right
)},
24 UnaryExpression({operator
,prefix
,argument
}) {log(prefix
?'prefix':'suffix',operator
); walk(argument
)},
25 UpdateExpression({operator
,prefix
,argument
}) {log(prefix
?'prefix':'suffix',operator
); walk(argument
)},
26 ObjectExpression({properties
}) {properties
.map(walk
)},
27 Property({key
,value
}) {walk(key
);walk(value
)},
28 ArrayExpression({elements
}) {elements
.map(walk
)},
29 ArrayPattern({elements
}) {elements
.map(walk
)},
30 ArrowFunctionExpression({params
,body
}) {params
.map(walk
);walk(body
)},
31 TemplateLiteral({expressions
,quasis
}) {quasis
.map(walk
);expressions
.map(walk
)},
32 TemplateElement({start
,end
}) {log(end
-start
,'bytes')},
34 ForStatement({init
,test
,update
,body
}) {walk(init
);walk(test
);walk(update
);walk(body
)},
35 ForInStatement({left
,right
,body
}) {walk(left
); walk(right
); walk(body
)},
36 ForOfStatement({left
,right
,body
}) {walk(left
); walk(right
); walk(body
)},
37 ChainExpression({expression
}) {walk(expression
)},
38 ConditionalExpression({test
,consequent
,alternative
}) {walk(test
);walk(consequent
);walk(alternative
)},
39 ContinueStatement(){},
42 AssignmentPattern({left
,right
}) {walk(left
);walk(right
)},
43 WhileStatement({test
,body
}) {walk(test
);walk(body
)},
44 TryStatement({block
,handler
,finalizer
}) {walk(block
);walk(handler
);walk(finalizer
)},
45 CatchClause({param
,body
}) {walk(param
);walk(body
)},
48 AwaitExpression({argument
}) {walk(argument
)},
49 ThrowStatement({argument
}) {walk(argument
)},
50 SwitchStatement({discriminant
,cases
}) {walk(discriminant
); cases
.map(walk
)},
51 SwitchCase({test
,consequent
}) {walk(test
); consequent
.map(walk
)},
52 RestElement({argument
}) {walk(argument
)},
53 ImportExpression({source
}) {walk(source
)},
54 FunctionDeclaration({id
,params
,body
}) {walk(id
),params
.map(walk
),walk(body
)},
56 ThisExpression({context
}) {walk(context
)},
58 DoWhileStatement({test
,body
}) {walk(test
);walk(body
)},
59 SequenceExpression({expressions
}) {expressions
.map(walk
)},
61 SpreadElement({argument
}) {walk(argument
)},
64 let each
= (branch
,stack
) => {}
65 function wander(mods
,doit
) {
67 for (const mod
of mods
) {
71 each
= (branch
,stack
) => {}
73 function walk(branch
) {
75 const type
= branch
?.type
;
76 stack
.unshift(branch
);
79 (rules
[type
]||fail
)(branch
);
83 function fail(branch
) {
84 console
.log('FAIL',branch
)
87 module
.exports
= {wander
}