summaryrefslogtreecommitdiff
path: root/sphinx/ext/viewcode.py
diff options
context:
space:
mode:
Diffstat (limited to 'sphinx/ext/viewcode.py')
-rw-r--r--sphinx/ext/viewcode.py38
1 files changed, 16 insertions, 22 deletions
diff --git a/sphinx/ext/viewcode.py b/sphinx/ext/viewcode.py
index 3ba5deb01..a4d9e3405 100644
--- a/sphinx/ext/viewcode.py
+++ b/sphinx/ext/viewcode.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
"""
sphinx.ext.viewcode
~~~~~~~~~~~~~~~~~~~
@@ -13,7 +12,6 @@ import traceback
import warnings
from docutils import nodes
-from six import iteritems, text_type
import sphinx
from sphinx import addnodes
@@ -34,7 +32,7 @@ logger = logging.getLogger(__name__)
def _get_full_modname(app, modname, attribute):
- # type: (Sphinx, str, unicode) -> unicode
+ # type: (Sphinx, str, str) -> str
try:
return get_full_modname(modname, attribute)
except AttributeError:
@@ -75,12 +73,8 @@ def doctree_read(app, doctree):
env._viewcode_modules[modname] = False # type: ignore
return
- if not isinstance(analyzer.code, text_type):
- code = analyzer.code.decode(analyzer.encoding)
- else:
- code = analyzer.code
-
analyzer.find_tags()
+ code = analyzer.code
tags = analyzer.tags
else:
code, tags = code_tags
@@ -96,7 +90,7 @@ def doctree_read(app, doctree):
for objnode in doctree.traverse(addnodes.desc):
if objnode.get('domain') != 'py':
continue
- names = set() # type: Set[unicode]
+ names = set() # type: Set[str]
for signode in objnode:
if not isinstance(signode, addnodes.desc_signature):
continue
@@ -120,18 +114,16 @@ def doctree_read(app, doctree):
continue
names.add(fullname)
pagename = '_modules/' + modname.replace('.', '/')
+ inline = nodes.inline('', _('[source]'), classes=['viewcode-link'])
onlynode = addnodes.only(expr='html')
- onlynode += addnodes.pending_xref(
- '', reftype='viewcode', refdomain='std', refexplicit=False,
- reftarget=pagename, refid=fullname,
- refdoc=env.docname)
- onlynode[0] += nodes.inline('', _('[source]'),
- classes=['viewcode-link'])
+ onlynode += addnodes.pending_xref('', inline, reftype='viewcode', refdomain='std',
+ refexplicit=False, reftarget=pagename,
+ refid=fullname, refdoc=env.docname)
signode += onlynode
def env_merge_info(app, env, docnames, other):
- # type: (Sphinx, BuildEnvironment, Iterable[unicode], BuildEnvironment) -> None
+ # type: (Sphinx, BuildEnvironment, Iterable[str], BuildEnvironment) -> None
if not hasattr(other, '_viewcode_modules'):
return
# create a _viewcode_modules dict on the main environment
@@ -142,15 +134,17 @@ def env_merge_info(app, env, docnames, other):
def missing_reference(app, env, node, contnode):
- # type: (Sphinx, BuildEnvironment, nodes.Node, nodes.Node) -> nodes.Node
+ # type: (Sphinx, BuildEnvironment, nodes.Element, nodes.Node) -> nodes.Node
# resolve our "viewcode" reference nodes -- they need special treatment
if node['reftype'] == 'viewcode':
return make_refnode(app.builder, node['refdoc'], node['reftarget'],
node['refid'], contnode)
+ return None
+
def collect_pages(app):
- # type: (Sphinx) -> Iterator[Tuple[unicode, Dict[unicode, Any], unicode]]
+ # type: (Sphinx) -> Iterator[Tuple[str, Dict[str, Any], str]]
env = app.builder.env
if not hasattr(env, '_viewcode_modules'):
return
@@ -163,7 +157,7 @@ def collect_pages(app):
# len(env._viewcode_modules), nonl=1)
for modname, entry in status_iterator(
- sorted(iteritems(env._viewcode_modules)), # type: ignore
+ sorted(env._viewcode_modules.items()), # type: ignore
'highlighting module code... ', "blue",
len(env._viewcode_modules), # type: ignore
app.verbosity, lambda x: x[0]):
@@ -188,7 +182,7 @@ def collect_pages(app):
# the collected tags (HACK: this only works if the tag boundaries are
# properly nested!)
maxindex = len(lines) - 1
- for name, docname in iteritems(used):
+ for name, docname in used.items():
type, start, end = tags[name]
backlink = urito(pagename, docname) + '#' + refname + '.' + name
lines[start] = (
@@ -215,7 +209,7 @@ def collect_pages(app):
'title': modname,
'body': (_('<h1>Source code for %s</h1>') % modname +
'\n'.join(lines)),
- } # type: Dict[unicode, Any]
+ }
yield (pagename, context, 'page.html')
if not modnames:
@@ -256,7 +250,7 @@ def migrate_viewcode_import(app, config):
def setup(app):
- # type: (Sphinx) -> Dict[unicode, Any]
+ # type: (Sphinx) -> Dict[str, Any]
app.add_config_value('viewcode_import', None, False)
app.add_config_value('viewcode_enable_epub', False, False)
app.add_config_value('viewcode_follow_imported_members', True, False)