isReferenced.js
  1  "use strict";
  2  
  3  Object.defineProperty(exports, "__esModule", {
  4    value: true
  5  });
  6  exports.default = isReferenced;
  7  
  8  function isReferenced(node, parent, grandparent) {
  9    switch (parent.type) {
 10      case "MemberExpression":
 11      case "OptionalMemberExpression":
 12        if (parent.property === node) {
 13          return !!parent.computed;
 14        }
 15  
 16        return parent.object === node;
 17  
 18      case "JSXMemberExpression":
 19        return parent.object === node;
 20  
 21      case "VariableDeclarator":
 22        return parent.init === node;
 23  
 24      case "ArrowFunctionExpression":
 25        return parent.body === node;
 26  
 27      case "PrivateName":
 28        return false;
 29  
 30      case "ClassMethod":
 31      case "ClassPrivateMethod":
 32      case "ObjectMethod":
 33        if (parent.key === node) {
 34          return !!parent.computed;
 35        }
 36  
 37        return false;
 38  
 39      case "ObjectProperty":
 40        if (parent.key === node) {
 41          return !!parent.computed;
 42        }
 43  
 44        return !grandparent || grandparent.type !== "ObjectPattern";
 45  
 46      case "ClassProperty":
 47        if (parent.key === node) {
 48          return !!parent.computed;
 49        }
 50  
 51        return true;
 52  
 53      case "ClassPrivateProperty":
 54        return parent.key !== node;
 55  
 56      case "ClassDeclaration":
 57      case "ClassExpression":
 58        return parent.superClass === node;
 59  
 60      case "AssignmentExpression":
 61        return parent.right === node;
 62  
 63      case "AssignmentPattern":
 64        return parent.right === node;
 65  
 66      case "LabeledStatement":
 67        return false;
 68  
 69      case "CatchClause":
 70        return false;
 71  
 72      case "RestElement":
 73        return false;
 74  
 75      case "BreakStatement":
 76      case "ContinueStatement":
 77        return false;
 78  
 79      case "FunctionDeclaration":
 80      case "FunctionExpression":
 81        return false;
 82  
 83      case "ExportNamespaceSpecifier":
 84      case "ExportDefaultSpecifier":
 85        return false;
 86  
 87      case "ExportSpecifier":
 88        if (grandparent != null && grandparent.source) {
 89          return false;
 90        }
 91  
 92        return parent.local === node;
 93  
 94      case "ImportDefaultSpecifier":
 95      case "ImportNamespaceSpecifier":
 96      case "ImportSpecifier":
 97        return false;
 98  
 99      case "ImportAttribute":
100        return false;
101  
102      case "JSXAttribute":
103        return false;
104  
105      case "ObjectPattern":
106      case "ArrayPattern":
107        return false;
108  
109      case "MetaProperty":
110        return false;
111  
112      case "ObjectTypeProperty":
113        return parent.key !== node;
114  
115      case "TSEnumMember":
116        return parent.id !== node;
117  
118      case "TSPropertySignature":
119        if (parent.key === node) {
120          return !!parent.computed;
121        }
122  
123        return true;
124    }
125  
126    return true;
127  }