Merge branch 'master' into refactor_highlighter

This commit is contained in:
Takeshi KOMIYA 2018-07-24 01:11:57 +09:00 committed by GitHub
commit 9bb1e83668
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
18 changed files with 113 additions and 54 deletions

View File

@ -14,6 +14,7 @@ Other co-maintainers:
* Takeshi Komiya <@tk0miya> * Takeshi Komiya <@tk0miya>
* Jean-François Burnol <@jfbu> * Jean-François Burnol <@jfbu>
* Yoshiki Shibukawa <@shibu_jp> * Yoshiki Shibukawa <@shibu_jp>
* Timotheus Kampik - <@TimKam>
Other contributors, listed alphabetically, are: Other contributors, listed alphabetically, are:
@ -37,7 +38,6 @@ Other contributors, listed alphabetically, are:
* Zac Hatfield-Dodds -- doctest reporting improvements * Zac Hatfield-Dodds -- doctest reporting improvements
* Doug Hellmann -- graphviz improvements * Doug Hellmann -- graphviz improvements
* Tim Hoffmann -- theme improvements * Tim Hoffmann -- theme improvements
* Timotheus Kampik - JS theme & search enhancements
* Dave Kuhlman -- original LaTeX writer * Dave Kuhlman -- original LaTeX writer
* Blaise Laflamme -- pyramid theme * Blaise Laflamme -- pyramid theme
* Chris Lamb -- reproducibility fixes * Chris Lamb -- reproducibility fixes

View File

