mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
Patch #1159931/bug #1143895: inspect.getsource failed when functions,
etc., had comments after the colon, and some other cases. This patch take a simpler approach that doesn't rely on looking for a ':'. Thanks Simon Percivall!
This commit is contained in:
parent
f77d0334f3
commit
a5855d5ace
3 changed files with 26 additions and 5 deletions
|
@ -504,6 +504,7 @@ class BlockFinder:
|
|||
"""Provide a tokeneater() method to detect the end of a code block."""
|
||||
def __init__(self):
|
||||
self.indent = 0
|
||||
self.islambda = False
|
||||
self.started = False
|
||||
self.passline = False
|
||||
self.last = 0
|
||||
|
@ -511,11 +512,8 @@ class BlockFinder:
|
|||
def tokeneater(self, type, token, (srow, scol), (erow, ecol), line):
|
||||
if not self.started:
|
||||
if token in ("def", "class", "lambda"):
|
||||
lastcolon = line.rfind(":")
|
||||
if lastcolon:
|
||||
oneline = re.search(r"\w", line[lastcolon:])
|
||||
if oneline and line[-2:] != "\\\n":
|
||||
raise EndOfBlock, srow
|
||||
if token == "lambda":
|
||||
self.islambda = True
|
||||
self.started = True
|
||||
self.passline = True
|
||||
elif type == tokenize.NEWLINE:
|
||||
|
@ -523,6 +521,8 @@ class BlockFinder:
|
|||
self.last = srow
|
||||
elif self.passline:
|
||||
pass
|
||||
elif self.islambda:
|
||||
raise EndOfBlock, self.last
|
||||
elif type == tokenize.INDENT:
|
||||
self.indent = self.indent + 1
|
||||
self.passline = True
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue