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
|
@ -1075,9 +1075,12 @@ class _Unparser(NodeVisitor):
|
||||||
if node.kind == "u":
|
if node.kind == "u":
|
||||||
self.write("u")
|
self.write("u")
|
||||||
|
|
||||||
|
value = node.value
|
||||||
|
if value:
|
||||||
# Preserve quotes in the docstring by escaping them
|
# Preserve quotes in the docstring by escaping them
|
||||||
value = node.value.replace("\\", "\\\\")
|
value = value.replace("\\", "\\\\")
|
||||||
value = value.replace('"""', '""\"')
|
value = value.replace('"""', '""\"')
|
||||||
|
value = value.replace("\r", "\\r")
|
||||||
if value[-1] == '"':
|
if value[-1] == '"':
|
||||||
value = value.replace('"', '\\"', -1)
|
value = value.replace('"', '\\"', -1)
|
||||||
|
|
||||||
|
|
|
@ -313,11 +313,18 @@ class UnparseTestCase(ASTTestCase):
|
||||||
def test_docstrings(self):
|
def test_docstrings(self):
|
||||||
docstrings = (
|
docstrings = (
|
||||||
'this ends with double quote"',
|
'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:
|
for docstring in docstrings:
|
||||||
# check as Module docstrings for easy testing
|
# check as Module docstrings for easy testing
|
||||||
self.check_ast_roundtrip(f"'{docstring}'")
|
self.check_ast_roundtrip(f"'''{docstring}'''")
|
||||||
|
|
||||||
def test_constant_tuples(self):
|
def test_constant_tuples(self):
|
||||||
self.check_src_roundtrip(ast.Constant(value=(1,), kind=None), "(1,)")
|
self.check_src_roundtrip(ast.Constant(value=(1,), kind=None), "(1,)")
|
||||||
|
@ -390,6 +397,10 @@ class CosmeticTestCase(ASTTestCase):
|
||||||
empty newline"""''',
|
empty newline"""''',
|
||||||
'"""With some \t"""',
|
'"""With some \t"""',
|
||||||
'"""Foo "bar" baz """',
|
'"""Foo "bar" baz """',
|
||||||
|
'"""\\r"""',
|
||||||
|
'""""""',
|
||||||
|
'"""\'\'\'"""',
|
||||||
|
'"""\'\'\'\'\'\'"""',
|
||||||
)
|
)
|
||||||
|
|
||||||
for prefix in docstring_prefixes:
|
for prefix in docstring_prefixes:
|
||||||
|
|
Loading…
Reference in New Issue