diff --git a/sphinx/domains/python.py b/sphinx/domains/python.py index 930f8e72f21..ec440bd40ca 100644 --- a/sphinx/domains/python.py +++ b/sphinx/domains/python.py @@ -51,7 +51,7 @@ py_sig_re = re.compile( r'''^ ([\w.]*\.)? # class name(s) (\w+) \s* # thing name - (?: \[\s*(.*)\s*])? # optional: type parameters list + (?: \[\s*(.*?)\s*\])? # optional: type parameters list (?: \(\s*(.*)\s*\) # optional: arguments (?:\s* -> \s* (.*))? # return annotation )? $ # and nothing more diff --git a/tests/test_domain_py.py b/tests/test_domain_py.py index c5a044bc663..a9793b6788d 100644 --- a/tests/test_domain_py.py +++ b/tests/test_domain_py.py @@ -59,6 +59,12 @@ def test_function_signatures(): rv = parse('func(a=1) -> int object') assert rv == '(a=1)' + rv = parse('func[Annotated[typename]](a=1) -> int') + assert rv == '(a=1)' + + rv = parse('func[Annotated[typename]](a=1) -> Annotated[typename]') + assert rv == '(a=1)' + rv = parse('func(a=1, [b=None])') assert rv == '(a=1, [b=None])'