================ @@ -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 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
