Fix links when converting kinds documentation to python (#8557)
authorGereon Kremer <gkremer@cs.stanford.edu>
Mon, 4 Apr 2022 22:38:25 +0000 (15:38 -0700)
committerGitHub <noreply@github.com>
Mon, 4 Apr 2022 22:38:25 +0000 (15:38 -0700)
This mainly fixes explicit rst links when we convert the kinds comments to python.

src/api/python/genenums.py.in

index dc3c4774cdf1cc731d542b68efadcc93bb6090d9..b92439ee1f697b7dbd5eb227269caf98c2c75972 100644 (file)
@@ -62,25 +62,28 @@ class {enum}(Enum):
 ENUMS_ATTR_TEMPLATE = r'''    {name}=c_{enum}.{cpp_name}, """{doc}"""
 '''
 
-comment_repls = {
-    'Term::([a-zA-Z]+)\(([^)]*)\)': ':py:meth:`Term.\\1()`',
-    'Solver::([a-zA-Z]+)\(([^)]*)\) const': ':py:meth:`Solver.\\1()`',
-    'Solver::([a-zA-Z]+)\(([^)]*)\)': ':py:meth:`Solver.\\1()`',
-    'DatatypeConstructor::([a-zA-Z]+)\(([^)]*)\) const': ':py:meth:`DatatypeConstructor.\\1()`',
-    'DatatypeConstructor::([a-zA-Z]+)\(([^)]*)\)': ':py:meth:`DatatypeConstructor.\\1()`',
-    'Datatype::([a-zA-Z]+)\(([^)]*)\) const': ':py:meth:`Datatype.\\1()`',
-    'Datatype::([a-zA-Z]+)\(([^)]*)\)': ':py:meth:`Datatype.\\1()`',
-    'DatatypeSelector::([a-zA-Z]+)\(([^)]*)\) const': ':py:meth:`DatatypeSelector.\\1()`',
-    'DatatypeSelector::([a-zA-Z]+)\(([^)]*)\)': ':py:meth:`DatatypeSelector.\\1()`',
-    ':cpp:func:`(.*?)`': '\\1',
-    ':cpp:enumerator:`(.*?)`': ':py:obj:`\\1`',
-    '\\\\': '\\\\\\\\',
-}
+# list to enforce proper ordering
+comment_repls = [
+    # first remove explicit cpp references
+    (':cpp:func:`(.*?)`', '\\1'),
+    (':cpp:enumerator:`(.*?)`', ':py:obj:`\\1`'),
+    # introduce proper python references
+    ('Term::([a-zA-Z]+)\(([^)]*)\)', ':py:meth:`Term.\\1()`'),
+    ('Solver::([a-zA-Z]+)\(([^)]*)\) const', ':py:meth:`Solver.\\1()`'),
+    ('Solver::([a-zA-Z]+)\(([^)]*)\)', ':py:meth:`Solver.\\1()`'),
+    ('DatatypeConstructor::([a-zA-Z]+)\(([^)]*)\) const', ':py:meth:`DatatypeConstructor.\\1()`'),
+    ('DatatypeConstructor::([a-zA-Z]+)\(([^)]*)\)', ':py:meth:`DatatypeConstructor.\\1()`'),
+    ('Datatype::([a-zA-Z]+)\(([^)]*)\) const', ':py:meth:`Datatype.\\1()`'),
+    ('Datatype::([a-zA-Z]+)\(([^)]*)\)', ':py:meth:`Datatype.\\1()`'),
+    ('DatatypeSelector::([a-zA-Z]+)\(([^)]*)\) const', ':py:meth:`DatatypeSelector.\\1()`'),
+    ('DatatypeSelector::([a-zA-Z]+)\(([^)]*)\)', ':py:meth:`DatatypeSelector.\\1()`'),
+    ('\\\\', '\\\\\\\\'),
+]
 
 
 def reformat_comment(comment):
     # apply replacements from above
-    for pat, repl in comment_repls.items():
+    for pat, repl in comment_repls:
         comment = re.sub(pat, repl, comment)
     # remove duplicate lines (e.g. overloads collapse from previous substitutions)
     comment = re.sub('^(?P<line>.*)$\n^(?P=line)$', '\\g<line>', comment, flags=re.MULTILINE)