mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
fixed item 3 of PY-5673 Incomplete/incorrect rendering of Sphinx/rst docstrings
This commit is contained in:
@@ -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 @@
|
||||
<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>
|
||||
Reference in New Issue
Block a user