# Find the line number for functions & methods.
if inspect.ismethod(obj): obj = obj.__func__
+ if isinstance(obj, property):
+ obj = obj.fget
if inspect.isfunction(obj) and getattr(obj, '__doc__', None):
# We don't use `docstring` var here, because `obj` can be changed.
obj = obj.__code__
'method_with_doctest'
"""
+ @classmethod
+ def classmethod_with_doctest(cls):
+ """
+ This has a doctest!
+ >>> MethodWrapper.classmethod_with_doctest.__name__
+ 'classmethod_with_doctest'
+ """
+
+ @property
+ def property_with_doctest(self):
+ """
+ This has a doctest!
+ >>> MethodWrapper.property_with_doctest.__name__
+ 'property_with_doctest'
+ """
+
# https://github.com/python/cpython/issues/99433
str_wrapper = object().__str__
30 test.doctest_lineno.ClassWithDoctest
None test.doctest_lineno.ClassWithoutDocstring
None test.doctest_lineno.MethodWrapper
+ 53 test.doctest_lineno.MethodWrapper.classmethod_with_doctest
39 test.doctest_lineno.MethodWrapper.method_with_docstring
45 test.doctest_lineno.MethodWrapper.method_with_doctest
None test.doctest_lineno.MethodWrapper.method_without_docstring
+ 61 test.doctest_lineno.MethodWrapper.property_with_doctest
4 test.doctest_lineno.func_with_docstring
12 test.doctest_lineno.func_with_doctest
None test.doctest_lineno.func_without_docstring
--- /dev/null
+Detect line numbers of properties in doctests.