Fixed error message prints function decorators when using assert in Python 3.9 and above. (#9359)
This commit is contained in:
parent
ef76c28ea2
commit
dc7091502d
1
AUTHORS
1
AUTHORS
|
@ -348,6 +348,7 @@ Xixi Zhao
|
||||||
Xuan Luong
|
Xuan Luong
|
||||||
Xuecong Liao
|
Xuecong Liao
|
||||||
Yoav Caspi
|
Yoav Caspi
|
||||||
|
Yuval Shimon
|
||||||
Zac Hatfield-Dodds
|
Zac Hatfield-Dodds
|
||||||
Zachary Kneupper
|
Zachary Kneupper
|
||||||
Zoltán Máté
|
Zoltán Máté
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Fixed error message prints function decorators when using assert in Python 3.9 and above.
|
|
@ -149,6 +149,11 @@ def get_statement_startend2(lineno: int, node: ast.AST) -> Tuple[int, Optional[i
|
||||||
values: List[int] = []
|
values: List[int] = []
|
||||||
for x in ast.walk(node):
|
for x in ast.walk(node):
|
||||||
if isinstance(x, (ast.stmt, ast.ExceptHandler)):
|
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)
|
values.append(x.lineno - 1)
|
||||||
for name in ("finalbody", "orelse"):
|
for name in ("finalbody", "orelse"):
|
||||||
val: Optional[List[ast.stmt]] = getattr(x, name, None)
|
val: Optional[List[ast.stmt]] = getattr(x, name, None)
|
||||||
|
|
|
@ -618,6 +618,19 @@ def something():
|
||||||
assert str(source) == "def func(): raise ValueError(42)"
|
assert str(source) == "def func(): raise ValueError(42)"
|
||||||
|
|
||||||
|
|
||||||
|
def test_decorator() -> None:
|
||||||
|
s = """\
|
||||||
|
def foo(f):
|
||||||
|
pass
|
||||||
|
|
||||||
|
@foo
|
||||||
|
def bar():
|
||||||
|
pass
|
||||||
|
"""
|
||||||
|
source = getstatement(3, s)
|
||||||
|
assert "@foo" in str(source)
|
||||||
|
|
||||||
|
|
||||||
def XXX_test_expression_multiline() -> None:
|
def XXX_test_expression_multiline() -> None:
|
||||||
source = """\
|
source = """\
|
||||||
something
|
something
|
||||||
|
|
Loading…
Reference in New Issue