Patch #1006219: let inspect.getsource show '@' decorators and add tests for
this (which are rather ugly, but it'll have to do until test_inspect gets a
major overhaul and a conversion to unittest). Thanks Simon Percivall!
diff --git a/Lib/inspect.py b/Lib/inspect.py
index 42eda77..3c47cd9 100644
--- a/Lib/inspect.py
+++ b/Lib/inspect.py
@@ -433,7 +433,7 @@
if not hasattr(object, 'co_firstlineno'):
raise IOError('could not find function definition')
lnum = object.co_firstlineno - 1
- pat = re.compile(r'^(\s*def\s)|(.*\slambda(:|\s))')
+ pat = re.compile(r'^(\s*def\s)|(.*\slambda(:|\s))|^(\s*@)')
while lnum > 0:
if pat.match(lines[lnum]): break
lnum = lnum - 1
@@ -509,7 +509,8 @@
def tokeneater(self, type, token, (srow, scol), (erow, ecol), line):
if not self.started:
- if type == tokenize.NAME: self.started = 1
+ if '@' in line: pass
+ elif type == tokenize.NAME: self.started = 1
elif type == tokenize.NEWLINE:
self.last = srow
elif type == tokenize.INDENT: