(srv, query, file)
| 1032 | }; |
| 1033 | |
| 1034 | function findDef(srv, query, file) { |
| 1035 | var expr = findExpr(file, query); |
| 1036 | var type = findExprType(srv, query, file, expr); |
| 1037 | if (infer.didGuess()) return {}; |
| 1038 | |
| 1039 | var span = getSpan(type); |
| 1040 | var result = {url: type.url, doc: parseDoc(query, type.doc), origin: type.origin}; |
| 1041 | |
| 1042 | if (type.types) for (var i = type.types.length - 1; i >= 0; --i) { |
| 1043 | var tp = type.types[i]; |
| 1044 | storeTypeDocs(query, tp, result); |
| 1045 | if (!span) span = getSpan(tp); |
| 1046 | } |
| 1047 | |
| 1048 | if (span && span.node) { // refers to a loaded file |
| 1049 | var spanFile = span.node.sourceFile || srv.fileMap[span.origin]; |
| 1050 | var start = outputPos(query, spanFile, span.node.start), end = outputPos(query, spanFile, span.node.end); |
| 1051 | result.start = start; result.end = end; |
| 1052 | result.file = span.origin; |
| 1053 | var cxStart = Math.max(0, span.node.start - 50); |
| 1054 | result.contextOffset = span.node.start - cxStart; |
| 1055 | result.context = spanFile.text.slice(cxStart, cxStart + 50); |
| 1056 | } else if (span) { // external |
| 1057 | result.file = span.origin; |
| 1058 | storeSpan(srv, query, span, result); |
| 1059 | } |
| 1060 | return clean(result); |
| 1061 | } |
| 1062 | |
| 1063 | function findRefsToVariable(srv, query, file, expr, isRename) { |
| 1064 | var name = expr.node.name; |
nothing calls this directly
no test coverage detected
searching dependent graphs…