Fixed error message prints function decorators when using assert in Python 3.9 and above. (#9359)

This commit is contained in:
Yuval Shimon
2021-12-07 11:31:03 +02:00
committed by Bruno Oliveira
parent 85897eddc6
commit 9bfa02ea07
4 changed files with 20 additions and 0 deletions

View File

@@ -149,6 +149,11 @@ def get_statement_startend2(lineno: int, node: ast.AST) -> Tuple[int, Optional[i
values: List[int] = []
for x in ast.walk(node):
if isinstance(x, (ast.stmt, ast.ExceptHandler)):
# Before Python 3.8, the lineno of a decorated class or function pointed at the decorator.
# Since Python 3.8, the lineno points to the class/def, so need to include the decorators.
if isinstance(x, (ast.ClassDef, ast.FunctionDef, ast.AsyncFunctionDef)):
for d in x.decorator_list:
values.append(d.lineno - 1)
values.append(x.lineno - 1)
for name in ("finalbody", "orelse"):
val: Optional[List[ast.stmt]] = getattr(x, name, None)