[clang] [ASTMatchers][Docs] make dump_ast_matchers.py read classes from sources (PR #203784)
Jannick Kremer via cfe-commits
cfe-commits at lists.llvm.org
Fri Jun 26 07:59:52 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):
----------------
DeinAlptraum wrote:
+1 we have libclang for this
If you want to go that way, you can see an example of how this can be used in the libclang tests themselves [here](https://github.com/llvm/llvm-project/blob/0aaec671473dd311fc82c0c3e24e4c663c79f2e8/clang/bindings/python/tests/cindex/test_enums.py#L69-L78) where we extract all enum variants defined in a given header file
https://github.com/llvm/llvm-project/pull/203784
More information about the cfe-commits
mailing list