瀏覽代碼

Merge topic 'sphinx-docutils-warning' into release-3.27

0c14b6085a Utilities/Sphinx: Fix warning from docutils 0.18.1+

Acked-by: Kitware Robot <[email protected]>
Merge-request: !8578
Brad King 2 年之前
父節點
當前提交
8801ce34c1
共有 1 個文件被更改,包括 12 次插入1 次删除
  1. 12 1
      Utilities/Sphinx/cmake.py

+ 12 - 1
Utilities/Sphinx/cmake.py

@@ -582,12 +582,23 @@ class CMakeXRefTransform(Transform):
     # after the sphinx (210) and docutils (220) substitutions.
     default_priority = 221
 
+    # This helper supports docutils < 0.18, which is missing 'findall',
+    # and docutils == 0.18.0, which is missing 'traverse'.
+    def _document_findall_as_list(self, condition):
+        if hasattr(self.document, 'findall'):
+            # Fully iterate into a list so the caller can grow 'self.document'
+            # while iterating.
+            return list(self.document.findall(condition))
+
+        # Fallback to 'traverse' on old docutils, which returns a list.
+        return self.document.traverse(condition)
+
     def apply(self):
         env = self.document.settings.env
 
         # Find CMake cross-reference nodes and add index and target
         # nodes for them.
-        for ref in self.document.traverse(addnodes.pending_xref):
+        for ref in self._document_findall_as_list(addnodes.pending_xref):
             if not ref['refdomain'] == 'cmake':
                 continue