Skip to content

Commit 4aacd3f

Browse files
coadometa-codesync[bot]
authored andcommitted
Change doxygen template decoding to use a dictionary (#56087)
Summary: Pull Request resolved: #56087 Changelog: [Internal] Replaces the chain of `replace` calls with a dict containing relevant mappings. Reviewed By: cipolleschi Differential Revision: D96455803 fbshipit-source-id: adaf8bcd84ae091841797af243e90dec664be09f
1 parent d596a3d commit 4aacd3f

File tree

1 file changed

+19
-29
lines changed

1 file changed

+19
-29
lines changed

scripts/cxx-api/parser/utils/text_resolution.py

Lines changed: 19 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -15,41 +15,31 @@
1515
from doxmlparser import compound
1616

1717

18+
# Doxygen's encoding for special characters in refids, ordered longest-first
19+
# to avoid partial matches during replacement.
20+
_DOXYGEN_TEMPLATE_ENCODINGS = (
21+
("_8_8_8", "..."), # Variadic ellipsis
22+
("_00", ", "), # Comma (with space for readability)
23+
("_01", " "), # Space
24+
("_02", "*"), # Pointer
25+
("_05", "="), # Equals
26+
("_06", "&"), # Reference
27+
("_07", "("), # Open paren
28+
("_08", ")"), # Close paren
29+
("_3", "<"), # Template open
30+
("_4", ">"), # Template close
31+
)
32+
33+
1834
def decode_doxygen_template_encoding(encoded: str) -> str:
1935
"""Decode Doxygen's encoding for template specializations in refids.
2036
21-
Doxygen encodes special characters in refids using underscore-prefixed codes:
22-
- '_3' = '<' (template open)
23-
- '_4' = '>' (template close)
24-
- '_01' = ' ' (space)
25-
- '_07' = '(' (open paren)
26-
- '_08' = ')' (close paren)
27-
- '_8_8_8' = '...' (variadic ellipsis)
28-
- '_00' = ',' (comma)
29-
- '_02' = '*' (pointer)
30-
- '_05' = '=' (equals)
31-
- '_06' = '&' (reference)
32-
37+
Doxygen encodes special characters in refids using underscore-prefixed codes.
3338
e.g. 'SyncCallback_3_01R_07Args_8_8_8_08_4' -> 'SyncCallback< R(Args...)>'
3439
"""
3540
result = encoded
36-
37-
# Process longer patterns first to avoid partial matches
38-
result = result.replace("_8_8_8", "...") # Variadic ellipsis
39-
40-
# Process two-char patterns (_0X codes)
41-
result = result.replace("_00", ", ") # Comma (with space for readability)
42-
result = result.replace("_01", " ") # Space
43-
result = result.replace("_02", "*") # Pointer
44-
result = result.replace("_05", "=") # Equals
45-
result = result.replace("_06", "&") # Reference
46-
result = result.replace("_07", "(") # Open paren
47-
result = result.replace("_08", ")") # Close paren
48-
49-
# Process single-char patterns last
50-
result = result.replace("_3", "<") # Template open
51-
result = result.replace("_4", ">") # Template close
52-
41+
for pattern, replacement in _DOXYGEN_TEMPLATE_ENCODINGS:
42+
result = result.replace(pattern, replacement)
5343
return result
5444

5545

0 commit comments

Comments
 (0)