diff options
author | Jonathan Corbet <corbet@lwn.net> | 2022-06-30 18:36:30 +0200 |
---|---|---|
committer | Jonathan Corbet <corbet@lwn.net> | 2022-07-07 20:57:55 +0200 |
commit | 309027b57c61d4d168679d49fd11add0dfdce900 (patch) | |
tree | 8dc346e54c37af767e34ada0b3779ccee36abeeb | |
parent | docs: automarkup: track failed cross-reference attempts (diff) | |
download | linux-309027b57c61d4d168679d49fd11add0dfdce900.tar.xz linux-309027b57c61d4d168679d49fd11add0dfdce900.zip |
docs: automarkup: do not look up symbols twice
The automarkup code tries to look up symbols once as a function, and once
as a macro. The Sphinx C domain code, though, totally ignores that
distinction and will return the same results either way. So just look
things up once and be done with it; the resulting output does not change,
but htmldocs build time drops by about 5%.
Tested-by: Akira Yokosawa <akiyks@gmail.com>
Link: https://lore.kernel.org/r/20220630163630.714673-3-corbet@lwn.net
Signed-off-by: Jonathan Corbet <corbet@lwn.net>
-rw-r--r-- | Documentation/sphinx/automarkup.py | 57 |
1 files changed, 26 insertions, 31 deletions
diff --git a/Documentation/sphinx/automarkup.py b/Documentation/sphinx/automarkup.py index 5b1f83e6192f..06b34740bf90 100644 --- a/Documentation/sphinx/automarkup.py +++ b/Documentation/sphinx/automarkup.py @@ -125,19 +125,16 @@ def markup_refs(docname, app, node): # do them again. # failed_lookups = { } -def failure_seen(target, reftype): - return (target + '::' + reftype) in failed_lookups -def note_failure(target, reftype): - failed_lookups[target + '::' + reftype] = True +def failure_seen(target): + return (target) in failed_lookups +def note_failure(target): + failed_lookups[target] = True # # In sphinx3 we can cross-reference to C macro and function, each one with its # own C role, but both match the same regex, so we try both. # def markup_func_ref_sphinx3(docname, app, match): - class_str = ['c-func', 'c-macro'] - reftype_str = ['function', 'macro'] - cdom = app.env.domains['c'] # # Go through the dance of getting an xref out of the C domain @@ -153,30 +150,28 @@ def markup_func_ref_sphinx3(docname, app, match): if base_target not in Skipnames: for target in possible_targets: - if target not in Skipfuncs: - for class_s, reftype_s in zip(class_str, reftype_str): - if failure_seen(target, reftype_s): - continue - lit_text = nodes.literal(classes=['xref', 'c', class_s]) - lit_text += target_text - pxref = addnodes.pending_xref('', refdomain = 'c', - reftype = reftype_s, - reftarget = target, modname = None, - classname = None) - # - # XXX The Latex builder will throw NoUri exceptions here, - # work around that by ignoring them. - # - try: - xref = cdom.resolve_xref(app.env, docname, app.builder, - reftype_s, target, pxref, - lit_text) - except NoUri: - xref = None - - if xref: - return xref - note_failure(target, reftype_s) + if (target not in Skipfuncs) and not failure_seen(target): + lit_text = nodes.literal(classes=['xref', 'c', 'c-func']) + lit_text += target_text + pxref = addnodes.pending_xref('', refdomain = 'c', + reftype = 'function', + reftarget = target, + modname = None, + classname = None) + # + # XXX The Latex builder will throw NoUri exceptions here, + # work around that by ignoring them. + # + try: + xref = cdom.resolve_xref(app.env, docname, app.builder, + 'function', target, pxref, + lit_text) + except NoUri: + xref = None + + if xref: + return xref + note_failure(target) return target_text |