diff options
author | Simon Feltman <sfeltman@src.gnome.org> | 2013-12-31 21:45:21 -0800 |
---|---|---|
committer | Simon Feltman <sfeltman@src.gnome.org> | 2013-12-31 21:45:21 -0800 |
commit | 826c0e63eabac68fd665335950d311988a1405e3 (patch) | |
tree | 26ea7c8f7f357dcf96e8d65b6819ee1918fd0d5b | |
parent | aeccdaddf32dc7b48a79a1cd95a421a26895c9b2 (diff) | |
download | pygobject-826c0e63eabac68fd665335950d311988a1405e3.tar.gz |
docs: Add return values and skip implicit out arguments in functions
Add gi.CallableInfo.skip_return static binding for testing if the return
value should show up in docs. Skip implicit list index arguments for out
values.
https://bugzilla.gnome.org/show_bug.cgi?id=697356
-rw-r--r-- | gi/docstring.py | 26 | ||||
-rw-r--r-- | gi/pygi-info.c | 7 | ||||
-rw-r--r-- | tests/test_docstring.py | 6 |
3 files changed, 34 insertions, 5 deletions
diff --git a/gi/docstring.py b/gi/docstring.py index b4ae43c4..22fc6adf 100644 --- a/gi/docstring.py +++ b/gi/docstring.py @@ -130,6 +130,8 @@ def _generate_callable_info_function_signature(info): elif info.is_constructor(): in_args_strs = ['cls'] + hint_blacklist = ('void',) + # Build a lists of indices prior to adding the docs because # because it is possible the index retrieved comes before in # argument being used. @@ -145,7 +147,7 @@ def _generate_callable_info_function_signature(info): continue argstr = arg.get_name() hint = _get_pytype_hint(arg.get_type()) - if hint not in ('void',): + if hint not in hint_blacklist: argstr += ':' + hint if arg.may_be_null() or i in user_data_indices: # allow-none or user_data from a closure @@ -155,10 +157,24 @@ def _generate_callable_info_function_signature(info): in_args_strs.append(argstr) in_args_str = ', '.join(in_args_strs) - if out_args: - out_args_str = ', '.join(arg.get_name() + ':' + _get_pytype_hint(arg.get_type()) - for arg in out_args) - return '%s(%s) -> %s' % (info.get_name(), in_args_str, out_args_str) + out_args_strs = [] + return_hint = _get_pytype_hint(info.get_return_type()) + if not info.skip_return and return_hint and return_hint not in hint_blacklist: + if info.may_return_null(): + argstr += ' or None' + out_args_strs.append(return_hint) + + for i, arg in enumerate(out_args): + if i in ignore_indices: + continue + argstr = arg.get_name() + hint = _get_pytype_hint(arg.get_type()) + if hint not in hint_blacklist: + argstr += ':' + hint + out_args_strs.append(argstr) + + if out_args_strs: + return '%s(%s) -> %s' % (info.get_name(), in_args_str, ', '.join(out_args_strs)) else: return '%s(%s)' % (info.get_name(), in_args_str) diff --git a/gi/pygi-info.c b/gi/pygi-info.c index 2f978206..95303b82 100644 --- a/gi/pygi-info.c +++ b/gi/pygi-info.c @@ -730,6 +730,12 @@ _wrap_g_callable_info_may_return_null (PyGIBaseInfo *self) } static PyObject * +_wrap_g_callable_info_skip_return (PyGIBaseInfo *self) +{ + return PyBool_FromLong (g_callable_info_skip_return (self->info)); +} + +static PyObject * _wrap_g_callable_info_get_return_attribute (PyGIBaseInfo *self, PyObject *py_name) { gchar *name; @@ -757,6 +763,7 @@ static PyMethodDef _PyGICallableInfo_methods[] = { { "get_return_type", (PyCFunction) _wrap_g_callable_info_get_return_type, METH_NOARGS }, { "get_caller_owns", (PyCFunction) _wrap_g_callable_info_get_caller_owns, METH_NOARGS }, { "may_return_null", (PyCFunction) _wrap_g_callable_info_may_return_null, METH_NOARGS }, + { "skip_return", (PyCFunction) _wrap_g_callable_info_skip_return, METH_NOARGS }, { "get_return_attribute", (PyCFunction) _wrap_g_callable_info_get_return_attribute, METH_O }, { NULL, NULL, 0 } }; diff --git a/tests/test_docstring.py b/tests/test_docstring.py index 1cae95cc..e117b0dd 100644 --- a/tests/test_docstring.py +++ b/tests/test_docstring.py @@ -63,3 +63,9 @@ class Test(unittest.TestCase): def test_array_length_arg(self): self.assertEqual(GIMarshallingTests.array_in.__doc__, 'array_in(ints:list)') + + def test_init_function(self): + # This tests implicit array length args along with skipping a + # boolean return + self.assertEqual(GIMarshallingTests.init_function.__doc__, + 'init_function(argv:list=None) -> argv:list') |