[clang] [ASTMatchers][Docs] make dump_ast_matchers.py read classes from sources (PR #203784)
Baranov Victor via cfe-commits
cfe-commits at lists.llvm.org
Fri Jun 26 23:44:22 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):
----------------
vbvictor wrote:
I decided not to use libclang because it brings too complex dependency.
This script should be easy to run locally so anyone could update matchers docs.
With libclang, one need to find `libclang.so` which I found not trivial.
---------------------
>
I'm not sure I understand what is "clang-format infra", is it this [option parser](https://github.com/llvm/llvm-project/blob/main/clang/docs/tools/dump_format_style.py#L291)?
I left regex approach for now since it is the easiest. I've added support for alignas but not for attributes because I couldn't find them in AST files.
https://github.com/llvm/llvm-project/pull/203784
More information about the cfe-commits
mailing list