MCPcopy Index your code
hub / github.com/ternjs/tern / findRefsToVariable

Function findRefsToVariable

lib/tern.js:1063–1115  ·  view source on GitHub ↗
(srv, query, file, expr, isRename)

Source from the content-addressed store, hash-verified

1061 }
1062
1063 function findRefsToVariable(srv, query, file, expr, isRename) {
1064 var name = expr.node.name;
1065
1066 for (var scope = expr.state; scope && !(name in scope.props); scope = scope.prev) {}
1067 if (!scope) throw ternError("Could not find a definition for " + name);
1068
1069 var type, refs = [];
1070 function storeRef(file) {
1071 return function(node, scopeHere, ancestors) {
1072 var value = {file: file.name,
1073 start: outputPos(query, file, node.start),
1074 end: outputPos(query, file, node.end)};
1075 if (isRename) {
1076 for (var s = scopeHere; s != scope; s = s.prev) {
1077 var exists = s.hasProp(isRename);
1078 if (exists)
1079 throw ternError("Renaming `" + name + "` to `" + isRename + "` would make a variable at line " +
1080 (asLineChar(file, node.start).line + 1) + " point to the definition at line " +
1081 (asLineChar(file, exists.name.start).line + 1));
1082 }
1083 var parent = ancestors[ancestors.length - 2];
1084 if (parent && parent.type == "Property" && parent.key == parent.value)
1085 value.isShorthand = true;
1086 }
1087 refs.push(value);
1088 };
1089 }
1090
1091 if (scope.originNode) {
1092 type = "local";
1093 if (isRename) {
1094 for (var prev = scope.prev; prev; prev = prev.prev)
1095 if (isRename in prev.props) break;
1096 if (prev) infer.findRefs(scope.originNode, scope, isRename, prev, function(node) {
1097 throw ternError("Renaming `" + name + "` to `" + isRename + "` would shadow the definition used at line " +
1098 (asLineChar(file, node.start).line + 1));
1099 });
1100 }
1101 infer.findRefs(scope.originNode, scope, name, scope, storeRef(file));
1102 } else {
1103 type = "global";
1104 if (query.onlySourceFile) {
1105 infer.findRefs(file.ast, file.scope, name, scope, storeRef(file));
1106 } else {
1107 for (var i = 0; i < srv.files.length; ++i) {
1108 var cur = srv.files[i];
1109 infer.findRefs(cur.ast, cur.scope, name, scope, storeRef(cur));
1110 }
1111 }
1112 }
1113
1114 return {refs: refs, type: type, name: name};
1115 }
1116
1117 function findRefsToProperty(srv, query, sourceFile, expr, prop) {
1118 var exprType = infer.expressionType(expr);

Callers 2

findRefsFunction · 0.85
buildRenameFunction · 0.85

Calls 3

ternErrorFunction · 0.85
asLineCharFunction · 0.85
storeRefFunction · 0.85

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…