Skip to content

Commit aef4228

Browse files
committed
Return decorators too for bpo-15856
1 parent d7ae710 commit aef4228

File tree

3 files changed

+11
-4
lines changed

3 files changed

+11
-4
lines changed

Lib/inspect.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -821,8 +821,14 @@ def visit_ClassDef(self, node):
821821
nonlocal line_number
822822
stack.append(node.name)
823823
if qualname == '.'.join(stack):
824+
# Return the decorator for the class if present
825+
if node.decorator_list:
826+
line_number = node.decorator_list[0].lineno
827+
else:
828+
line_number = node.lineno
829+
824830
# decrement by one since lines starts with indexing by zero
825-
line_number = node.lineno - 1
831+
line_number -= 1
826832
raise StopIteration(line_number)
827833
self.generic_visit(node)
828834
stack.pop()

Lib/test/test_inspect.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -724,8 +724,8 @@ def test_nested_class_definition(self):
724724
self.assertSourceEqual(mod2.cls183.cls185, 185, 188)
725725

726726
def test_class_decorator(self):
727-
self.assertSourceEqual(mod2.cls196, 196, 201)
728-
self.assertSourceEqual(mod2.cls196.cls200, 200, 201)
727+
self.assertSourceEqual(mod2.cls196, 194, 201)
728+
self.assertSourceEqual(mod2.cls196.cls200, 198, 201)
729729

730730
def test_class_inside_conditional(self):
731731
self.assertSourceEqual(mod2.cls238, 238, 240)
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
:meth:`inspect.getsource` now returns correct source code for inner class
2-
with same name as module level class. Patch by Karthikeyan Singaravelan.
2+
with same name as module level class. Decorators are also returned as part
3+
of source of the class. Patch by Karthikeyan Singaravelan.

0 commit comments

Comments
 (0)