summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
Diffstat (limited to 'Lib')
-rw-r--r--Lib/inspect.py10
-rw-r--r--Lib/test/inspect_fodder2.py11
-rw-r--r--Lib/test/test_inspect.py10
3 files changed, 26 insertions, 5 deletions
diff --git a/Lib/inspect.py b/Lib/inspect.py
index dd89932..a801a29 100644
--- a/Lib/inspect.py
+++ b/Lib/inspect.py
@@ -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
diff --git a/Lib/test/inspect_fodder2.py b/Lib/test/inspect_fodder2.py
index 44c7572..f216c82 100644
--- a/Lib/test/inspect_fodder2.py
+++ b/Lib/test/inspect_fodder2.py
@@ -53,3 +53,14 @@ a = [None,
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,
+ ]
diff --git a/Lib/test/test_inspect.py b/Lib/test/test_inspect.py
index 9e60a9c..1fb48c5 100644
--- a/Lib/test/test_inspect.py
+++ b/Lib/test/test_inspect.py
@@ -229,6 +229,15 @@ class TestOneliners(GetSourceBase):
# as argument to another function.
self.assertSourceEqual(mod2.anonymous, 55, 55)
+class TestBuggyCases(GetSourceBase):
+ fodderFile = mod2
+
+ def test_with_comment(self):
+ self.assertSourceEqual(mod2.with_comment, 58, 59)
+
+ def test_multiline_sig(self):
+ self.assertSourceEqual(mod2.multiline_sig[0], 63, 64)
+
# Helper for testing classify_class_attrs.
def attrs_wo_objs(cls):
return [t[:3] for t in inspect.classify_class_attrs(cls)]
@@ -414,6 +423,7 @@ class TestClassesAndFunctions(unittest.TestCase):
def test_main():
run_unittest(TestDecorators, TestRetrievingSourceCode, TestOneliners,
+ TestBuggyCases,
TestInterpreterStack, TestClassesAndFunctions, TestPredicates)
if __name__ == "__main__":