Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/sphinx-doc/sphinx.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTakeshi KOMIYA <i.tkomiya@gmail.com>2020-03-22 12:58:26 +0300
committerTakeshi KOMIYA <i.tkomiya@gmail.com>2020-03-22 17:13:49 +0300
commit5c396b6325349fe577f21bc7e1db8f96aaa4f5be (patch)
tree32b950d091908722560016027ec6bc8cb981dd66
parent5138255665f1c724bd0ac239add6cabd68f7a9d4 (diff)
Fix #7331: autodoc: a cython-function is not recognized as a function
-rw-r--r--CHANGES1
-rw-r--r--setup.py1
-rw-r--r--sphinx/ext/autodoc/__init__.py3
-rw-r--r--tests/roots/test-ext-autodoc/target/cython.pyx4
-rw-r--r--tests/test_autodoc.py26
5 files changed, 34 insertions, 1 deletions
diff --git a/CHANGES b/CHANGES
index c79f7c6fe..d4df88f30 100644
--- a/CHANGES
+++ b/CHANGES
@@ -132,6 +132,7 @@ Bugs fixed
* #7267: autodoc: error message for invalid directive options has wrong location
* #7329: autodoc: info-field-list is wrongly generated from type hints into the
class description even if ``autoclass_content='class'`` set
+* #7331: autodoc: a cython-function is not recognized as a function
* #5637: inheritance_diagram: Incorrect handling of nested class names
* #7139: ``code-block:: guess`` does not work
* #7325: html: source_suffix containing dot leads to wrong source link
diff --git a/setup.py b/setup.py
index 088d5b8e7..a427d5493 100644
--- a/setup.py
+++ b/setup.py
@@ -52,6 +52,7 @@ extras_require = {
'pytest-cov',
'html5lib',
'typed_ast', # for py35-37
+ 'cython',
],
}
diff --git a/sphinx/ext/autodoc/__init__.py b/sphinx/ext/autodoc/__init__.py
index a81842c4a..becf2915e 100644
--- a/sphinx/ext/autodoc/__init__.py
+++ b/sphinx/ext/autodoc/__init__.py
@@ -1011,7 +1011,8 @@ class FunctionDocumenter(DocstringSignatureMixin, ModuleLevelDocumenter): # typ
if self.env.config.autodoc_typehints in ('none', 'description'):
kwargs.setdefault('show_annotation', False)
- if inspect.isbuiltin(self.object) or inspect.ismethoddescriptor(self.object):
+ if ((inspect.isbuiltin(self.object) or inspect.ismethoddescriptor(self.object)) and
+ not inspect.is_cython_function_or_method(self.object)):
# cannot introspect arguments of a C function or method
return None
try:
diff --git a/tests/roots/test-ext-autodoc/target/cython.pyx b/tests/roots/test-ext-autodoc/target/cython.pyx
new file mode 100644
index 000000000..a3714f4a6
--- /dev/null
+++ b/tests/roots/test-ext-autodoc/target/cython.pyx
@@ -0,0 +1,4 @@
+# cython: binding=True
+
+def foo(*args, **kwargs):
+ """Docstring."""
diff --git a/tests/test_autodoc.py b/tests/test_autodoc.py
index 012292999..26a157002 100644
--- a/tests/test_autodoc.py
+++ b/tests/test_autodoc.py
@@ -22,6 +22,13 @@ from sphinx.testing.util import SphinxTestApp, Struct # NOQA
from sphinx.util import logging
from sphinx.util.docutils import LoggingReporter
+try:
+ # Enable pyximport to test cython module
+ import pyximport
+ pyximport.install()
+except ImportError:
+ pyximport = None
+
app = None
@@ -1609,3 +1616,22 @@ def test_singledispatchmethod():
' A method for general use.',
'',
]
+
+
+@pytest.mark.usefixtures('setup_test')
+@pytest.mark.skipif(pyximport is None, reason='cython is not installed')
+def test_cython():
+ options = {"members": None,
+ "undoc-members": None}
+ actual = do_autodoc(app, 'module', 'target.cython', options)
+ assert list(actual) == [
+ '',
+ '.. py:module:: target.cython',
+ '',
+ '',
+ '.. py:function:: foo(*args, **kwargs)',
+ ' :module: target.cython',
+ '',
+ ' Docstring.',
+ '',
+ ]