From: Vladimír Vondruš Date: Sun, 21 Apr 2019 20:55:40 +0000 (+0200) Subject: documentation/python: gracefully handle also crazy return types. X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~cjwatson/git?a=commitdiff_plain;h=819d4474816b9a9d78ec621f2a9d67878d1b8f82;p=blog.git documentation/python: gracefully handle also crazy return types. --- diff --git a/documentation/python.py b/documentation/python.py index 33381b23..772158be 100755 --- a/documentation/python.py +++ b/documentation/python.py @@ -245,7 +245,15 @@ def parse_pybind_signature(signature: str) -> Tuple[str, str, List[Tuple[str, st else: return_type = None - assert not signature or signature[0] == '\n' + if signature and signature[0] != '\n': + end = original_signature.find('\n') + logging.warning("cannot parse pybind11 function signature %s", original_signature[:end]) + if end != -1 and len(original_signature) > end + 1 and original_signature[end + 1] == '\n': + brief = extract_brief(original_signature[end + 1:]) + else: + brief = '' + return (name, brief, [('…', None, None)], None) + if len(signature) > 1 and signature[1] == '\n': brief = extract_brief(signature[2:]) else: diff --git a/documentation/test_python/test_pybind.py b/documentation/test_python/test_pybind.py index 1547430f..a03f91d4 100644 --- a/documentation/test_python/test_pybind.py +++ b/documentation/test_python/test_pybind.py @@ -116,6 +116,16 @@ class Signature(unittest.TestCase): 'foo(a: int, b: Math::Vector<4, UnsignedInt>)\n\nThis is text!!'), ('foo', 'This is text!!', [('…', None, None)], None)) + def test_crazy_return(self): + self.assertEqual(parse_pybind_signature( + 'foo(a: int) -> Math::Vector<4, UnsignedInt>'), + ('foo', '', [('…', None, None)], None)) + + def test_crazy_return_docs(self): + self.assertEqual(parse_pybind_signature( + 'foo(a: int) -> Math::Vector<4, UnsignedInt>\n\nThis returns!'), + ('foo', 'This returns!', [('…', None, None)], None)) + def test_no_name(self): self.assertEqual(parse_pybind_signature( '(arg0: MyClass) -> float'),