MCPcopy Create free account
hub / github.com/OpenEndedGroup/Field2 / findRefsToVariable

Function findRefsToVariable

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

Source from the content-addressed store, hash-verified

996 }
997
998 function findRefsToVariable(srv, query, file, expr, isRename) {
999 var name = expr.node.name;
1000
1001 for (var scope = expr.state; scope && !(name in scope.props); scope = scope.prev) {}
1002 if (!scope) throw ternError("Could not find a definition for " + name);
1003
1004 var type, refs = [];
1005 function storeRef(file) {
1006 return function(node, scopeHere, ancestors) {
1007 var value = {file: file.name,
1008 start: outputPos(query, file, node.start),
1009 end: outputPos(query, file, node.end)}
1010 if (isRename) {
1011 for (var s = scopeHere; s != scope; s = s.prev) {
1012 var exists = s.hasProp(isRename);
1013 if (exists)
1014 throw ternError("Renaming `" + name + "` to `" + isRename + "` would make a variable at line " +
1015 (asLineChar(file, node.start).line + 1) + " point to the definition at line " +
1016 (asLineChar(file, exists.name.start).line + 1));
1017 }
1018 var parent = ancestors[ancestors.length - 2]
1019 if (parent && parent.type == "Property" && parent.key == parent.value)
1020 value.isShorthand = true
1021 }
1022 refs.push(value);
1023 };
1024 }
1025
1026 if (scope.originNode) {
1027 type = "local";
1028 if (isRename) {
1029 for (var prev = scope.prev; prev; prev = prev.prev)
1030 if (isRename in prev.props) break;
1031 if (prev) infer.findRefs(scope.originNode, scope, isRename, prev, function(node) {
1032 throw ternError("Renaming `" + name + "` to `" + isRename + "` would shadow the definition used at line " +
1033 (asLineChar(file, node.start).line + 1));
1034 });
1035 }
1036 infer.findRefs(scope.originNode, scope, name, scope, storeRef(file));
1037 } else {
1038 type = "global";
1039 if (query.onlySourceFile) {
1040 infer.findRefs(file.ast, file.scope, name, scope, storeRef(file));
1041 } else {
1042 for (var i = 0; i < srv.files.length; ++i) {
1043 var cur = srv.files[i];
1044 infer.findRefs(cur.ast, cur.scope, name, scope, storeRef(cur));
1045 }
1046 }
1047 }
1048
1049 return {refs: refs, type: type, name: name};
1050 }
1051
1052 function findRefsToProperty(srv, query, sourceFile, expr, prop) {
1053 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