From 3ab238af4fa44a12ff3d479dc7fac50332ad2875 Mon Sep 17 00:00:00 2001 From: James King Date: Fri, 8 Oct 2021 17:44:55 +0000 Subject: [PATCH] [AST Matchers] Update dump_ast_matchers.py to query only class index page. It may be possible to avoid relying on accessing many individual class pages, by instead scanning the class index page at https://clang.llvm.org/doxygen/classes.html. This updates the script to do so, and includes updates to `LibASTMatchersReference.html` generated by the modified script. Reviewed By: aaron.ballman, sammccall Differential Revision: https://reviews.llvm.org/D111332 --- clang/docs/tools/dump_ast_matchers.py | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/clang/docs/tools/dump_ast_matchers.py b/clang/docs/tools/dump_ast_matchers.py index 2a26d10f7a04..2ac0af1f38bc 100755 --- a/clang/docs/tools/dump_ast_matchers.py +++ b/clang/docs/tools/dump_ast_matchers.py @@ -10,6 +10,12 @@ try: except ImportError: from urllib2 import urlopen +CLASS_INDEX_PAGE_URL = 'https://clang.llvm.org/doxygen/classes.html' +try: + CLASS_INDEX_PAGE = urlopen(CLASS_INDEX_PAGE_URL).read() +except Exception as e: + raise Exception('Unable to get %s: %s' % (CLASS_INDEX_PAGE_URL, e)) + MATCHERS_FILE = '../../include/clang/ASTMatchers/ASTMatchers.h' # Each matcher is documented in one row of the form: @@ -40,15 +46,18 @@ def esc(text): text = re.sub(r'<', '<', text) text = re.sub(r'>', '>', text) def link_if_exists(m): + """Wrap a likely AST node name in a link to its clang docs. + + We want to do this only if the page exists, in which case it will be + referenced from the class index page. + """ name = m.group(1) url = 'https://clang.llvm.org/doxygen/classclang_1_1%s.html' % name if url not in doxygen_probes: - try: - print('Probing %s...' % url) - urlopen(url) - doxygen_probes[url] = True - except: - doxygen_probes[url] = False + search_str = 'href="classclang_1_1%s.html"' % name + doxygen_probes[url] = search_str in CLASS_INDEX_PAGE + if not doxygen_probes[url]: + print('Did not find %s in class index page' % name) if doxygen_probes[url]: return r'Matcher<%s>' % (url, name) else: