summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTakeshi KOMIYA <i.tkomiya@gmail.com>2021-04-11 02:17:55 +0900
committerTakeshi KOMIYA <i.tkomiya@gmail.com>2021-04-11 02:17:55 +0900
commit1df14a4828dd99fbc89f21a93fe0b7a23bb53c60 (patch)
tree1beaad77502c75d53a0a1f0b9f659ecace81a504
parentfcb7d01422fa5fd7540f4ee1dcc2746bb0dec56e (diff)
parent43dc09175fb00b9bd9fa6ce31ea8082cfb85de91 (diff)
downloadsphinx-git-1df14a4828dd99fbc89f21a93fe0b7a23bb53c60.tar.gz
Merge branch '3.5.x' into 3.x
-rw-r--r--CHANGES7
-rw-r--r--setup.py2
-rw-r--r--sphinx/environment/adapters/toctree.py2
-rw-r--r--sphinx/themes/basic/static/basic.css_t5
-rw-r--r--sphinx/util/inspect.py14
-rw-r--r--sphinx/writers/html.py7
-rw-r--r--sphinx/writers/html5.py7
-rw-r--r--tests/test_environment_toctree.py10
-rw-r--r--tests/test_intl.py7
9 files changed, 44 insertions, 17 deletions
diff --git a/CHANGES b/CHANGES
index f8bf859e1..baf868e05 100644
--- a/CHANGES
+++ b/CHANGES
@@ -4,6 +4,8 @@ Release 3.5.4 (in development)
Dependencies
------------
+* #9071: Restrict docutils to 0.16
+
Incompatible changes
--------------------
@@ -16,6 +18,11 @@ Features added
Bugs fixed
----------
+* #9078: autodoc: Async staticmethods and classmethods are considered as non
+ async coroutine-functions with Python3.10
+* #8870: The style of toctree captions has been changed with docutils-0.17
+* #9001: The style of ``sidebar`` directive has been changed with docutils-0.17
+
Testing
--------
diff --git a/setup.py b/setup.py
index dfc80578f..d528f738b 100644
--- a/setup.py
+++ b/setup.py
@@ -23,7 +23,7 @@ install_requires = [
'sphinxcontrib-qthelp',
'Jinja2>=2.3',
'Pygments>=2.0',
- 'docutils>=0.12',
+ 'docutils>=0.12,<0.17',
'snowballstemmer>=1.1',
'babel>=1.3',
'alabaster>=0.7,<0.8',
diff --git a/sphinx/environment/adapters/toctree.py b/sphinx/environment/adapters/toctree.py
index 93555d172..f0a37ab7f 100644
--- a/sphinx/environment/adapters/toctree.py
+++ b/sphinx/environment/adapters/toctree.py
@@ -237,7 +237,7 @@ class TocTree:
newnode = addnodes.compact_paragraph('', '')
caption = toctree.attributes.get('caption')
if caption:
- caption_node = nodes.caption(caption, '', *[nodes.Text(caption)])
+ caption_node = nodes.title(caption, '', *[nodes.Text(caption)])
caption_node.line = toctree.line
caption_node.source = toctree.source
caption_node.rawsource = toctree['rawcaption']
diff --git a/sphinx/themes/basic/static/basic.css_t b/sphinx/themes/basic/static/basic.css_t
index 3bb3ea705..5fc83c848 100644
--- a/sphinx/themes/basic/static/basic.css_t
+++ b/sphinx/themes/basic/static/basic.css_t
@@ -319,7 +319,8 @@ img.align-default, .figure.align-default {
/* -- sidebars -------------------------------------------------------------- */
-div.sidebar {
+div.sidebar,
+aside.sidebar {
margin: 0 0 0.5em 1em;
border: 1px solid #ddb;
padding: 7px;
@@ -377,12 +378,14 @@ div.body p.centered {
/* -- content of sidebars/topics/admonitions -------------------------------- */
div.sidebar > :last-child,
+aside.sidebar > :last-child,
div.topic > :last-child,
div.admonition > :last-child {
margin-bottom: 0;
}
div.sidebar::after,
+aside.sidebar::after,
div.topic::after,
div.admonition::after,
blockquote::after {
diff --git a/sphinx/util/inspect.py b/sphinx/util/inspect.py
index 5477e64f7..9fcd3df75 100644
--- a/sphinx/util/inspect.py
+++ b/sphinx/util/inspect.py
@@ -352,8 +352,18 @@ def isroutine(obj: Any) -> bool:
def iscoroutinefunction(obj: Any) -> bool:
"""Check if the object is coroutine-function."""
- # unwrap staticmethod, classmethod and partial (except wrappers)
- obj = unwrap_all(obj, stop=lambda o: hasattr(o, '__wrapped__'))
+ def iswrappedcoroutine(obj: Any) -> bool:
+ """Check if the object is wrapped coroutine-function."""
+ if isstaticmethod(obj) or isclassmethod(obj) or ispartial(obj):
+ # staticmethod, classmethod and partial method are not a wrapped coroutine-function
+ # Note: Since 3.10, staticmethod and classmethod becomes a kind of wrappers
+ return False
+ elif hasattr(obj, '__wrapped__'):
+ return True
+ else:
+ return False
+
+ obj = unwrap_all(obj, stop=iswrappedcoroutine)
if hasattr(obj, '__code__') and inspect.iscoroutinefunction(obj):
# check obj.__code__ because iscoroutinefunction() crashes for custom method-like
# objects (see https://github.com/sphinx-doc/sphinx/issues/6605)
diff --git a/sphinx/writers/html.py b/sphinx/writers/html.py
index d3e7e03a4..b3364a68e 100644
--- a/sphinx/writers/html.py
+++ b/sphinx/writers/html.py
@@ -404,7 +404,12 @@ class HTMLTranslator(SphinxTranslator, BaseTranslator):
# overwritten
def visit_title(self, node: Element) -> None:
- super().visit_title(node)
+ if isinstance(node.parent, addnodes.compact_paragraph) and node.parent.get('toctree'):
+ self.body.append(self.starttag(node, 'p', '', CLASS='caption'))
+ self.body.append('<span class="caption-text">')
+ self.context.append('</span></p>\n')
+ else:
+ super().visit_title(node)
self.add_secnumber(node)
self.add_fignumber(node.parent)
if isinstance(node.parent, nodes.table):
diff --git a/sphinx/writers/html5.py b/sphinx/writers/html5.py
index 5666e4d02..bdaffe140 100644
--- a/sphinx/writers/html5.py
+++ b/sphinx/writers/html5.py
@@ -355,7 +355,12 @@ class HTML5Translator(SphinxTranslator, BaseTranslator):
# overwritten
def visit_title(self, node: Element) -> None:
- super().visit_title(node)
+ if isinstance(node.parent, addnodes.compact_paragraph) and node.parent.get('toctree'):
+ self.body.append(self.starttag(node, 'p', '', CLASS='caption'))
+ self.body.append('<span class="caption-text">')
+ self.context.append('</span></p>\n')
+ else:
+ super().visit_title(node)
self.add_secnumber(node)
self.add_fignumber(node.parent)
if isinstance(node.parent, nodes.table):
diff --git a/tests/test_environment_toctree.py b/tests/test_environment_toctree.py
index 41b3f727c..85a98b61b 100644
--- a/tests/test_environment_toctree.py
+++ b/tests/test_environment_toctree.py
@@ -10,7 +10,7 @@
import pytest
from docutils import nodes
-from docutils.nodes import bullet_list, caption, comment, list_item, reference
+from docutils.nodes import bullet_list, comment, list_item, reference, title
from sphinx import addnodes
from sphinx.addnodes import compact_paragraph, only
@@ -211,7 +211,7 @@ def test_get_toctree_for(app):
app.build()
toctree = TocTree(app.env).get_toctree_for('index', app.builder, collapse=False)
assert_node(toctree,
- [compact_paragraph, ([caption, "Table of Contents"],
+ [compact_paragraph, ([title, "Table of Contents"],
bullet_list,
bullet_list,
bullet_list)])
@@ -251,7 +251,7 @@ def test_get_toctree_for_collapse(app):
app.build()
toctree = TocTree(app.env).get_toctree_for('index', app.builder, collapse=True)
assert_node(toctree,
- [compact_paragraph, ([caption, "Table of Contents"],
+ [compact_paragraph, ([title, "Table of Contents"],
bullet_list,
bullet_list,
bullet_list)])
@@ -283,7 +283,7 @@ def test_get_toctree_for_maxdepth(app):
toctree = TocTree(app.env).get_toctree_for('index', app.builder,
collapse=False, maxdepth=3)
assert_node(toctree,
- [compact_paragraph, ([caption, "Table of Contents"],
+ [compact_paragraph, ([title, "Table of Contents"],
bullet_list,
bullet_list,
bullet_list)])
@@ -329,7 +329,7 @@ def test_get_toctree_for_includehidden(app):
toctree = TocTree(app.env).get_toctree_for('index', app.builder, collapse=False,
includehidden=False)
assert_node(toctree,
- [compact_paragraph, ([caption, "Table of Contents"],
+ [compact_paragraph, ([title, "Table of Contents"],
bullet_list,
bullet_list)])
diff --git a/tests/test_intl.py b/tests/test_intl.py
index 3a704fd7d..0e4387025 100644
--- a/tests/test_intl.py
+++ b/tests/test_intl.py
@@ -622,11 +622,8 @@ def test_html_meta(app):
assert expected_expr in result
expected_expr = '<meta content="I18N, SPHINX, MARKUP" name="keywords" />'
assert expected_expr in result
- if docutils.__version_info__ < (0, 17):
- expected_expr = '<p class="caption"><span class="caption-text">HIDDEN TOC</span></p>'
- assert expected_expr in result
- else:
- expected_expr = '<p><span class="caption-text">HIDDEN TOC</span></p>'
+ expected_expr = '<p class="caption"><span class="caption-text">HIDDEN TOC</span></p>'
+ assert expected_expr in result
@sphinx_intl