* Fix: py:function directive generate incorrectly signature when specifying a default parameter with an empty list []. Closes #1503

This commit is contained in:
Takayuki Shimizukawa 2014-07-12 20:50:15 +09:00
parent 4d69072f44
commit 91709946d6
3 changed files with 47 additions and 1 deletions

View File

@ -21,6 +21,8 @@ Bugs fixed
* #1226: autodoc, autosummary: importing setup.py by automodule will invoke
setup process and execute `sys.exit()`. Now sphinx avoids SystemExit
exception and emits warnings without unexpected termination.
* #1503: py:function directive generate incorrectly signature when specifying
a default parameter with an empty list `[]`. Thanks to Geert Jansen.
Release 1.2.2 (released Mar 2, 2014)
====================================

View File

@ -54,7 +54,7 @@ def _pseudo_parse_arglist(signode, arglist):
while argument.startswith(']'):
stack.pop()
argument = argument[1:].strip()
while argument.endswith(']'):
while argument.endswith(']') and not argument.endswith('[]'):
ends_close += 1
argument = argument[:-1].strip()
while argument.endswith('['):

44
tests/test_py_domain.py Normal file
View File

@ -0,0 +1,44 @@
# -*- coding: utf-8 -*-
"""
test_py_domain
~~~~~~~~~~~~~~
Tests the Python Domain
:copyright: Copyright 2007-2014 by the Sphinx team, see AUTHORS.
:license: BSD, see LICENSE for details.
"""
from sphinx import addnodes
from sphinx.domains.python import py_sig_re, _pseudo_parse_arglist
def parse(sig):
m = py_sig_re.match(sig)
if m is None:
raise ValueError
name_prefix, name, arglist, retann = m.groups()
signode = addnodes.desc_signature(sig, '')
_pseudo_parse_arglist(signode, arglist)
return signode.astext()
def test_function_signatures():
rv = parse('func(a=1) -> int object')
assert unicode(rv) == u'a=1'
rv = parse('func(a=1, [b=None])')
assert unicode(rv) == u'a=1, [b=None]'
rv = parse('func(a=1[, b=None])')
assert unicode(rv) == u'a=1, [b=None]'
rv = parse("compile(source : string, filename, symbol='file')")
assert unicode(rv) == u"source : string, filename, symbol='file'"
rv = parse('func(a=[], [b=None])')
assert unicode(rv) == u'a=[], [b=None]'
rv = parse('func(a=[][, b=None])')
assert unicode(rv) == u'a=[], [b=None]'