(srv, query, file)
| 967 | }; |
| 968 | |
| 969 | function findDef(srv, query, file) { |
| 970 | var expr = findExpr(file, query); |
| 971 | var type = findExprType(srv, query, file, expr); |
| 972 | if (infer.didGuess()) return {}; |
| 973 | |
| 974 | var span = getSpan(type); |
| 975 | var result = {url: type.url, doc: parseDoc(query, type.doc), origin: type.origin}; |
| 976 | |
| 977 | if (type.types) for (var i = type.types.length - 1; i >= 0; --i) { |
| 978 | var tp = type.types[i]; |
| 979 | storeTypeDocs(query, tp, result); |
| 980 | if (!span) span = getSpan(tp); |
| 981 | } |
| 982 | |
| 983 | if (span && span.node) { // refers to a loaded file |
| 984 | var spanFile = span.node.sourceFile || srv.fileMap[span.origin]; |
| 985 | var start = outputPos(query, spanFile, span.node.start), end = outputPos(query, spanFile, span.node.end); |
| 986 | result.start = start; result.end = end; |
| 987 | result.file = span.origin; |
| 988 | var cxStart = Math.max(0, span.node.start - 50); |
| 989 | result.contextOffset = span.node.start - cxStart; |
| 990 | result.context = spanFile.text.slice(cxStart, cxStart + 50); |
| 991 | } else if (span) { // external |
| 992 | result.file = span.origin; |
| 993 | storeSpan(srv, query, span, result); |
| 994 | } |
| 995 | return clean(result); |
| 996 | } |
| 997 | |
| 998 | function findRefsToVariable(srv, query, file, expr, isRename) { |
| 999 | var name = expr.node.name; |
nothing calls this directly
no test coverage detected