Skip to content

Commit 91ec92d

Browse files
committed
Add missing Sphinx cross-references
1 parent a127f75 commit 91ec92d

File tree

2 files changed

+109
-2
lines changed

2 files changed

+109
-2
lines changed

docstring_to_markdown/rst.py

Lines changed: 92 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,100 @@ def __init__(self, pattern: str, replacement: str, name: Union[str, None] = None
1212
self.name = name
1313

1414

15+
# https://www.sphinx-doc.org/en/master/usage/restructuredtext/domains.html#cross-referencing-python-objects
16+
SPHINX_CROSS_REF_PYTHON = (
17+
'mod',
18+
'func',
19+
'data',
20+
'const',
21+
'class',
22+
'meth',
23+
'attr',
24+
'exc',
25+
'obj'
26+
)
27+
28+
# https://www.sphinx-doc.org/en/master/usage/restructuredtext/domains.html#cross-referencing-c-constructs
29+
SPHINX_CROSS_REF_C = (
30+
'member',
31+
'data',
32+
'func',
33+
'macro',
34+
'struct',
35+
'union',
36+
'enum',
37+
'enumerator',
38+
'type'
39+
)
40+
41+
# https://www.sphinx-doc.org/en/master/usage/restructuredtext/domains.html#cross-referencing
42+
SPHINX_CROSS_REF_CPP = (
43+
'any',
44+
'class',
45+
'struct',
46+
'func',
47+
'member',
48+
'var',
49+
'type',
50+
'concept',
51+
'enum',
52+
'enumerator'
53+
)
54+
55+
# https://www.sphinx-doc.org/en/master/usage/restructuredtext/domains.html#the-javascript-domain
56+
SPHINX_CROSS_REF_JS = (
57+
'mod',
58+
'func',
59+
'meth',
60+
'class',
61+
'data',
62+
'attr'
63+
)
64+
65+
# https://www.sphinx-doc.org/en/master/usage/restructuredtext/domains.html#the-restructuredtext-domain
66+
SPHINX_CROSS_REF_RST = (
67+
'dir',
68+
'role'
69+
)
70+
71+
# https://www.sphinx-doc.org/en/master/usage/restructuredtext/roles.html
72+
SPHINX_CROSS_REF_OTHER = (
73+
'any',
74+
# https://www.sphinx-doc.org/en/master/usage/restructuredtext/roles.html#cross-referencing-other-items-of-interest
75+
'envvar',
76+
'token',
77+
'keyword',
78+
'option',
79+
'term',
80+
)
81+
1582
SPHINX_RULES: List[Directive] = [
1683
Directive(
17-
pattern=r':(func|meth|class|obj|term):`\.?(?P<name>[^`]+?)`',
84+
pattern=r':c:({}):`\.?(?P<name>[^`]+?)`'.format('|'.join(SPHINX_CROSS_REF_C)),
85+
replacement=r'`\g<name>`'
86+
),
87+
Directive(
88+
pattern=r':c:({}):`\.?(?P<name>[^`]+?)`'.format('|'.join(SPHINX_CROSS_REF_C)),
89+
replacement=r'`\g<name>`'
90+
),
91+
Directive(
92+
pattern=r':cpp:({}):`\.?(?P<name>[^`]+?)`'.format('|'.join(SPHINX_CROSS_REF_CPP)),
93+
replacement=r'`\g<name>`'
94+
),
95+
Directive(
96+
pattern=r':js:({}):`\.?(?P<name>[^`]+?)`'.format('|'.join(SPHINX_CROSS_REF_JS)),
97+
replacement=r'`\g<name>`'
98+
),
99+
Directive(
100+
pattern=r'(:py)?:({}):`\.?(?P<name>[^`]+?)`'.format('|'.join(SPHINX_CROSS_REF_PYTHON)),
101+
replacement=r'`\g<name>`'
102+
),
103+
Directive(
104+
pattern=r'(:rst)?:({}):`\.?(?P<name>[^`]+?)`'.format('|'.join(SPHINX_CROSS_REF_RST)),
105+
replacement=r'`\g<name>`'
106+
),
107+
Directive(
108+
pattern=r':({}):`\.?(?P<name>[^`]+?)`'.format('|'.join(SPHINX_CROSS_REF_OTHER)),
18109
replacement=r'`\g<name>`'
19110
),
20111
Directive(

tests/test_rst.py

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -715,10 +715,26 @@ def func(): pass
715715
'rst': REFERENCES,
716716
'md': REFERENCES_MARKDOWN
717717
},
718-
'converts sphinx func, meth, and class': {
718+
'converts sphinx cross-references to func, meth, class, etc.': {
719719
'rst': ':func:`function1`, :meth:`.Script.inline`, :class:`.Environment`',
720720
'md': '`function1`, `Script.inline`, `Environment`'
721721
},
722+
'converts sphinx cross-references in Python domain': {
723+
'rst': ':py:func:`function1`, :py:meth:`.Script.inline`, :py:class:`.Environment`',
724+
'md': '`function1`, `Script.inline`, `Environment`'
725+
},
726+
'converts sphinx cross-references in C domain': {
727+
'rst': ':c:func:`function1`, :c:struct:`Data`',
728+
'md': '`function1`, `Data`'
729+
},
730+
'converts sphinx cross-references in C++ domain': {
731+
'rst': ':cpp:func:`function1`, :cpp:var:`data`',
732+
'md': '`function1`, `data`'
733+
},
734+
'converts sphinx cross-references in JS domain': {
735+
'rst': ':js:func:`function1`, :js:class:`Math`',
736+
'md': '`function1`, `Math`'
737+
},
722738
'converts sphinx params': {
723739
'rst': ':param x: test arg',
724740
'md': '- `x`: test arg'

0 commit comments

Comments
 (0)