[Python-checkins] r64382 - in doctools/trunk: CHANGES sphinx/directives/desc.py sphinx/ext/autodoc.py sphinx/latexwriter.py

georg.brandl python-checkins at python.org
Wed Jun 18 20:34:18 CEST 2008


Author: georg.brandl
Date: Wed Jun 18 20:34:18 2008
New Revision: 64382

Log:
Support -> return type annotations.


Modified:
   doctools/trunk/CHANGES
   doctools/trunk/sphinx/directives/desc.py
   doctools/trunk/sphinx/ext/autodoc.py
   doctools/trunk/sphinx/latexwriter.py

Modified: doctools/trunk/CHANGES
==============================================================================
--- doctools/trunk/CHANGES	(original)
+++ doctools/trunk/CHANGES	Wed Jun 18 20:34:18 2008
@@ -57,6 +57,9 @@
 
 * 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

Modified: doctools/trunk/sphinx/directives/desc.py
==============================================================================
--- doctools/trunk/sphinx/directives/desc.py	(original)
+++ doctools/trunk/sphinx/directives/desc.py	Wed Jun 18 20:34:18 2008
@@ -75,10 +75,12 @@
 
 # ------ 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 @@
     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 @@
             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
 
 

Modified: doctools/trunk/sphinx/ext/autodoc.py
==============================================================================
--- doctools/trunk/sphinx/ext/autodoc.py	(original)
+++ doctools/trunk/sphinx/ext/autodoc.py	Wed Jun 18 20:34:18 2008
@@ -198,7 +198,7 @@
     # 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 @@
     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)

Modified: doctools/trunk/sphinx/latexwriter.py
==============================================================================
--- doctools/trunk/sphinx/latexwriter.py	(original)
+++ doctools/trunk/sphinx/latexwriter.py	Wed Jun 18 20:34:18 2008
@@ -979,6 +979,7 @@
         (u">", ur"\textgreater{}"),
         (u"^", ur"\textasciicircum{}"),
         (u"\x00", ur"\textbackslash{}"),
+        (u"\N{RIGHTWARDS ARROW}", ur"$\rightarrow$"),
     ]
 
     def encode(self, text):


More information about the Python-checkins mailing list