diff --git a/sphinx/domains/c.py b/sphinx/domains/c.py index 66a66c54f..68b5c2065 100644 --- a/sphinx/domains/c.py +++ b/sphinx/domains/c.py @@ -82,7 +82,7 @@ class CObject(ObjectDescription): )) def _parse_type(self, node, ctype): - # type: (nodes.Node, unicode) -> None + # type: (nodes.Element, unicode) -> None # add cross-ref nodes for all words for part in [_f for _f in wsplit_re.split(ctype) if _f]: tnode = nodes.Text(part, part) diff --git a/sphinx/environment/__init__.py b/sphinx/environment/__init__.py index a5e9dfe7c..b02c8f239 100644 --- a/sphinx/environment/__init__.py +++ b/sphinx/environment/__init__.py @@ -146,7 +146,7 @@ class BuildEnvironment: self.longtitles = {} # type: Dict[unicode, nodes.title] # docname -> title node; only different if # set differently with title directive - self.tocs = {} # type: Dict[unicode, nodes.Element] + self.tocs = {} # type: Dict[unicode, nodes.bullet_list] # docname -> table of contents nodetree self.toc_num_entries = {} # type: Dict[unicode, int] # docname -> number of real entries diff --git a/sphinx/transforms/post_transforms/__init__.py b/sphinx/transforms/post_transforms/__init__.py index de1aa52ba..edc5c293f 100644 --- a/sphinx/transforms/post_transforms/__init__.py +++ b/sphinx/transforms/post_transforms/__init__.py @@ -74,11 +74,11 @@ class ReferencesResolver(SphinxTransform): node.replace_self(newnode or contnode) def resolve_anyref(self, refdoc, node, contnode): - # type: (unicode, addnodes.pending_xref, nodes.Node) -> nodes.Node + # type: (unicode, addnodes.pending_xref, nodes.TextElement) -> nodes.Element """Resolve reference generated by the "any" role.""" stddomain = self.env.get_domain('std') target = node['reftarget'] - results = [] # type: List[Tuple[unicode, nodes.Node]] + results = [] # type: List[Tuple[unicode, nodes.Element]] # first, try resolving as :doc: doc_ref = stddomain.resolve_xref(self.env, refdoc, self.app.builder, 'doc', target, node, contnode) @@ -116,7 +116,9 @@ class ReferencesResolver(SphinxTransform): # Override "any" class with the actual role type to get the styling # approximately correct. res_domain = res_role.split(':')[0] - if newnode and newnode[0].get('classes'): + if (len(newnode) > 0 and + isinstance(newnode[0], nodes.Element) and + newnode[0].get('classes')): newnode[0]['classes'].append(res_domain) newnode[0]['classes'].append(res_role.replace(':', '-')) return newnode diff --git a/sphinx/util/docfields.py b/sphinx/util/docfields.py index 61d88055b..22080f95b 100644 --- a/sphinx/util/docfields.py +++ b/sphinx/util/docfields.py @@ -217,7 +217,7 @@ class TypedField(GroupedField): # inconsistencies later when references are resolved fieldtype = types.pop(fieldarg) if len(fieldtype) == 1 and isinstance(fieldtype[0], nodes.Text): - typename = u''.join(n.astext() for n in fieldtype) + typename = fieldtype[0].astext() par.extend(self.make_xrefs(self.typerolename, domain, typename, addnodes.literal_emphasis, env=env)) else: diff --git a/sphinx/writers/texinfo.py b/sphinx/writers/texinfo.py index f26067c26..c32b1ccca 100644 --- a/sphinx/writers/texinfo.py +++ b/sphinx/writers/texinfo.py @@ -1205,7 +1205,8 @@ class TexinfoTranslator(SphinxTranslator): def visit_admonition(self, node, name=''): # type: (nodes.admonition, unicode) -> None if not name: - name = self.escape(node[0].astext()) + title = cast(nodes.title, node[0]) + name = self.escape(title.astext()) self.body.append(u'\n@cartouche\n@quotation %s ' % name) def _visit_named_admonition(self, node): @@ -1279,7 +1280,7 @@ class TexinfoTranslator(SphinxTranslator): # ignore TOC's since we have to have a "menu" anyway if 'contents' in node.get('classes', []): raise nodes.SkipNode - title = node[0] + title = cast(nodes.title, node[0]) self.visit_rubric(title) self.body.append('%s\n' % self.escape(title.astext()))