Merge pull request #11751 from bluetech/backport-11143-to-7.4.x

(cherry picked from commit 084d756ae6)

[ran: adapted to 7.4.x, fixed changelog issue number]
This commit is contained in:
Ran Benita 2023-12-31 12:12:34 +02:00 committed by GitHub
commit 76c107c463
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 26 additions and 4 deletions

View File

@ -377,6 +377,7 @@ Tomer Keren
Tony Narlock
Tor Colvin
Trevor Bekolay
Tushar Sadhwani
Tyler Goodlet
Tyler Smart
Tzu-ping Chung

View File

@ -0,0 +1 @@
Fix non-string constants at the top of file being detected as docstrings on Python>=3.8.

View File

@ -604,6 +604,13 @@ def _get_assertion_exprs(src: bytes) -> Dict[int, str]:
return ret
def _get_ast_constant_value(value: astStr) -> object:
if sys.version_info >= (3, 8):
return value.value
else:
return value.s
class AssertionRewriter(ast.NodeVisitor):
"""Assertion rewriting implementation.
@ -700,11 +707,10 @@ class AssertionRewriter(ast.NodeVisitor):
expect_docstring
and isinstance(item, ast.Expr)
and isinstance(item.value, astStr)
and isinstance(_get_ast_constant_value(item.value), str)
):
if sys.version_info >= (3, 8):
doc = item.value.value
else:
doc = item.value.s
doc = _get_ast_constant_value(item.value)
assert isinstance(doc, str)
if self.is_rewrite_disabled(doc):
return
expect_docstring = False

View File

@ -2096,3 +2096,17 @@ class TestReprSizeVerbosity:
self.create_test_file(pytester, DEFAULT_REPR_MAX_SIZE * 10)
result = pytester.runpytest("-vv")
result.stdout.no_fnmatch_line("*xxx...xxx*")
class TestIssue11140:
def test_constant_not_picked_as_module_docstring(self, pytester: Pytester) -> None:
pytester.makepyfile(
"""\
0
def test_foo():
pass
"""
)
result = pytester.runpytest()
assert result.ret == 0