bpo-38870: Correctly handle empty docstrings in ast.unparse (GH-18768)
Co-authored-by: Pablo Galindo <Pablogsal@gmail.com>
This commit is contained in:
parent
d5a980a607
commit
e966af7cff
13
Lib/ast.py
13
Lib/ast.py
|
@ -1075,11 +1075,14 @@ class _Unparser(NodeVisitor):
|
|||
if node.kind == "u":
|
||||
self.write("u")
|
||||
|
||||
# Preserve quotes in the docstring by escaping them
|
||||
value = node.value.replace("\\", "\\\\")
|
||||
value = value.replace('"""', '""\"')
|
||||
if value[-1] == '"':
|
||||
value = value.replace('"', '\\"', -1)
|
||||
value = node.value
|
||||
if value:
|
||||
# Preserve quotes in the docstring by escaping them
|
||||
value = value.replace("\\", "\\\\")
|
||||
value = value.replace('"""', '""\"')
|
||||
value = value.replace("\r", "\\r")
|
||||
if value[-1] == '"':
|
||||
value = value.replace('"', '\\"', -1)
|
||||
|
||||
self.write(f'"""{value}"""')
|
||||
|
||||
|
|
|
@ -313,11 +313,18 @@ class UnparseTestCase(ASTTestCase):
|
|||
def test_docstrings(self):
|
||||
docstrings = (
|
||||
'this ends with double quote"',
|
||||
'this includes a """triple quote"""'
|
||||
'this includes a """triple quote"""',
|
||||
'\r',
|
||||
'\\r',
|
||||
'\t',
|
||||
'\\t',
|
||||
'\n',
|
||||
'\\n',
|
||||
'\r\\r\t\\t\n\\n'
|
||||
)
|
||||
for docstring in docstrings:
|
||||
# check as Module docstrings for easy testing
|
||||
self.check_ast_roundtrip(f"'{docstring}'")
|
||||
self.check_ast_roundtrip(f"'''{docstring}'''")
|
||||
|
||||
def test_constant_tuples(self):
|
||||
self.check_src_roundtrip(ast.Constant(value=(1,), kind=None), "(1,)")
|
||||
|
@ -390,6 +397,10 @@ class CosmeticTestCase(ASTTestCase):
|
|||
empty newline"""''',
|
||||
'"""With some \t"""',
|
||||
'"""Foo "bar" baz """',
|
||||
'"""\\r"""',
|
||||
'""""""',
|
||||
'"""\'\'\'"""',
|
||||
'"""\'\'\'\'\'\'"""',
|
||||
)
|
||||
|
||||
for prefix in docstring_prefixes:
|
||||
|
|
Loading…
Reference in New Issue