Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support docutils-0.18: Consume iterator of Element.traverse() #9780

Merged
merged 1 commit into from
Oct 26, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
8 changes: 4 additions & 4 deletions sphinx/builders/_epub_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -323,14 +323,14 @@ def footnote_spot(tree: nodes.document) -> Tuple[Element, int]:
# a) place them after the last existing footnote
# b) place them after an (empty) Footnotes rubric
# c) create an empty Footnotes rubric at the end of the document
fns = tree.traverse(nodes.footnote)
fns = list(tree.traverse(nodes.footnote))
if fns:
fn = fns[-1]
return fn.parent, fn.parent.index(fn) + 1
for node in tree.traverse(nodes.rubric):
if len(node) == 1 and node.astext() == FOOTNOTES_RUBRIC_NAME:
return node.parent, node.parent.index(node) + 1
doc = tree.traverse(nodes.document)[0]
doc = list(tree.traverse(nodes.document))[0]
rub = nodes.rubric()
rub.append(nodes.Text(FOOTNOTES_RUBRIC_NAME))
doc.append(rub)
Expand All @@ -339,10 +339,10 @@ def footnote_spot(tree: nodes.document) -> Tuple[Element, int]:
if show_urls == 'no':
return
if show_urls == 'footnote':
doc = tree.traverse(nodes.document)[0]
doc = list(tree.traverse(nodes.document))[0]
fn_spot, fn_idx = footnote_spot(tree)
nr = 1
for node in tree.traverse(nodes.reference):
for node in list(tree.traverse(nodes.reference)):
uri = node.get('refuri', '')
if (uri.startswith('http:') or uri.startswith('https:') or
uri.startswith('ftp:')) and uri not in node.astext():
Expand Down
10 changes: 5 additions & 5 deletions sphinx/builders/latex/transforms.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ class SubstitutionDefinitionsRemover(SphinxPostTransform):
formats = ('latex',)

def run(self, **kwargs: Any) -> None:
for node in self.document.traverse(nodes.substitution_definition):
for node in list(self.document.traverse(nodes.substitution_definition)):
node.parent.remove(node)


Expand Down Expand Up @@ -81,7 +81,7 @@ def expand_show_urls(self) -> None:
if show_urls is False or show_urls == 'no':
return

for node in self.document.traverse(nodes.reference):
for node in list(self.document.traverse(nodes.reference)):
uri = node.get('refuri', '')
if uri.startswith(URI_SCHEMES):
if uri.startswith('mailto:'):
Expand Down Expand Up @@ -501,7 +501,7 @@ class BibliographyTransform(SphinxPostTransform):

def run(self, **kwargs: Any) -> None:
citations = thebibliography()
for node in self.document.traverse(nodes.citation):
for node in list(self.document.traverse(nodes.citation)):
node.parent.remove(node)
citations += node

Expand Down Expand Up @@ -602,9 +602,9 @@ class IndexInSectionTitleTransform(SphinxPostTransform):
formats = ('latex',)

