fixed item 3 of PY-5673 Incomplete/incorrect rendering of Sphinx/rst docstrings

This commit is contained in:
Ekaterina Tuzova
2012-05-05 17:25:23 +04:00
parent ff81273e5a
commit d14a19c5b8
3 changed files with 26 additions and 3 deletions
@@ -20,9 +20,13 @@ import com.jetbrains.python.console.PyConsoleUtil;
import com.jetbrains.python.psi.*;
import com.jetbrains.python.psi.impl.PyBuiltinCache;
import com.jetbrains.python.psi.impl.PyCallExpressionHelper;
import com.jetbrains.python.psi.resolve.*;
import com.jetbrains.python.psi.resolve.PyResolveContext;
import com.jetbrains.python.psi.resolve.QualifiedResolveResult;
import com.jetbrains.python.psi.resolve.RootVisitor;
import com.jetbrains.python.psi.resolve.RootVisitorHost;
import com.jetbrains.python.psi.types.PyClassType;
import com.jetbrains.python.psi.types.PyType;
import com.jetbrains.python.psi.types.PyTypeParser;
import com.jetbrains.python.psi.types.TypeEvalContext;
import com.jetbrains.python.toolbox.ChainIterable;
import com.jetbrains.python.toolbox.Maybe;
@@ -356,7 +360,14 @@ class DocumentationBuilder {
final String name = followed.getName();
final String type = structuredDocString.getParamType(name);
if (type != null) {
myBody.addItem(": ").addItem(type);
final PyType pyType = PyTypeParser.getTypeByName(followed, type);
if (pyType instanceof PyClassType && ((PyClassType)pyType).getPyClass() != null) {
myBody.addItem(": ").
addWith(new DocumentationBuilderKit.LinkWrapper(PythonDocumentationProvider.LINK_TYPE_PARAM),
$(pyType.getName()));
}
else
myBody.addItem(": ").addItem(type);
}
final String desc = structuredDocString.getParamDescription(name);
if (desc != null) {
@@ -46,6 +46,7 @@ public class PythonDocumentationProvider extends AbstractDocumentationProvider i
@NonNls static final String LINK_TYPE_CLASS = "#class#";
@NonNls static final String LINK_TYPE_PARENT = "#parent#";
@NonNls static final String LINK_TYPE_PARAM = "#param#";
@NonNls private static final String RST_PREFIX = ":";
@NonNls private static final String EPYDOC_PREFIX = "@";
@@ -287,6 +288,9 @@ public class PythonDocumentationProvider extends AbstractDocumentationProvider i
if (link.equals(LINK_TYPE_CLASS)) {
return inferContainingClassOf(context);
}
else if (link.equals(LINK_TYPE_PARAM)) {
return inferClassOfParameter(context);
}
else if (link.startsWith(LINK_TYPE_PARENT)) {
PyClass cls = inferContainingClassOf(context);
if (cls != null) {
@@ -439,6 +443,14 @@ public class PythonDocumentationProvider extends AbstractDocumentationProvider i
else return PsiTreeUtil.getParentOfType(context, PyClass.class);
}
@Nullable
private static PyClass inferClassOfParameter(PsiElement context) {
final PyType type = ((PyNamedParameter)context).getType(TypeEvalContext.fast());
if (type instanceof PyClassType)
return ((PyClassType)type).getPyClass();
return null;
}
public static final DocumentationBuilderKit.LinkWrapper LinkMyClass = new DocumentationBuilderKit.LinkWrapper(LINK_TYPE_CLASS); // link item to containing class
public static String generateDocumentationContentStub(PyFunction element, String offset, boolean checkReturn) {
+1 -1
View File
@@ -1 +1 @@
<html><body><code>name: str</code><br>The name to convert to a label. This must be a string which could be used as a Python identifier. Strings which do not take this form will result in unpredictable behavior.</body></html>
<html><body><code>name: <a href="psi_element://#param#">str</a></code><br>The name to convert to a label. This must be a string which could be used as a Python identifier. Strings which do not take this form will result in unpredictable behavior.</body></html>