diff options
Diffstat (limited to 'sphinx/ext/viewcode.py')
-rw-r--r-- | sphinx/ext/viewcode.py | 38 |
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) |