Support -> return type annotations.

This commit is contained in:
Georg Brandl 2008-06-18 18:34:18 +00:00
parent 242e343c10
commit 061d9c205f
4 changed files with 17 additions and 6 deletions

View File

@ -57,6 +57,9 @@ New features added
* The new TextBuilder creates plain-text output.
* Python 3-style signatures, giving a return annotation via ``->``,
are now supported.
* Extensions:
- The `autodoc` extension accepts signatures for functions, methods

View File

@ -75,10 +75,12 @@ def desc_index_text(desctype, module, name):
# ------ functions to parse a Python or C signature and create desc_* nodes.
py_sig_re = re.compile(r'''^([\w.]*\.)? # class names
(\w+) \s* # thing name
(?: \((.*)\) )? $ # optionally arguments
''', re.VERBOSE)
py_sig_re = re.compile(
r'''^ ([\w.]*\.)? # class name(s)
(\w+) \s* # thing name
(?: \((.*)\) # optional arguments
(\s* -> \s* .*)? )? $ # optional return annotation
''', re.VERBOSE)
py_paramlist_re = re.compile(r'([\[\],])') # split at '[', ']' and ','
@ -94,7 +96,7 @@ def parse_py_signature(signode, sig, desctype, module, env):
m = py_sig_re.match(sig)
if m is None:
raise ValueError
classname, name, arglist = m.groups()
classname, name, arglist, retann = m.groups()
if env.currclass:
add_module = False
@ -148,6 +150,9 @@ def parse_py_signature(signode, sig, desctype, module, env):
stack[-1] += addnodes.desc_parameter(token, token)
if len(stack) != 1:
raise ValueError
if retann:
retann = u' \N{RIGHTWARDS ARROW} ' + retann.strip()[2:]
signode += addnodes.desc_type(retann, retann)
return fullname, classname

View File

@ -198,7 +198,7 @@ def generate_rst(what, name, members, options, add_content, document, lineno,
# first, parse the definition -- auto directives for classes and functions
# can contain a signature which is then used instead of an autogenerated one
try:
path, base, signature = py_sig_re.match(name).groups()
path, base, signature, retann = py_sig_re.match(name).groups()
except:
warning = document.reporter.warning(
'invalid signature for auto%s (%r)' % (what, name), line=lineno)
@ -290,6 +290,8 @@ def generate_rst(what, name, members, options, add_content, document, lineno,
if signature is not None:
# signature given explicitly -- the parentheses were stripped by the regex
args = '(%s)' % signature
if retann:
args += retann
else:
try:
args = format_signature(what, todoc)

View File

@ -979,6 +979,7 @@ class LaTeXTranslator(nodes.NodeVisitor):
(u">", ur"\textgreater{}"),
(u"^", ur"\textasciicircum{}"),
(u"\x00", ur"\textbackslash{}"),
(u"\N{RIGHTWARDS ARROW}", ur"$\rightarrow$"),
]
def encode(self, text):