Document the return type when translating Doxygen @return to Python.

In addition to translating the comment itself, also document the type of the
object returned. This is consistent with generating not only :param: but also
:type: for the parameters documented using @param.
This commit is contained in:
Vadim Zeitlin 2014-08-11 16:22:48 +02:00
commit 6aa9cd37a5
4 changed files with 49 additions and 22 deletions

View file

@ -13,6 +13,7 @@ commentVerifier.check(doxygen_basic_translate.function.__doc__,
Author: Some author Author: Some author
:rtype: int
:return: Some number :return: Some number
See also: function2 See also: function2
@ -86,6 +87,7 @@ commentVerifier.check(doxygen_basic_translate.Atan2.__doc__,
:param y: Vertical coordinate. :param y: Vertical coordinate.
:type x: float :type x: float
:param x: Horizontal coordinate. :param x: Horizontal coordinate.
:rtype: float
:return: Arc tangent of ``y/x``. :return: Arc tangent of ``y/x``.
""" """
) )

View file

@ -263,10 +263,13 @@ r"""
Another remarks section Another remarks section
:rtype: int
:return: Whatever :return: Whatever
:rtype: int
:return: it :return: it
:rtype: int
:return: may return :return: may return
""") """)

View file

@ -99,10 +99,13 @@ r"""
Another remarks section Another remarks section
:rtype: int
:return: Whatever :return: Whatever
:rtype: int
:return: it :return: it
:rtype: int
:return: may return :return: may return
See also: someOtherMethod See also: someOtherMethod

View file

@ -334,19 +334,15 @@ PyDocConverter::PyDocConverter(int flags) :
fillStaticTables(); fillStaticTables();
} }
std::string PyDocConverter::getParamType(std::string param) // Return the type as it should appear in the output documentation.
static
std::string getPyDocType(Node* n, const_String_or_char_ptr lname = "")
{ {
std::string type; std::string type;
ParmList *plist = CopyParmList(Getattr(currentNode, "parms")); String *s = Swig_typemap_lookup("doctype", n, lname, 0);
for (Parm *p = plist; p;p = nextSibling(p)) {
String* pname = Getattr(p, "name");
if (Char (pname) != param)
continue;
String *s = Swig_typemap_lookup("doctype", p, pname, 0);
if (!s) if (!s)
s = SwigType_str(Getattr(p, "type"), ""); s = SwigType_str(Getattr(n, "type"), "");
if (Language::classLookup(s)) { if (Language::classLookup(s)) {
// In Python C++ namespaces are flattened, so remove all but last component // In Python C++ namespaces are flattened, so remove all but last component
@ -366,6 +362,21 @@ std::string PyDocConverter::getParamType(std::string param)
} }
Delete(s); Delete(s);
return type;
}
std::string PyDocConverter::getParamType(std::string param)
{
std::string type;
ParmList *plist = CopyParmList(Getattr(currentNode, "parms"));
for (Parm *p = plist; p;p = nextSibling(p)) {
String* pname = Getattr(p, "name");
if (Char (pname) != param)
continue;
type = getPyDocType(p, pname);
break; break;
} }
Delete(plist); Delete(plist);
@ -619,6 +630,14 @@ void PyDocConverter::handleTagReturn(DoxygenEntity &tag,
{ {
IndentGuard indent(translatedComment, m_indent); IndentGuard indent(translatedComment, m_indent);
const std::string pytype = getPyDocType(currentNode);
if (!pytype.empty()) {
translatedComment += ":rtype: ";
translatedComment += pytype;
translatedComment += "\n";
translatedComment += indent.getFirstLineIndent();
}
translatedComment += ":return: "; translatedComment += ":return: ";
handleParagraph(tag, translatedComment); handleParagraph(tag, translatedComment);
} }