|
6 | 6 |
|
7 | 7 |
|
8 | 8 | class Directive: |
9 | | - def __init__(self, pattern: str, replacement: str, name: Union[str, None] = None): |
| 9 | + def __init__( |
| 10 | + self, pattern: str, replacement: str, |
| 11 | + name: Union[str, None] = None, |
| 12 | + flags: int = 0 |
| 13 | + ): |
10 | 14 | self.pattern = pattern |
11 | 15 | self.replacement = replacement |
12 | 16 | self.name = name |
| 17 | + self.flags = flags |
13 | 18 |
|
14 | 19 |
|
15 | 20 | # https://www.sphinx-doc.org/en/master/usage/restructuredtext/domains.html#cross-referencing-python-objects |
@@ -79,6 +84,15 @@ def __init__(self, pattern: str, replacement: str, name: Union[str, None] = None |
79 | 84 | 'term', |
80 | 85 | ) |
81 | 86 |
|
| 87 | +SPHINX_PARAM = ( |
| 88 | + 'param', |
| 89 | + 'parameter', |
| 90 | + 'arg', |
| 91 | + 'argument', |
| 92 | + 'key', |
| 93 | + 'keyword' |
| 94 | +) |
| 95 | + |
82 | 96 | SPHINX_RULES: List[Directive] = [ |
83 | 97 | Directive( |
84 | 98 | pattern=r':c:({}):`\.?(?P<name>[^`]+?)`'.format('|'.join(SPHINX_CROSS_REF_C)), |
@@ -109,13 +123,40 @@ def __init__(self, pattern: str, replacement: str, name: Union[str, None] = None |
109 | 123 | replacement=r'`\g<name>`' |
110 | 124 | ), |
111 | 125 | Directive( |
112 | | - pattern=r'^:param (?P<param>\S+):', |
113 | | - replacement=r'- `\g<param>`:' |
| 126 | + pattern=r'^\s*:({}) (?P<type>\S+) (?P<param>\S+):'.format('|'.join(SPHINX_PARAM)), |
| 127 | + replacement=r'- `\g<param>` (`\g<type>`):', |
| 128 | + flags=re.MULTILINE |
114 | 129 | ), |
115 | 130 | Directive( |
116 | | - pattern=r'^:return:', |
117 | | - replacement=r'Returns:' |
118 | | - ) |
| 131 | + pattern=r'^\s*:({}) (?P<param>\S+): (?P<desc>.*)(\n|\r\n?):type \2: (?P<type>.*)$'.format('|'.join(SPHINX_PARAM)), |
| 132 | + replacement=r'- `\g<param>` (\g<type>): \g<desc>', |
| 133 | + flags=re.MULTILINE |
| 134 | + ), |
| 135 | + Directive( |
| 136 | + pattern=r'^\s*:({}) (?P<param>\S+):'.format('|'.join(SPHINX_PARAM)), |
| 137 | + replacement=r'- `\g<param>`:', |
| 138 | + flags=re.MULTILINE |
| 139 | + ), |
| 140 | + Directive( |
| 141 | + pattern=r'^\s*:type (?P<param>\S+):', |
| 142 | + replacement=r' . Type: `\g<param>`:', |
| 143 | + flags=re.MULTILINE |
| 144 | + ), |
| 145 | + Directive( |
| 146 | + pattern=r'^\s*:(return|returns):', |
| 147 | + replacement=r'- returns:', |
| 148 | + flags=re.MULTILINE |
| 149 | + ), |
| 150 | + Directive( |
| 151 | + pattern=r'^\s*:rtype: (?P<type>\S+)', |
| 152 | + replacement=r'- return type: `\g<type>`', |
| 153 | + flags=re.MULTILINE |
| 154 | + ), |
| 155 | + Directive( |
| 156 | + pattern=r'^\s*:(raises|raise|except|exception) (?P<exception>\S+):', |
| 157 | + replacement=r'- raises `\g<exception>`:', |
| 158 | + flags=re.MULTILINE |
| 159 | + ), |
119 | 160 | ] |
120 | 161 |
|
121 | 162 |
|
@@ -646,7 +687,7 @@ def flush_buffer(): |
646 | 687 | lines = '\n'.join(lines_buffer) |
647 | 688 | # rst markup handling |
648 | 689 | for directive in DIRECTIVES: |
649 | | - lines = re.sub(directive.pattern, directive.replacement, lines) |
| 690 | + lines = re.sub(directive.pattern, directive.replacement, lines, flags=directive.flags) |
650 | 691 |
|
651 | 692 | for (section, header) in RST_SECTIONS.items(): |
652 | 693 | lines = lines.replace(header, '\n#### ' + section + '\n') |
|
0 commit comments