-
Notifications
You must be signed in to change notification settings - Fork 75
/
Copy pathplayground.nnb
68 lines (68 loc) · 2.51 KB
/
playground.nnb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
{
"cells": [
{
"language": "typescript",
"source": [
"var escope = require('escope');\r\nvar esprima = require('esprima');\r\nvar estraverse = require('estraverse');"
],
"outputs": [
{
"items": [
{
"mime": "application/vnd.code.notebook.stdout",
"value": [
"",
""
]
}
]
}
]
},
{
"language": "typescript",
"source": [
"const code = `\r\n function foo() {\r\n var a = 1;\r\n var b = 2;\r\n var c = 3;\r\n }\r\n`;"
],
"outputs": [
{
"items": [
{
"mime": "application/vnd.code.notebook.stdout",
"value": [
"",
""
]
}
]
}
]
},
{
"language": "typescript",
"source": [
"var ast = esprima.parse(code);\r\nvar scopeManager = escope.analyze(ast);\r\n\r\nvar currentScope = scopeManager.acquire(ast); // global scope\r\n\r\nestraverse.traverse(ast, {\r\n enter: function(node, parent) {\r\n // do stuff\r\n \r\n if (/Function/.test(node.type)) {\r\n currentScope = scopeManager.acquire(node); // get current function scope\r\n }\r\n },\r\n leave: function(node, parent) {\r\n if (/Function/.test(node.type)) {\r\n currentScope = currentScope.upper; // set to parent scope\r\n }\r\n \r\n // do stuff\r\n }\r\n});"
],
"outputs": [
{
"items": [
{
"mime": "application/vnd.code.notebook.stdout",
"value": [
"",
""
]
}
]
}
]
},
{
"language": "typescript",
"source": [
""
],
"outputs": []
}
]
}