-
Notifications
You must be signed in to change notification settings - Fork 6
Closed
Description
Hi! First of all thank you for the scanpydoc.elegant_typehints
looks very nice, we are adopting it for a new project.
I am running into an issue that seems to happen only for python 3.7.6+ when trying to use the Callable
type hint. I have also verified that with python 3.8+ things are building ok.
For context my extension list in conf.py
:
extensions = [
"sphinx.ext.autodoc", # auto document docstrings
"sphinx.ext.napoleon", # autodoc understands numpy docstrings
# load after napoleon, improved compatibility with type hints annotations
"sphinx_autodoc_typehints",
"sphinx.ext.viewcode",
"sphinx.ext.intersphinx",
"sphinx.ext.autosectionlabel",
"sphinx-jsonschema",
"sphinx_rtd_theme",
"sphinx.ext.mathjax",
"nbsphinx",
"jupyter_sphinx",
"sphinxcontrib.blockdiag",
"sphinx_togglebutton",
"scanpydoc.elegant_typehints"
]
Problematic code:
from __future__ import annotations
import typing
def test_function(call: typing.Callable):
"""
Some doc
Parameters
----------
call:
some docs
"""
Running sphinx mode will raise an exception and not build the docs:
[autodoc] getattr(_, 'test_function')
[autodoc] => <function test_function at 0x134459680>
[app] emitting event: 'autodoc-before-process-signature'(<function test_function at 0x134459680>, False)
[app] emitting event: 'autodoc-process-signature'('function', 'quantify.analysis.fitting_models.test_function', <function test_function at 0x13445968
[app] emitting event: 'autodoc-process-docstring'('function', 'quantify.analysis.fitting_models.test_function', <function test_function at 0x13445968
[app] emitting event: 'build-finished'(ExtensionError("Handler <function process_docstring at 0x10a621cb0> for event 'autodoc-process-docs
Traceback (most recent call last):
File "/usr/local/anaconda3/envs/dclab/lib/python3.7/site-packages/sphinx/events.py", line 110, in emit
results.append(listener.handler(self.app, *args))
File "/usr/local/anaconda3/envs/dclab/lib/python3.7/site-packages/sphinx_autodoc_typehints.py", line 385, in process_docstring
annotation, fully_qualified=app.config.typehints_fully_qualified)
File "/usr/local/anaconda3/envs/dclab/lib/python3.7/site-packages/scanpydoc/elegant_typehints/formatting.py", line 103, in format_annotation
annot_fmt = format_both(annotation, fully_qualified)
File "/usr/local/anaconda3/envs/dclab/lib/python3.7/site-packages/scanpydoc/elegant_typehints/formatting.py", line 119, in format_both
f":annotation-terse:`{_escape(_format_terse(annotation, fully_qualified))}`\\ "
File "/usr/local/anaconda3/envs/dclab/lib/python3.7/site-packages/scanpydoc/elegant_typehints/formatting.py", line 48, in _format_terse
args = get_args(annotation)
File "/usr/local/anaconda3/envs/dclab/lib/python3.7/site-packages/typing_extensions.py", line 2070, in get_args
if get_origin(tp) is collections.abc.Callable and res[0] is not Ellipsis:
IndexError: tuple index out of range
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/local/anaconda3/envs/dclab/lib/python3.7/site-packages/sphinx/cmd/build.py", line 280, in build_main
app.build(args.force_all, filenames)
File "/usr/local/anaconda3/envs/dclab/lib/python3.7/site-packages/sphinx/application.py", line 352, in build
self.builder.build_update()
File "/usr/local/anaconda3/envs/dclab/lib/python3.7/site-packages/sphinx/builders/__init__.py", line 299, in build_update
len(to_build))
File "/usr/local/anaconda3/envs/dclab/lib/python3.7/site-packages/sphinx/builders/__init__.py", line 311, in build
updated_docnames = set(self.read())
File "/usr/local/anaconda3/envs/dclab/lib/python3.7/site-packages/sphinx/builders/__init__.py", line 418, in read
self._read_serial(docnames)
File "/usr/local/anaconda3/envs/dclab/lib/python3.7/site-packages/sphinx/builders/__init__.py", line 439, in _read_serial
self.read_doc(docname)
File "/usr/local/anaconda3/envs/dclab/lib/python3.7/site-packages/sphinx/builders/__init__.py", line 479, in read_doc
doctree = read_doc(self.app, self.env, self.env.doc2path(docname))
File "/usr/local/anaconda3/envs/dclab/lib/python3.7/site-packages/sphinx/io.py", line 223, in read_doc
pub.publish()
File "/usr/local/anaconda3/envs/dclab/lib/python3.7/site-packages/docutils/core.py", line 218, in publish
self.settings)
File "/usr/local/anaconda3/envs/dclab/lib/python3.7/site-packages/sphinx/io.py", line 128, in read
self.parse()
File "/usr/local/anaconda3/envs/dclab/lib/python3.7/site-packages/docutils/readers/__init__.py", line 77, in parse
self.parser.parse(self.input, document)
File "/usr/local/anaconda3/envs/dclab/lib/python3.7/site-packages/sphinx/parsers.py", line 102, in parse
self.statemachine.run(inputlines, document, inliner=self.inliner)
File "/usr/local/anaconda3/envs/dclab/lib/python3.7/site-packages/docutils/parsers/rst/states.py", line 171, in run
input_source=document['source'])
File "/usr/local/anaconda3/envs/dclab/lib/python3.7/site-packages/docutils/statemachine.py", line 242, in run
context, state, transitions)
File "/usr/local/anaconda3/envs/dclab/lib/python3.7/site-packages/docutils/statemachine.py", line 459, in check_line
return method(match, context, next_state)
File "/usr/local/anaconda3/envs/dclab/lib/python3.7/site-packages/docutils/parsers/rst/states.py", line 2769, in underline
self.section(title, source, style, lineno - 1, messages)
File "/usr/local/anaconda3/envs/dclab/lib/python3.7/site-packages/docutils/parsers/rst/states.py", line 327, in section
self.new_subsection(title, lineno, messages)
File "/usr/local/anaconda3/envs/dclab/lib/python3.7/site-packages/docutils/parsers/rst/states.py", line 395, in new_subsection
node=section_node, match_titles=True)
File "/usr/local/anaconda3/envs/dclab/lib/python3.7/site-packages/docutils/parsers/rst/states.py", line 282, in nested_parse
node=node, match_titles=match_titles)
File "/usr/local/anaconda3/envs/dclab/lib/python3.7/site-packages/docutils/parsers/rst/states.py", line 196, in run
results = StateMachineWS.run(self, input_lines, input_offset)
File "/usr/local/anaconda3/envs/dclab/lib/python3.7/site-packages/docutils/statemachine.py", line 242, in run
context, state, transitions)
File "/usr/local/anaconda3/envs/dclab/lib/python3.7/site-packages/docutils/statemachine.py", line 459, in check_line
return method(match, context, next_state)
File "/usr/local/anaconda3/envs/dclab/lib/python3.7/site-packages/docutils/parsers/rst/states.py", line 2769, in underline
self.section(title, source, style, lineno - 1, messages)
File "/usr/local/anaconda3/envs/dclab/lib/python3.7/site-packages/docutils/parsers/rst/states.py", line 327, in section
self.new_subsection(title, lineno, messages)
File "/usr/local/anaconda3/envs/dclab/lib/python3.7/site-packages/docutils/parsers/rst/states.py", line 395, in new_subsection
node=section_node, match_titles=True)
File "/usr/local/anaconda3/envs/dclab/lib/python3.7/site-packages/docutils/parsers/rst/states.py", line 282, in nested_parse
node=node, match_titles=match_titles)
File "/usr/local/anaconda3/envs/dclab/lib/python3.7/site-packages/docutils/parsers/rst/states.py", line 196, in run
results = StateMachineWS.run(self, input_lines, input_offset)
File "/usr/local/anaconda3/envs/dclab/lib/python3.7/site-packages/docutils/statemachine.py", line 242, in run
context, state, transitions)
File "/usr/local/anaconda3/envs/dclab/lib/python3.7/site-packages/docutils/statemachine.py", line 459, in check_line
return method(match, context, next_state)
File "/usr/local/anaconda3/envs/dclab/lib/python3.7/site-packages/docutils/parsers/rst/states.py", line 2342, in explicit_markup
nodelist, blank_finish = self.explicit_construct(match)
File "/usr/local/anaconda3/envs/dclab/lib/python3.7/site-packages/docutils/parsers/rst/states.py", line 2354, in explicit_construct
return method(self, expmatch)
File "/usr/local/anaconda3/envs/dclab/lib/python3.7/site-packages/docutils/parsers/rst/states.py", line 2097, in directive
directive_class, match, type_name, option_presets)
File "/usr/local/anaconda3/envs/dclab/lib/python3.7/site-packages/docutils/parsers/rst/states.py", line 2146, in run_directive
result = directive_instance.run()
File "/usr/local/anaconda3/envs/dclab/lib/python3.7/site-packages/sphinx/ext/autodoc/directive.py", line 146, in run
documenter.generate(more_content=self.content)
File "/usr/local/anaconda3/envs/dclab/lib/python3.7/site-packages/sphinx/ext/autodoc/__init__.py", line 902, in generate
self.document_members(all_members)
File "/usr/local/anaconda3/envs/dclab/lib/python3.7/site-packages/sphinx/ext/autodoc/__init__.py", line 785, in document_members
check_module=members_check_module and not isattr)
File "/usr/local/anaconda3/envs/dclab/lib/python3.7/site-packages/sphinx/ext/autodoc/__init__.py", line 899, in generate
self.add_content(more_content)
File "/usr/local/anaconda3/envs/dclab/lib/python3.7/site-packages/sphinx/ext/autodoc/__init__.py", line 575, in add_content
for i, line in enumerate(self.process_doc(docstrings)):
File "/usr/local/anaconda3/envs/dclab/lib/python3.7/site-packages/sphinx/ext/autodoc/__init__.py", line 537, in process_doc
self.options, docstringlines)
File "/usr/local/anaconda3/envs/dclab/lib/python3.7/site-packages/sphinx/application.py", line 454, in emit
return self.events.emit(event, *args, allowed_exceptions=allowed_exceptions)
File "/usr/local/anaconda3/envs/dclab/lib/python3.7/site-packages/sphinx/events.py", line 118, in emit
(listener.handler, name), exc) from exc
sphinx.errors.ExtensionError: Handler <function process_docstring at 0x10a621cb0> for event 'autodoc-process-docstring' threw an exception (exception: tuple index out of range)
Extension error:
Handler <function process_docstring at 0x10a621cb0> for event 'autodoc-process-docstring' threw an exception (exception: tuple index out of range)
Any idea what is causing this? Is there a way to fix this?
I am aware of sphinx_automodapi.smart_resolver
(and that there is some recent progress in sphinx e.g., sphinx-doc/sphinx#9026) which would solve the main reason we adopted scanpydoc.elegant_typehints
but it also looks better so it would be nice to keep using it.
Metadata
Metadata
Assignees
Labels
No labels