[clang] [ASTMatchers][Docs] make dump_ast_matchers.py read classes from sources (PR #203784)

Vlad Serebrennikov via cfe-commits cfe-commits at lists.llvm.org
Fri Jun 26 08:50:13 PDT 2026


================
@@ -6,17 +6,27 @@
 import collections
 import re
 import os
-from urllib.request import urlopen
 
+CURRENT_DIR = os.path.dirname(__file__)
 
-CLASS_INDEX_PAGE_URL = "https://clang.llvm.org/doxygen/classes.html"
-try:
-    CLASS_INDEX_PAGE = urlopen(CLASS_INDEX_PAGE_URL).read().decode("utf-8")
-except Exception as e:
-    CLASS_INDEX_PAGE = None
-    print("Unable to get %s: %s" % (CLASS_INDEX_PAGE_URL, e))
 
-CURRENT_DIR = os.path.dirname(__file__)
+def _build_local_class_set():
+    """Return the set of class names declared in clang/include/clang/AST/"""
+    classes = set()
+    ast_dir = os.path.join(CURRENT_DIR, "../../include/clang/AST")
+    for fname in os.listdir(ast_dir):
+        if not fname.endswith(".h"):
+            continue
+        try:
+            content = open(os.path.join(ast_dir, fname)).read()
+        except OSError:
+            continue
+        for m in re.finditer(r"\b(?:class|struct)\s+([A-Z][a-zA-Z0-9_]+)\b", content):
----------------
Endilll wrote:

Hmm, I suggested clang-format infra based on the fact that this script does not have all the necessary information from the build system to be able to semantically analyze the header like the compiler does, but maybe not that much is actually needed for libclang to parse it.

https://github.com/llvm/llvm-project/pull/203784


More information about the cfe-commits mailing list