bpo-29637: clean docstring only if not None (GH-267)

This commit is contained in:
Matthias Bussonnier 2017-02-23 22:44:19 -08:00 committed by INADA Naoki
parent 357bad7101
commit 41cea70aa3
2 changed files with 5 additions and 1 deletions

View file

@ -194,11 +194,14 @@ def get_docstring(node, clean=True):
Return the docstring for the given node or None if no docstring can Return the docstring for the given node or None if no docstring can
be found. If the node provided does not have docstrings a TypeError be found. If the node provided does not have docstrings a TypeError
will be raised. will be raised.
If *clean* is `True`, all tabs are expanded to spaces and any whitespace
that can be uniformly removed from the second line onwards is removed.
""" """
if not isinstance(node, (AsyncFunctionDef, FunctionDef, ClassDef, Module)): if not isinstance(node, (AsyncFunctionDef, FunctionDef, ClassDef, Module)):
raise TypeError("%r can't have docstrings" % node.__class__.__name__) raise TypeError("%r can't have docstrings" % node.__class__.__name__)
text = node.docstring text = node.docstring
if clean: if clean and text:
import inspect import inspect
text = inspect.cleandoc(text) text = inspect.cleandoc(text)
return text return text

View file

@ -532,6 +532,7 @@ class ASTHelpers_Test(unittest.TestCase):
node = ast.parse('async def foo():\n """spam\n ham"""') node = ast.parse('async def foo():\n """spam\n ham"""')
self.assertEqual(ast.get_docstring(node.body[0]), 'spam\nham') self.assertEqual(ast.get_docstring(node.body[0]), 'spam\nham')
self.assertIsNone(ast.get_docstring(ast.parse('')))
def test_literal_eval(self): def test_literal_eval(self):
self.assertEqual(ast.literal_eval('[1, 2, 3]'), [1, 2, 3]) self.assertEqual(ast.literal_eval('[1, 2, 3]'), [1, 2, 3])