def run(self, **kwargs: Any) -> None:
for node in self.document.traverse(nodes.title):
for node in list(self.document.traverse(nodes.title)):
if isinstance(node.parent, nodes.section):
for i, index in enumerate(node.traverse(addnodes.index)):
for i, index in enumerate(list(node.traverse(addnodes.index))):
# move the index node next to the section title
node.remove(index)
node.parent.insert(i + 1, index)
Expand Down
2 changes: 1 addition & 1 deletion sphinx/domains/index.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ def merge_domaindata(self, docnames: Iterable[str], otherdata: Dict) -> None:
def process_doc(self, env: BuildEnvironment, docname: str, document: Node) -> None:
"""Process a document after it is read by the environment."""
entries = self.entries.setdefault(env.docname, [])
for node in document.traverse(addnodes.index):
for node in list(document.traverse(addnodes.index)):
try:
for entry in node['entries']:
split_index_msg(entry[0], entry[1])
Expand Down
2 changes: 1 addition & 1 deletion sphinx/domains/python.py
Original file line number Diff line number Diff line change
Expand Up @@ -328,7 +328,7 @@ def make_xref(self, rolename: str, domain: str, target: str,
text = target[1:]
elif prefix == '~':
text = target.split('.')[-1]
for node in result.traverse(nodes.Text):
for node in list(result.traverse(nodes.Text)):
node.parent[node.parent.index(node)] = nodes.Text(text)
break
elif isinstance(result, pending_xref) and env.config.python_use_unqualified_type_names:
Expand Down
4 changes: 2 additions & 2 deletions sphinx/environment/adapters/toctree.py
Original file line number Diff line number Diff line change
Expand Up @@ -193,13 +193,13 @@ def _entries_from_toctree(toctreenode: addnodes.toctree, parents: List[str],
for toplevel in children:
# nodes with length 1 don't have any children anyway
if len(toplevel) > 1:
subtrees = toplevel.traverse(addnodes.toctree)
subtrees = list(toplevel.traverse(addnodes.toctree))
if subtrees:
toplevel[1][:] = subtrees # type: ignore
else:
toplevel.pop(1)
# resolve all sub-toctrees
for subtocnode in toc.traverse(addnodes.toctree):
for subtocnode in list(toc.traverse(addnodes.toctree)):
if not (subtocnode.get('hidden', False) and
not includehidden):
i = subtocnode.parent.index(subtocnode) + 1
Expand Down
2 changes: 1 addition & 1 deletion sphinx/ext/autosummary/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -583,7 +583,7 @@ def parse(doc: List[str], settings: Any) -> nodes.document:
node = parse(doc, document.settings)
if summary.endswith(WELL_KNOWN_ABBREVIATIONS):
pass
elif not node.traverse(nodes.system_message):
elif not list(node.traverse(nodes.system_message)):
# considered as that splitting by period does not break inline markups
break

Expand Down
2 changes: 1 addition & 1 deletion sphinx/ext/linkcode.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ def doctree_read(app: Sphinx, doctree: Node) -> None:
'js': ['object', 'fullname'],
}

for objnode in doctree.traverse(addnodes.desc):
for objnode in list(doctree.traverse(addnodes.desc)):
domain = objnode.get('domain')
uris: Set[str] = set()
for signode in objnode:
Expand Down
2 changes: 1 addition & 1 deletion sphinx/ext/todo.py
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ def __init__(self, app: Sphinx, doctree: nodes.document, docname: str) -> None:

def process(self, doctree: nodes.document, docname: str) -> None:
todos: List[todo_node] = sum(self.domain.todos.values(), [])
for node in doctree.traverse(todolist):
for node in list(doctree.traverse(todolist)):
if not self.config.todo_include_todos:
node.parent.remove(node)
continue
Expand Down
4 changes: 2 additions & 2 deletions sphinx/ext/viewcode.py
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ def has_tag(modname: str, fullname: str, docname: str, refname: str) -> bool:

return False

for objnode in doctree.traverse(addnodes.desc):
for objnode in list(doctree.traverse(addnodes.desc)):
if objnode.get('domain') != 'py':
continue
names: Set[str] = set()
Expand Down Expand Up @@ -191,7 +191,7 @@ def convert_viewcode_anchors(self) -> None:
node.replace_self(refnode)

def remove_viewcode_anchors(self) -> None:
for node in self.document.traverse(viewcode_anchor):
for node in list(self.document.traverse(viewcode_anchor)):
node.parent.remove(node)


Expand Down
4 changes: 2 additions & 2 deletions sphinx/transforms/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ class MoveModuleTargets(SphinxTransform):
default_priority = 210

def apply(self, **kwargs: Any) -> None:
for node in self.document.traverse(nodes.target):
for node in list(self.document.traverse(nodes.target)):
if not node['ids']:
continue
if ('ismod' in node and
Expand Down Expand Up @@ -303,7 +303,7 @@ class FilterSystemMessages(SphinxTransform):

def apply(self, **kwargs: Any) -> None:
filterlevel = 2 if self.config.keep_warnings else 5
for node in self.document.traverse(nodes.system_message):
for node in list(self.document.traverse(nodes.system_message)):
if node['level'] < filterlevel:
logger.debug('%s [filtered system message]', node.astext())
node.parent.remove(node)
Expand Down
2 changes: 1 addition & 1 deletion sphinx/transforms/i18n.py
Original file line number Diff line number Diff line change
Expand Up @@ -488,7 +488,7 @@ def apply(self, **kwargs: Any) -> None:
return

matcher = NodeMatcher(nodes.inline, translatable=Any)
for inline in self.document.traverse(matcher): # type: nodes.inline
for inline in list(self.document.traverse(matcher)): # type: nodes.inline
inline.parent.remove(inline)
inline.parent += inline.children

Expand Down
2 changes: 1 addition & 1 deletion sphinx/transforms/post_transforms/code.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ def apply(self, **kwargs: Any) -> None:
self.config.highlight_language)
self.document.walkabout(visitor)

for node in self.document.traverse(addnodes.highlightlang):
for node in list(self.document.traverse(addnodes.highlightlang)):
node.parent.remove(node)


Expand Down
4 changes: 2 additions & 2 deletions sphinx/util/nodes.py
Original file line number Diff line number Diff line change
Expand Up @@ -343,7 +343,7 @@ def clean_astext(node: Element) -> str:
node = node.deepcopy()
for img in node.traverse(nodes.image):
img['alt'] = ''
for raw in node.traverse(nodes.raw):
for raw in list(node.traverse(nodes.raw)):
raw.parent.remove(raw)
return node.astext()

Expand Down Expand Up @@ -408,7 +408,7 @@ def inline_all_toctrees(builder: "Builder", docnameset: Set[str], docname: str,
Record all docnames in *docnameset*, and output docnames with *colorfunc*.
"""
tree = cast(nodes.document, tree.deepcopy())
for toctreenode in tree.traverse(addnodes.toctree):
for toctreenode in list(tree.traverse(addnodes.toctree)):
newnodes = []
includefiles = map(str, toctreenode['includefiles'])
for includefile in includefiles:
Expand Down
2 changes: 1 addition & 1 deletion sphinx/writers/latex.py
Original file line number Diff line number Diff line change
Expand Up @@ -651,7 +651,7 @@ def visit_title(self, node: Element) -> None:
raise nodes.SkipNode
else:
short = ''
if node.traverse(nodes.image):
if list(node.traverse(nodes.image)):
short = ('[%s]' % self.escape(' '.join(clean_astext(node).split())))

try:
Expand Down
4 changes: 2 additions & 2 deletions sphinx/writers/manpage.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ def __init__(self, document: nodes.document) -> None:

def apply(self, **kwargs: Any) -> None:
matcher = NodeMatcher(nodes.literal, nodes.emphasis, nodes.strong)
for node in self.document.traverse(matcher): # type: TextElement
for node in list(self.document.traverse(matcher)): # type: TextElement
if any(matcher(subnode) for subnode in node):
pos = node.parent.index(node)
for subnode in reversed(list(node)):
Expand Down Expand Up @@ -227,7 +227,7 @@ def depart_versionmodified(self, node: Element) -> None:

# overwritten -- don't make whole of term bold if it includes strong node
def visit_term(self, node: Element) -> None:
if node.traverse(nodes.strong):
if list(node.traverse(nodes.strong)):
self.body.append('\n')
else:
super().visit_term(node)
Expand Down