parent
13bd0925eb
commit
836acad863
@ -10,6 +10,8 @@
|
|||||||
|
|
||||||
<!-- Changes that affect Black's stable style -->
|
<!-- Changes that affect Black's stable style -->
|
||||||
|
|
||||||
|
- Fix unwanted crashes caused by AST equivalency check (#4290)
|
||||||
|
|
||||||
### Preview style
|
### Preview style
|
||||||
|
|
||||||
<!-- Changes that affect Black's preview style -->
|
<!-- Changes that affect Black's preview style -->
|
||||||
|
@ -223,11 +223,9 @@ def _stringify_ast(node: ast.AST, parent_stack: List[ast.AST]) -> Iterator[str]:
|
|||||||
and field == "value"
|
and field == "value"
|
||||||
and isinstance(value, str)
|
and isinstance(value, str)
|
||||||
and len(parent_stack) >= 2
|
and len(parent_stack) >= 2
|
||||||
|
# Any standalone string, ideally this would
|
||||||
|
# exactly match black.nodes.is_docstring
|
||||||
and isinstance(parent_stack[-1], ast.Expr)
|
and isinstance(parent_stack[-1], ast.Expr)
|
||||||
and isinstance(
|
|
||||||
parent_stack[-2],
|
|
||||||
(ast.FunctionDef, ast.AsyncFunctionDef, ast.Module, ast.ClassDef),
|
|
||||||
)
|
|
||||||
):
|
):
|
||||||
# Constant strings may be indented across newlines, if they are
|
# Constant strings may be indented across newlines, if they are
|
||||||
# docstrings; fold spaces after newlines when comparing. Similarly,
|
# docstrings; fold spaces after newlines when comparing. Similarly,
|
||||||
|
@ -2904,6 +2904,22 @@ async def f():
|
|||||||
"""docstring"""
|
"""docstring"""
|
||||||
''',
|
''',
|
||||||
)
|
)
|
||||||
|
self.check_ast_equivalence(
|
||||||
|
"""
|
||||||
|
if __name__ == "__main__":
|
||||||
|
" docstring-like "
|
||||||
|
""",
|
||||||
|
'''
|
||||||
|
if __name__ == "__main__":
|
||||||
|
"""docstring-like"""
|
||||||
|
''',
|
||||||
|
)
|
||||||
|
self.check_ast_equivalence(r'def f(): r" \n "', r'def f(): "\\n"')
|
||||||
|
self.check_ast_equivalence('try: pass\nexcept: " x "', 'try: pass\nexcept: "x"')
|
||||||
|
|
||||||
|
self.check_ast_equivalence(
|
||||||
|
'def foo(): return " x "', 'def foo(): return "x"', should_fail=True
|
||||||
|
)
|
||||||
|
|
||||||
def test_assert_equivalent_fstring(self) -> None:
|
def test_assert_equivalent_fstring(self) -> None:
|
||||||
major, minor = sys.version_info[:2]
|
major, minor = sys.version_info[:2]
|
||||||
|
Loading…
Reference in New Issue
Block a user