Skip to content

Commit 716309a

Browse files
committed
expose declaration nodes
1 parent a364003 commit 716309a

File tree

119 files changed

+679
-117
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

119 files changed

+679
-117
lines changed

src/parse.js

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ export function parseCell(input, {tag, raw, globals, ...options} = {}) {
2323
}
2424
parseReferences(cell, input, globals);
2525
parseFeatures(cell, input);
26+
parseDeclarations(cell);
2627
return cell;
2728
}
2829

@@ -423,3 +424,40 @@ function parseFeatures(cell, input) {
423424
}
424425
return cell;
425426
}
427+
428+
// Find declarations: things that this cell defines.
429+
function parseDeclarations(cell) {
430+
if (!cell.body) {
431+
cell.declarations = [];
432+
} else if (cell.body.type === "ImportDeclaration") {
433+
cell.declarations = cell.body.specifiers.map(s => s.local);
434+
} else if (!cell.id) {
435+
cell.declarations = [];
436+
} else {
437+
switch (cell.id.type) {
438+
case "Identifier":
439+
case "ViewExpression":
440+
case "MutableExpression":
441+
cell.declarations = [cell.id];
442+
break;
443+
case "ArrayPattern":
444+
case "ObjectPattern":
445+
cell.declarations = [];
446+
declarePattern(cell.id, node => cell.declarations.push(node));
447+
break;
448+
default: throw new Error(`unexpected identifier: ${cell.id.type}`);
449+
}
450+
}
451+
}
452+
453+
function declarePattern(node, callback) {
454+
switch (node.type) {
455+
case "Identifier": callback(node); break;
456+
case "ObjectPattern": node.properties.forEach(node => declarePattern(node, callback)); break;
457+
case "ArrayPattern": node.elements.forEach(node => node && declarePattern(node, callback)); break;
458+
case "Property": declarePattern(node.value, callback); break;
459+
case "RestElement": declarePattern(node.argument, callback); break;
460+
case "AssignmentPattern": declarePattern(node.left, callback); break;
461+
default: throw new Error(`illegal declaration: ${node.type}`);
462+
}
463+
}

test/output/anonymous-block-cell.js.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,5 +27,6 @@
2727
"references": [],
2828
"fileAttachments": [],
2929
"databaseClients": [],
30-
"secrets": []
30+
"secrets": [],
31+
"declarations": []
3132
}

test/output/anonymous-expression-cell.js.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,6 @@
1515
"references": [],
1616
"fileAttachments": [],
1717
"databaseClients": [],
18-
"secrets": []
18+
"secrets": [],
19+
"declarations": []
1920
}

test/output/anonymous-function.js.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,5 +37,6 @@
3737
"references": [],
3838
"fileAttachments": [],
3939
"databaseClients": [],
40-
"secrets": []
40+
"secrets": [],
41+
"declarations": []
4142
}

test/output/await-block-cell.js.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,5 +38,6 @@
3838
],
3939
"fileAttachments": [],
4040
"databaseClients": [],
41-
"secrets": []
41+
"secrets": [],
42+
"declarations": []
4243
}

test/output/await-in-arrow-function-expression.js.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,5 +48,6 @@
4848
],
4949
"fileAttachments": [],
5050
"databaseClients": [],
51-
"secrets": []
51+
"secrets": [],
52+
"declarations": []
5253
}

test/output/await-in-arrow-function.js.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,5 +74,6 @@
7474
],
7575
"fileAttachments": [],
7676
"databaseClients": [],
77-
"secrets": []
77+
"secrets": [],
78+
"declarations": []
7879
}

test/output/await-in-class.js.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,5 +88,6 @@
8888
],
8989
"fileAttachments": [],
9090
"databaseClients": [],
91-
"secrets": []
91+
"secrets": [],
92+
"declarations": []
9293
}

test/output/await-in-function.js.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,5 +60,6 @@
6060
],
6161
"fileAttachments": [],
6262
"databaseClients": [],
63-
"secrets": []
63+
"secrets": [],
64+
"declarations": []
6465
}

test/output/await-in-markdown.md.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,5 +88,6 @@
8888
],
8989
"fileAttachments": [],
9090
"databaseClients": [],
91-
"secrets": []
91+
"secrets": [],
92+
"declarations": []
9293
}

0 commit comments

Comments
 (0)