1 | function isReference(node, parent) {
|
2 | if (node.type === 'MemberExpression') {
|
3 | return !node.computed && isReference(node.object, node);
|
4 | }
|
5 | if (node.type === 'Identifier') {
|
6 | if (!parent)
|
7 | return true;
|
8 | switch (parent.type) {
|
9 |
|
10 | case 'MemberExpression': return parent.computed || node === parent.object;
|
11 |
|
12 | case 'MethodDefinition': return parent.computed;
|
13 |
|
14 | case 'FieldDefinition': return parent.computed || node === parent.value;
|
15 |
|
16 | case 'Property': return parent.computed || node === parent.value;
|
17 |
|
18 |
|
19 | case 'ExportSpecifier':
|
20 | case 'ImportSpecifier': return node === parent.local;
|
21 |
|
22 | case 'LabeledStatement':
|
23 | case 'BreakStatement':
|
24 | case 'ContinueStatement': return false;
|
25 | default: return true;
|
26 | }
|
27 | }
|
28 | return false;
|
29 | }
|
30 |
|
31 | export default isReference;
|