Update resolving __doc__

This commit is contained in:
Semyon Proshev
2016-07-07 14:18:52 +03:00
parent 99a4e93870
commit 55f511f825
2 changed files with 24 additions and 2 deletions
@@ -247,9 +247,24 @@ public class PyReferenceImpl implements PsiReferenceEx, PsiPolyVariantReference
// Use real context here to enable correct completion and resolve in case of PyExpressionCodeFragment
final PsiElement realContext = PyPsiUtils.getRealContext(myElement);
PsiElement roof = findResolveRoof(referencedName, realContext);
final PsiElement roof = findResolveRoof(referencedName, realContext);
PyResolveUtil.scopeCrawlUp(processor, myElement, referencedName, roof);
return getResultsFromProcessor(referencedName, processor, realContext, roof);
final List<RatedResolveResult> resultsFromProcessor = getResultsFromProcessor(referencedName, processor, realContext, roof);
// resolve to module __doc__
if (resultsFromProcessor.isEmpty() && referencedName.equals(PyNames.DOC)) {
ret.addAll(
Optional
.ofNullable(PyBuiltinCache.getInstance(myElement).getObjectType())
.map(type -> type.resolveMember(referencedName, myElement, AccessDirection.of(myElement), myContext))
.orElse(Collections.emptyList())
);
return ret;
}
return resultsFromProcessor;
}
protected List<RatedResolveResult> getResultsFromProcessor(@NotNull String referencedName,
@@ -199,6 +199,13 @@ public class PyClassTypeImpl extends UserDataHolderBase implements PyClassType {
return ResolveResultList.to(classMember);
}
if (PyNames.DOC.equals(name)) {
return Optional
.ofNullable(PyBuiltinCache.getInstance(myClass).getObjectType())
.map(type -> type.resolveMember(name, location, direction, resolveContext))
.orElse(Collections.emptyList());
}
classMember = resolveByOverridingAncestorsMembersProviders(this, name, location);
if (classMember != null) {
final ResolveResultList list = new ResolveResultList();