(srv, query, file, expr)
| 892 | } |
| 893 | |
| 894 | function findExprType(srv, query, file, expr) { |
| 895 | var type; |
| 896 | if (expr) { |
| 897 | infer.resetGuessing(); |
| 898 | type = infer.expressionType(expr); |
| 899 | } |
| 900 | var typeHandlers = srv.hasHandler("typeAt"); |
| 901 | if (typeHandlers) { |
| 902 | var pos = resolvePos(file, query.end); |
| 903 | for (var i = 0; i < typeHandlers.length; i++) |
| 904 | type = typeHandlers[i](file, pos, expr, type); |
| 905 | } |
| 906 | if (!type) throw ternError("No type found at the given position."); |
| 907 | |
| 908 | var objProp; |
| 909 | if (expr.node.type == "ObjectExpression" && query.end != null && |
| 910 | (objProp = pointInProp(expr.node, resolvePos(file, query.end)))) { |
| 911 | var name = objProp.key.name; |
| 912 | var fromCx = ensureObj(infer.typeFromContext(file.ast, expr)); |
| 913 | if (fromCx && fromCx.hasProp(name)) { |
| 914 | type = fromCx.hasProp(name); |
| 915 | } else { |
| 916 | var fromLocal = ensureObj(type); |
| 917 | if (fromLocal && fromLocal.hasProp(name)) |
| 918 | type = fromLocal.hasProp(name); |
| 919 | } |
| 920 | } |
| 921 | return type; |
| 922 | } |
| 923 | |
| 924 | function findTypeAtExpr(srv, query, file, expr) { |
| 925 | var exprName, exprType; |
no test coverage detected
searching dependent graphs…