|
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