mirror of
https://github.com/python/cpython.git
synced 2024-11-24 10:24:35 +08:00
696136b993
* Use ast module to find class definition * Add NEWS entry * Fix class with multiple children and move decorator code to the method * Fix PR comments 1. Use node.decorator_list to select decorators 2. Remove unwanted variables in ClassVisitor 3. Simplify stack management as per review * Add test for nested functions and async calls * Fix pydoc test since comments are returned now correctly * Set event loop policy as None to fix environment related change * Refactor visit_AsyncFunctionDef and tests * Refactor to use local variables and fix tests * Add patch attribution * Use self.addCleanup for asyncio * Rename ClassVisitor to ClassFinder and fix asyncio cleanup * Return first class inside conditional in case of multiple definitions. Remove decorator for class source. * Add docstring to make the test correct * Modify NEWS entry regarding decorators * Return decorators too for bpo-15856 * Move ast and the class source code to top. Use proper Exception.
262 lines
3.4 KiB
Python
262 lines
3.4 KiB
Python
# line 1
|
|
def wrap(foo=None):
|
|
def wrapper(func):
|
|
return func
|
|
return wrapper
|
|
|
|
# line 7
|
|
def replace(func):
|
|
def insteadfunc():
|
|
print('hello')
|
|
return insteadfunc
|
|
|
|
# line 13
|
|
@wrap()
|
|
@wrap(wrap)
|
|
def wrapped():
|
|
pass
|
|
|
|
# line 19
|
|
@replace
|
|
def gone():
|
|
pass
|
|
|
|
# line 24
|
|
oll = lambda m: m
|
|
|
|
# line 27
|
|
tll = lambda g: g and \
|
|
g and \
|
|
g
|
|
|
|
# line 32
|
|
tlli = lambda d: d and \
|
|
d
|
|
|
|
# line 36
|
|
def onelinefunc(): pass
|
|
|
|
# line 39
|
|
def manyargs(arg1, arg2,
|
|
arg3, arg4): pass
|
|
|
|
# line 43
|
|
def twolinefunc(m): return m and \
|
|
m
|
|
|
|
# line 47
|
|
a = [None,
|
|
lambda x: x,
|
|
None]
|
|
|
|
# line 52
|
|
def setfunc(func):
|
|
globals()["anonymous"] = func
|
|
setfunc(lambda x, y: x*y)
|
|
|
|
# line 57
|
|
def with_comment(): # hello
|
|
world
|
|
|
|
# line 61
|
|
multiline_sig = [
|
|
lambda x, \
|
|
y: x+y,
|
|
None,
|
|
]
|
|
|
|
# line 68
|
|
def func69():
|
|
class cls70:
|
|
def func71():
|
|
pass
|
|
return cls70
|
|
extra74 = 74
|
|
|
|
# line 76
|
|
def func77(): pass
|
|
(extra78, stuff78) = 'xy'
|
|
extra79 = 'stop'
|
|
|
|
# line 81
|
|
class cls82:
|
|
def func83(): pass
|
|
(extra84, stuff84) = 'xy'
|
|
extra85 = 'stop'
|
|
|
|
# line 87
|
|
def func88():
|
|
# comment
|
|
return 90
|
|
|
|
# line 92
|
|
def f():
|
|
class X:
|
|
def g():
|
|
"doc"
|
|
return 42
|
|
return X
|
|
method_in_dynamic_class = f().g
|
|
|
|
#line 101
|
|
def keyworded(*arg1, arg2=1):
|
|
pass
|
|
|
|
#line 105
|
|
def annotated(arg1: list):
|
|
pass
|
|
|
|
#line 109
|
|
def keyword_only_arg(*, arg):
|
|
pass
|
|
|
|
@wrap(lambda: None)
|
|
def func114():
|
|
return 115
|
|
|
|
class ClassWithMethod:
|
|
def method(self):
|
|
pass
|
|
|
|
from functools import wraps
|
|
|
|
def decorator(func):
|
|
@wraps(func)
|
|
def fake():
|
|
return 42
|
|
return fake
|
|
|
|
#line 129
|
|
@decorator
|
|
def real():
|
|
return 20
|
|
|
|
#line 134
|
|
class cls135:
|
|
def func136():
|
|
def func137():
|
|
never_reached1
|
|
never_reached2
|
|
|
|
# line 141
|
|
class cls142:
|
|
a = """
|
|
class cls149:
|
|
...
|
|
"""
|
|
|
|
# line 148
|
|
class cls149:
|
|
|
|
def func151(self):
|
|
pass
|
|
|
|
'''
|
|
class cls160:
|
|
pass
|
|
'''
|
|
|
|
# line 159
|
|
class cls160:
|
|
|
|
def func162(self):
|
|
pass
|
|
|
|
# line 165
|
|
class cls166:
|
|
a = '''
|
|
class cls175:
|
|
...
|
|
'''
|
|
|
|
# line 172
|
|
class cls173:
|
|
|
|
class cls175:
|
|
pass
|
|
|
|
# line 178
|
|
class cls179:
|
|
pass
|
|
|
|
# line 182
|
|
class cls183:
|
|
|
|
class cls185:
|
|
|
|
def func186(self):
|
|
pass
|
|
|
|
def class_decorator(cls):
|
|
return cls
|
|
|
|
# line 193
|
|
@class_decorator
|
|
@class_decorator
|
|
class cls196:
|
|
|
|
@class_decorator
|
|
@class_decorator
|
|
class cls200:
|
|
pass
|
|
|
|
class cls203:
|
|
class cls204:
|
|
class cls205:
|
|
pass
|
|
class cls207:
|
|
class cls205:
|
|
pass
|
|
|
|
# line 211
|
|
def func212():
|
|
class cls213:
|
|
pass
|
|
return cls213
|
|
|
|
# line 217
|
|
class cls213:
|
|
def func219(self):
|
|
class cls220:
|
|
pass
|
|
return cls220
|
|
|
|
# line 224
|
|
async def func225():
|
|
class cls226:
|
|
pass
|
|
return cls226
|
|
|
|
# line 230
|
|
class cls226:
|
|
async def func232(self):
|
|
class cls233:
|
|
pass
|
|
return cls233
|
|
|
|
if True:
|
|
class cls238:
|
|
class cls239:
|
|
'''if clause cls239'''
|
|
else:
|
|
class cls238:
|
|
class cls239:
|
|
'''else clause 239'''
|
|
pass
|
|
|
|
#line 247
|
|
def positional_only_arg(a, /):
|
|
pass
|
|
|
|
#line 251
|
|
def all_markers(a, b, /, c, d, *, e, f):
|
|
pass
|
|
|
|
# line 255
|
|
def all_markers_with_args_and_kwargs(a, b, /, c, d, *args, e, f, **kwargs):
|
|
pass
|
|
|
|
#line 259
|
|
def all_markers_with_defaults(a, b=1, /, c=2, d=3, *, e=4, f=5):
|
|
pass
|