mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
Enable automatic formatting for `sphinx/ext/viewcode.py
`
This commit is contained in:
parent
e66c81b01d
commit
22562d40ee
@ -415,5 +415,4 @@ exclude = [
|
|||||||
"sphinx/domains/python/_object.py",
|
"sphinx/domains/python/_object.py",
|
||||||
"sphinx/domains/rst.py",
|
"sphinx/domains/rst.py",
|
||||||
"sphinx/domains/std/__init__.py",
|
"sphinx/domains/std/__init__.py",
|
||||||
"sphinx/ext/viewcode.py",
|
|
||||||
]
|
]
|
||||||
|
@ -23,7 +23,7 @@ from sphinx.util.nodes import make_refnode
|
|||||||
from sphinx.util.osutil import _last_modified_time
|
from sphinx.util.osutil import _last_modified_time
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from collections.abc import Iterable, Iterator
|
from collections.abc import Iterator, Set
|
||||||
|
|
||||||
from sphinx.application import Sphinx
|
from sphinx.application import Sphinx
|
||||||
from sphinx.builders import Builder
|
from sphinx.builders import Builder
|
||||||
@ -79,11 +79,11 @@ def _get_full_modname(modname: str, attribute: str) -> str | None:
|
|||||||
|
|
||||||
|
|
||||||
def is_supported_builder(builder: Builder) -> bool:
|
def is_supported_builder(builder: Builder) -> bool:
|
||||||
if builder.format != 'html':
|
return (
|
||||||
return False
|
builder.format == 'html'
|
||||||
if builder.name == 'singlehtml':
|
and builder.name != 'singlehtml'
|
||||||
return False
|
and (not builder.name.startswith('epub') or builder.config.viewcode_enable_epub)
|
||||||
return not (builder.name.startswith('epub') and not builder.config.viewcode_enable_epub)
|
)
|
||||||
|
|
||||||
|
|
||||||
def doctree_read(app: Sphinx, doctree: Node) -> None:
|
def doctree_read(app: Sphinx, doctree: Node) -> None:
|
||||||
@ -132,7 +132,7 @@ def doctree_read(app: Sphinx, doctree: Node) -> None:
|
|||||||
refname = modname
|
refname = modname
|
||||||
if env.config.viewcode_follow_imported_members:
|
if env.config.viewcode_follow_imported_members:
|
||||||
new_modname = app.emit_firstresult(
|
new_modname = app.emit_firstresult(
|
||||||
'viewcode-follow-imported', modname, fullname,
|
'viewcode-follow-imported', modname, fullname
|
||||||
)
|
)
|
||||||
if not new_modname:
|
if not new_modname:
|
||||||
new_modname = _get_full_modname(modname, fullname)
|
new_modname = _get_full_modname(modname, fullname)
|
||||||
@ -147,11 +147,14 @@ def doctree_read(app: Sphinx, doctree: Node) -> None:
|
|||||||
continue
|
continue
|
||||||
names.add(fullname)
|
names.add(fullname)
|
||||||
pagename = posixpath.join(OUTPUT_DIRNAME, modname.replace('.', '/'))
|
pagename = posixpath.join(OUTPUT_DIRNAME, modname.replace('.', '/'))
|
||||||
signode += viewcode_anchor(reftarget=pagename, refid=fullname, refdoc=env.docname)
|
signode += viewcode_anchor(
|
||||||
|
reftarget=pagename, refid=fullname, refdoc=env.docname
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def env_merge_info(app: Sphinx, env: BuildEnvironment, docnames: Iterable[str],
|
def env_merge_info(
|
||||||
other: BuildEnvironment) -> None:
|
app: Sphinx, env: BuildEnvironment, docnames: Set[str], other: BuildEnvironment
|
||||||
|
) -> None:
|
||||||
if not hasattr(other, '_viewcode_modules'):
|
if not hasattr(other, '_viewcode_modules'):
|
||||||
return
|
return
|
||||||
# create a _viewcode_modules dict on the main environment
|
# create a _viewcode_modules dict on the main environment
|
||||||
@ -199,8 +202,13 @@ class ViewcodeAnchorTransform(SphinxPostTransform):
|
|||||||
def convert_viewcode_anchors(self) -> None:
|
def convert_viewcode_anchors(self) -> None:
|
||||||
for node in self.document.findall(viewcode_anchor):
|
for node in self.document.findall(viewcode_anchor):
|
||||||
anchor = nodes.inline('', _('[source]'), classes=['viewcode-link'])
|
anchor = nodes.inline('', _('[source]'), classes=['viewcode-link'])
|
||||||
refnode = make_refnode(self.app.builder, node['refdoc'], node['reftarget'],
|
refnode = make_refnode(
|
||||||
node['refid'], anchor)
|
self.app.builder,
|
||||||
|
node['refdoc'],
|
||||||
|
node['reftarget'],
|
||||||
|
node['refid'],
|
||||||
|
anchor,
|
||||||
|
)
|
||||||
node.replace_self(refnode)
|
node.replace_self(refnode)
|
||||||
|
|
||||||
def remove_viewcode_anchors(self) -> None:
|
def remove_viewcode_anchors(self) -> None:
|
||||||
@ -254,10 +262,13 @@ def collect_pages(app: Sphinx) -> Iterator[tuple[str, dict[str, Any], str]]:
|
|||||||
modnames = set(env._viewcode_modules)
|
modnames = set(env._viewcode_modules)
|
||||||
|
|
||||||
for modname, entry in status_iterator(
|
for modname, entry in status_iterator(
|
||||||
sorted(env._viewcode_modules.items()),
|
sorted(env._viewcode_modules.items()),
|
||||||
__('highlighting module code... '), "blue",
|
__('highlighting module code... '),
|
||||||
len(env._viewcode_modules),
|
'blue',
|
||||||
app.verbosity, operator.itemgetter(0)):
|
len(env._viewcode_modules),
|
||||||
|
app.verbosity,
|
||||||
|
operator.itemgetter(0),
|
||||||
|
):
|
||||||
if not entry:
|
if not entry:
|
||||||
continue
|
continue
|
||||||
if not should_generate_module_page(app, modname):
|
if not should_generate_module_page(app, modname):
|
||||||
@ -287,9 +298,11 @@ def collect_pages(app: Sphinx) -> Iterator[tuple[str, dict[str, Any], str]]:
|
|||||||
for name, docname in used.items():
|
for name, docname in used.items():
|
||||||
type, start, end = tags[name]
|
type, start, end = tags[name]
|
||||||
backlink = urito(pagename, docname) + '#' + refname + '.' + name
|
backlink = urito(pagename, docname) + '#' + refname + '.' + name
|
||||||
lines[start] = (f'<div class="viewcode-block" id="{name}">\n'
|
lines[start] = (
|
||||||
f'<a class="viewcode-back" href="{backlink}">{link_text}</a>\n'
|
f'<div class="viewcode-block" id="{name}">\n'
|
||||||
+ lines[start])
|
f'<a class="viewcode-back" href="{backlink}">{link_text}</a>\n'
|
||||||
|
+ lines[start]
|
||||||
|
)
|
||||||
lines[min(end, max_index)] += '</div>\n'
|
lines[min(end, max_index)] += '</div>\n'
|
||||||
|
|
||||||
# try to find parents (for submodules)
|
# try to find parents (for submodules)
|
||||||
@ -299,18 +312,22 @@ def collect_pages(app: Sphinx) -> Iterator[tuple[str, dict[str, Any], str]]:
|
|||||||
parent = parent.rsplit('.', 1)[0]
|
parent = parent.rsplit('.', 1)[0]
|
||||||
if parent in modnames:
|
if parent in modnames:
|
||||||
parents.append({
|
parents.append({
|
||||||
'link': urito(pagename,
|
'link': urito(
|
||||||
posixpath.join(OUTPUT_DIRNAME, parent.replace('.', '/'))),
|
pagename,
|
||||||
'title': parent})
|
posixpath.join(OUTPUT_DIRNAME, parent.replace('.', '/')),
|
||||||
parents.append({'link': urito(pagename, posixpath.join(OUTPUT_DIRNAME, 'index')),
|
),
|
||||||
'title': _('Module code')})
|
'title': parent,
|
||||||
|
})
|
||||||
|
parents.append({
|
||||||
|
'link': urito(pagename, posixpath.join(OUTPUT_DIRNAME, 'index')),
|
||||||
|
'title': _('Module code'),
|
||||||
|
})
|
||||||
parents.reverse()
|
parents.reverse()
|
||||||
# putting it all together
|
# putting it all together
|
||||||
context = {
|
context = {
|
||||||
'parents': parents,
|
'parents': parents,
|
||||||
'title': modname,
|
'title': modname,
|
||||||
'body': (_('<h1>Source code for %s</h1>') % modname +
|
'body': (_('<h1>Source code for %s</h1>') % modname + '\n'.join(lines)),
|
||||||
'\n'.join(lines)),
|
|
||||||
}
|
}
|
||||||
yield pagename, context, 'page.html'
|
yield pagename, context, 'page.html'
|
||||||
|
|
||||||
@ -330,14 +347,15 @@ def collect_pages(app: Sphinx) -> Iterator[tuple[str, dict[str, Any], str]]:
|
|||||||
stack.pop()
|
stack.pop()
|
||||||
html.append('</ul>')
|
html.append('</ul>')
|
||||||
stack.append(modname + '.')
|
stack.append(modname + '.')
|
||||||
relative_uri = urito(posixpath.join(OUTPUT_DIRNAME, 'index'),
|
relative_uri = urito(
|
||||||
posixpath.join(OUTPUT_DIRNAME, modname.replace('.', '/')))
|
posixpath.join(OUTPUT_DIRNAME, 'index'),
|
||||||
|
posixpath.join(OUTPUT_DIRNAME, modname.replace('.', '/')),
|
||||||
|
)
|
||||||
html.append(f'<li><a href="{relative_uri}">{modname}</a></li>\n')
|
html.append(f'<li><a href="{relative_uri}">{modname}</a></li>\n')
|
||||||
html.append('</ul>' * (len(stack) - 1))
|
html.append('</ul>' * (len(stack) - 1))
|
||||||
context = {
|
context = {
|
||||||
'title': _('Overview: module code'),
|
'title': _('Overview: module code'),
|
||||||
'body': (_('<h1>All modules for which code is available</h1>') +
|
'body': (_('<h1>All modules for which code is available</h1>') + ''.join(html)),
|
||||||
''.join(html)),
|
|
||||||
}
|
}
|
||||||
|
|
||||||
yield posixpath.join(OUTPUT_DIRNAME, 'index'), context, 'page.html'
|
yield posixpath.join(OUTPUT_DIRNAME, 'index'), context, 'page.html'
|
||||||
|
Loading…
Reference in New Issue
Block a user