@ -175,6 +175,7 @@ Features added
if :confval:`latex_engine` is ``'xelatex'`` or ``'lualatex'``. if :confval:`latex_engine` is ``'xelatex'`` or ``'lualatex'``.
* #4976: ``SphinxLoggerAdapter.info()`` now supports ``location`` parameter * #4976: ``SphinxLoggerAdapter.info()`` now supports ``location`` parameter
* #5122: setuptools: support nitpicky option * #5122: setuptools: support nitpicky option
* #2820: autoclass directive supports nested class
* Apply :confval:`trim_doctest_flags` to all builders (cf. text, manpages) * Apply :confval:`trim_doctest_flags` to all builders (cf. text, manpages)
Bugs fixed Bugs fixed
@ -188,6 +189,8 @@ Bugs fixed
* #5132: (lualatex) PDF build fails if indexed word starts with Unicode character * #5132: (lualatex) PDF build fails if indexed word starts with Unicode character
* #5133: latex: index headings "Symbols" and "Numbers" not internationalized * #5133: latex: index headings "Symbols" and "Numbers" not internationalized
* #5114: sphinx-build: Handle errors on scanning documents * #5114: sphinx-build: Handle errors on scanning documents
* epub: spine has been broken when "self" is listed on toctree (refs: #4611)
* #344: autosummary does not understand docstring of module level attributes
Testing Testing
-------- --------
@ -221,6 +224,9 @@ Features added
Bugs fixed Bugs fixed
---------- ----------
* #5198: document not in toctree warning when including files only for parallel
builds
Testing Testing
-------- --------

View File

@ -150,7 +150,7 @@ These themes are:
- **collapsiblesidebar** (true or false): Add an *experimental* JavaScript - **collapsiblesidebar** (true or false): Add an *experimental* JavaScript
snippet that makes the sidebar collapsible via a button on its side. snippet that makes the sidebar collapsible via a button on its side.
*Doesn't work with "stickysidebar".* Defaults to ``False``. Defaults to ``False``.
- **externalrefs** (true or false): Display external links differently from - **externalrefs** (true or false): Display external links differently from
internal links. Defaults to ``False``. internal links. Defaults to ``False``.

View File

@ -1765,32 +1765,39 @@ macros and environments, see also :doc:`/latex`.
It must be a list of tuples ``(startdocname, targetname, title, author, It must be a list of tuples ``(startdocname, targetname, title, author,
documentclass, toctree_only)``, where the items are: documentclass, toctree_only)``, where the items are:
* *startdocname*: document name that is the "root" of the LaTeX file. All *startdocname*
documents referenced by it in TOC trees will be included in the LaTeX file String that specifies the :term:`document name` of the LaTeX file's master
too. (If you want only one LaTeX file, use your :confval:`master_doc` document. All documents referenced by the *startdoc* document in TOC trees
here.) will be included in the LaTeX file. (If you want to use the default master
* *targetname*: file name of the LaTeX file in the output directory. document for your LaTeX build, provide your :confval:`master_doc` here.)
* *title*: LaTeX document title. Can be empty to use the title of the
*startdoc*. This is inserted as LaTeX markup, so special characters like a *targetname*
File name of the LaTeX file in the output directory.
*title*
LaTeX document title. Can be empty to use the title of the *startdoc*
document. This is inserted as LaTeX markup, so special characters like a
backslash or ampersand must be represented by the proper LaTeX commands if backslash or ampersand must be represented by the proper LaTeX commands if
they are to be inserted literally. they are to be inserted literally.
* *author*: Author for the LaTeX document. The same LaTeX markup caveat as
for *title* applies. Use ``\\and`` to separate multiple authors, as in:
``'John \\and Sarah'`` (backslashes must be Python-escaped to reach
LaTeX).
* *documentclass*: Normally, one of ``'manual'`` or ``'howto'`` (provided
by Sphinx and based on ``'report'``, resp. ``'article'``; Japanese
documents use ``'jsbook'``, resp. ``'jreport'``.) "howto" (non-Japanese)
documents will not get appendices. Also they have a simpler title page.
Other document classes can be given. Independently of the document class,
the "sphinx" package is always loaded in order to define Sphinx's custom
LaTeX commands.
* *toctree_only*: Must be ``True`` or ``False``. If true, the *startdoc* *author*
document itself is not included in the output, only the documents Author for the LaTeX document. The same LaTeX markup caveat as for *title*
referenced by it via TOC trees. With this option, you can put extra stuff applies. Use ``\\and`` to separate multiple authors, as in:
in the master document that shows up in the HTML, but not the LaTeX ``'John \\and Sarah'`` (backslashes must be Python-escaped to reach LaTeX).
output.
*documentclass*
Normally, one of ``'manual'`` or ``'howto'`` (provided by Sphinx and based
on ``'report'``, resp. ``'article'``; Japanese documents use ``'jsbook'``,
resp. ``'jreport'``.) "howto" (non-Japanese) documents will not get
appendices. Also they have a simpler title page. Other document classes
can be given. Independently of the document class, the "sphinx" package is
always loaded in order to define Sphinx's custom LaTeX commands.
*toctree_only*
Must be ``True`` or ``False``. If true, the *startdoc* document itself is
not included in the output, only the documents referenced by it via TOC
trees. With this option, you can put extra stuff in the master document
that shows up in the HTML, but not the LaTeX output.
.. versionadded:: 1.2 .. versionadded:: 1.2
In the past including your own document class required you to prepend the In the past including your own document class required you to prepend the
@ -2264,9 +2271,11 @@ These options influence manual page output.
section)``, where the items are: section)``, where the items are:
*startdocname* *startdocname*
Document name that is the "root" of the manual page. All documents String that specifies the :term:`document name` of the manual page's master
referenced by it in TOC trees will be included in the manual file too. document. All documents referenced by the *startdoc* document in TOC trees
(If you want one master manual page, use your :confval:`master_doc` here.) will be included in the manual file. (If you want to use the default
master document for your manual pages build, use your :confval:`master_doc`
here.)
*name* *name*
Name of the manual page. This should be a short string without spaces or Name of the manual page. This should be a short string without spaces or
@ -2309,17 +2318,19 @@ These options influence Texinfo output.
are: are:
*startdocname* *startdocname*
Document name that is the "root" of the Texinfo file. All documents String that specifies the :term:`document name` of the the Texinfo file's
referenced by it in TOC trees will be included in the Texinfo file too. master document. All documents referenced by the *startdoc* document in
(If you want only one Texinfo file, use your :confval:`master_doc` here.) TOC trees will be included in the Texinfo file. (If you want to use the
default master document for your Texinfo build, provide your
:confval:`master_doc` here.)
*targetname* *targetname*
File name (no extension) of the Texinfo file in the output directory. File name (no extension) of the Texinfo file in the output directory.
*title* *title*
Texinfo document title. Can be empty to use the title of the *startdoc*. Texinfo document title. Can be empty to use the title of the *startdoc*
Inserted as Texinfo markup, so special characters like ``@`` and ``{}`` document. Inserted as Texinfo markup, so special characters like ``@`` and
will need to be escaped to be inserted literally. ``{}`` will need to be escaped to be inserted literally.
*author* *author*
Author for the Texinfo document. Inserted as Texinfo markup. Use ``@*`` Author for the Texinfo document. Inserted as Texinfo markup. Use ``@*``
@ -2488,12 +2499,21 @@ Options for the linkcheck builder
.. confval:: linkcheck_anchors_ignore .. confval:: linkcheck_anchors_ignore
A list of regular expressions that match URIs that should skip checking A list of regular expressions that match anchors Sphinx should skip when
the validity of anchors in links. This allows skipping entire sites, where checking the validity of anchors in links. This allows skipping anchors that
anchors are used to control dynamic pages, or just specific anchors within a website's JavaScript adds to control dynamic pages or when triggering an
a page, where JavaScript is used to add anchors dynamically, or use the internal REST request. Default is ``["^!"]``.
fragment as part of to trigger an internal REST request. Default is
``["/#!"]``. .. note::
If you want to ignore anchors of a specific page or of pages that match a
specific pattern (but still check occurrences of the same page(s) that
don't have anchors), use :confval:`linkcheck_ignore` instead, for example
as follows::
linkcheck_ignore = [
'http://www.sphinx-doc.org/en/1.7/intro.html#'
]
.. versionadded:: 1.5 .. versionadded:: 1.5

View File

@ -195,7 +195,7 @@ class EpubBuilder(StandaloneHTMLBuilder):
"""Collect section titles, their depth in the toc and the refuri.""" """Collect section titles, their depth in the toc and the refuri."""
# XXX: is there a better way than checking the attribute # XXX: is there a better way than checking the attribute
# toctree-l[1-8] on the parent node? # toctree-l[1-8] on the parent node?
if isinstance(doctree, nodes.reference) and 'refuri' in doctree: if isinstance(doctree, nodes.reference) and doctree.get('refuri'):
refuri = doctree['refuri'] refuri = doctree['refuri']
if refuri.startswith('http://') or refuri.startswith('https://') \ if refuri.startswith('http://') or refuri.startswith('https://') \
or refuri.startswith('irc:') or refuri.startswith('mailto:'): or refuri.startswith('irc:') or refuri.startswith('mailto:'):

View File

@ -319,6 +319,7 @@ class BuildEnvironment(object):
if docname in self.all_docs: if docname in self.all_docs:
self.all_docs.pop(docname, None) self.all_docs.pop(docname, None)
self.reread_always.discard(docname) self.reread_always.discard(docname)
self.included.discard(docname)
for version, changes in self.versionchanges.items(): for version, changes in self.versionchanges.items():
new = [change for change in changes if change[1] != docname] new = [change for change in changes if change[1] != docname]
@ -339,6 +340,8 @@ class BuildEnvironment(object):
self.all_docs[docname] = other.all_docs[docname] self.all_docs[docname] = other.all_docs[docname]
if docname in other.reread_always: if docname in other.reread_always:
self.reread_always.add(docname) self.reread_always.add(docname)
if docname in other.included:
self.included.add(docname)
for version, changes in other.versionchanges.items(): for version, changes in other.versionchanges.items():
self.versionchanges.setdefault(version, []).extend( self.versionchanges.setdefault(version, []).extend(

View File

@ -1265,6 +1265,11 @@ class DataDocumenter(ModuleLevelDocumenter):
# type: (bool) -> None # type: (bool) -> None
pass pass
def get_real_modname(self):
# type: () -> str
return self.get_attr(self.parent or self.object, '__module__', None) \
or self.modname
class MethodDocumenter(DocstringSignatureMixin, ClassLevelDocumenter): # type: ignore class MethodDocumenter(DocstringSignatureMixin, ClassLevelDocumenter): # type: ignore
""" """

View File

@ -167,8 +167,21 @@ def import_object(modname, objpath, objtype='', attrgetter=safe_getattr, warning
logger.debug('[autodoc] import %s', modname) logger.debug('[autodoc] import %s', modname)
try: try:
module = import_module(modname, warningiserror=warningiserror) module = None
logger.debug('[autodoc] => %r', module) objpath = list(objpath)
while module is None:
try:
module = import_module(modname, warningiserror=warningiserror)
logger.debug('[autodoc] import %s => %r', modname, module)
except ImportError:
logger.debug('[autodoc] import %s => failed', modname)
if '.' in modname:
# retry with parent module
modname, name = modname.rsplit('.', 1)
objpath.insert(0, name)
else:
raise
obj = module obj = module
parent = None parent = None
object_name = None object_name = None

View File

@ -43,7 +43,7 @@
</div> </div>
<div class="sidebar"> <div class="sidebar">
{%- block sidebartoc %} {%- block sidebartoc %}
<h3>{{ _('Table Of Contents') }}</h3> <h3>{{ _('Table of Contents') }}</h3>
{{ toctree() }} {{ toctree() }}
{%- endblock %} {%- endblock %}
{%- block sidebarsearch %} {%- block sidebarsearch %}

View File

@ -7,5 +7,5 @@
:copyright: Copyright 2007-2018 by the Sphinx team, see AUTHORS. :copyright: Copyright 2007-2018 by the Sphinx team, see AUTHORS.
:license: BSD, see LICENSE for details. :license: BSD, see LICENSE for details.
#} #}
<h3><a href="{{ pathto(master_doc) }}">{{ _('Table Of Contents') }}</a></h3> <h3><a href="{{ pathto(master_doc) }}">{{ _('Table of Contents') }}</a></h3>
{{ toctree() }} {{ toctree() }}

View File

@ -8,6 +8,6 @@
:license: BSD, see LICENSE for details. :license: BSD, see LICENSE for details.
#} #}
{%- if display_toc %} {%- if display_toc %}
<h3><a href="{{ pathto(master_doc) }}">{{ _('Table Of Contents') }}</a></h3> <h3><a href="{{ pathto(master_doc) }}">{{ _('Table of Contents') }}</a></h3>
{{ toc }} {{ toc }}
{%- endif %} {%- endif %}

View File

@ -9,9 +9,9 @@
#} #}
{%- extends "basic/layout.html" %} {%- extends "basic/layout.html" %}
{% if theme_collapsiblesidebar|tobool %}
{%- block scripts %} {%- block scripts %}
{{ super() }} {{ super() }}
{% if theme_collapsiblesidebar|tobool %}
<script type="text/javascript" src="{{ pathto('_static/sidebar.js', 1) }}"></script> <script type="text/javascript" src="{{ pathto('_static/sidebar.js', 1) }}"></script>
{% endif %}
{%- endblock %} {%- endblock %}
{% endif %}

View File

@ -54,7 +54,7 @@
<div class="content"> <div class="content">
{#{%- if display_toc %} {#{%- if display_toc %}
<div id="toc"> <div id="toc">
<h3>{{ _('Table Of Contents') }}</h3> <h3>{{ _('Table of Contents') }}</h3>
{{ toc }} {{ toc }}
</div> </div>
{%- endif %}#} {%- endif %}#}

View File

@ -38,7 +38,7 @@
<div id="contentwrapper"> <div id="contentwrapper">
{%- if display_toc %} {%- if display_toc %}
<div id="toc" role="navigation" aria-label="table of contents navigation"> <div id="toc" role="navigation" aria-label="table of contents navigation">
<h3>{{ _('Table Of Contents') }}</h3> <h3>{{ _('Table of Contents') }}</h3>
{{ toc }} {{ toc }}
</div> </div>
{%- endif %} {%- endif %}

View File

@ -9,3 +9,5 @@ Some additional anchors to exercise ignore code
* `Example Bar invalid <http://example.com/#!bar>`_ * `Example Bar invalid <http://example.com/#!bar>`_
* `Example Bar invalid <http://example.com#!bar>`_ tests that default ignore anchor of #! does not need to be prefixed with / * `Example Bar invalid <http://example.com#!bar>`_ tests that default ignore anchor of #! does not need to be prefixed with /
* `Example Bar invalid <http://example.com/#top>`_ * `Example Bar invalid <http://example.com/#top>`_
* `Example anchor invalid <http://www.sphinx-doc.org/en/1.7/intro.html#does-not-exist>`_
* `Complete nonsense <https://localhost:7777/doesnotexist>`_

View File

@ -771,6 +771,9 @@ def test_generate():
('class', 'target.Outer.Inner'), ('class', 'target.Outer.Inner'),
('method', 'target.Outer.Inner.meth')], ('method', 'target.Outer.Inner.meth')],
'class', 'Outer', all_members=True) 'class', 'Outer', all_members=True)
assert_processes([('class', 'target.Outer.Inner'),
('method', 'target.Outer.Inner.meth')],
'class', 'target.Outer.Inner', all_members=True)
# test descriptor docstrings # test descriptor docstrings
assert_result_contains(' Descriptor instance docstring.', assert_result_contains(' Descriptor instance docstring.',

View File

@ -21,14 +21,21 @@ def test_defaults(app, status, warning):
content = (app.outdir / 'output.txt').text() content = (app.outdir / 'output.txt').text()
print(content) print(content)
# looking for #top should fail # looking for '#top' and 'does-not-exist' not found should fail
assert "Anchor 'top' not found" in content assert "Anchor 'top' not found" in content
assert len(content.splitlines()) == 1 assert "Anchor 'does-not-exist' not found" in content
# looking for non-existent URL should fail
assert " Max retries exceeded with url: /doesnotexist" in content
assert len(content.splitlines()) == 3
@pytest.mark.sphinx( @pytest.mark.sphinx(
'linkcheck', testroot='linkcheck', freshenv=True, 'linkcheck', testroot='linkcheck', freshenv=True,
confoverrides={'linkcheck_anchors_ignore': ["^!", "^top$"]}) confoverrides={'linkcheck_anchors_ignore': ["^!", "^top$"],
'linkcheck_ignore': [
'https://localhost:7777/doesnotexist',
'http://www.sphinx-doc.org/en/1.7/intro.html#']
})
def test_anchors_ignored(app, status, warning): def test_anchors_ignored(app, status, warning):
app.builder.build_all() app.builder.build_all()

View File

@ -124,7 +124,7 @@ def test_theme_sidebars(app, status, warning):
# test-theme specifies globaltoc and searchbox as default sidebars # test-theme specifies globaltoc and searchbox as default sidebars
result = (app.outdir / 'index.html').text(encoding='utf8') result = (app.outdir / 'index.html').text(encoding='utf8')
assert '<h3><a href="#">Table Of Contents</a></h3>' in result assert '<h3><a href="#">Table of Contents</a></h3>' in result
assert '<h3>Related Topics</h3>' not in result assert '<h3>Related Topics</h3>' not in result
assert '<h3>This Page</h3>' not in result assert '<h3>This Page</h3>' not in result
assert '<h3>Quick search</h3>' in result assert '<h3>Quick search</h3>' in result