================
@@ -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

Reply via email to