mirror of
https://github.com/python/cpython.git
synced 2025-11-25 04:34:37 +00:00
gh-113942: Show functions implemented as builtin methods (GH-115306)
Pydoc no longer skips global functions implemented as builtin methods, such as MethodDescriptorType and WrapperDescriptorType.
This commit is contained in:
parent
68c79d21fa
commit
72cff8d8e5
4 changed files with 24 additions and 6 deletions
12
Lib/pydoc.py
12
Lib/pydoc.py
|
|
@ -855,9 +855,9 @@ class HTMLDoc(Doc):
|
|||
cdict[key] = cdict[base] = modname + '.html#' + key
|
||||
funcs, fdict = [], {}
|
||||
for key, value in inspect.getmembers(object, inspect.isroutine):
|
||||
# if __all__ exists, believe it. Otherwise use old heuristic.
|
||||
if (all is not None or
|
||||
inspect.isbuiltin(value) or inspect.getmodule(value) is object):
|
||||
# if __all__ exists, believe it. Otherwise use a heuristic.
|
||||
if (all is not None
|
||||
or (inspect.getmodule(value) or object) is object):
|
||||
if visiblename(key, all, object):
|
||||
funcs.append((key, value))
|
||||
fdict[key] = '#-' + key
|
||||
|
|
@ -1299,9 +1299,9 @@ location listed above.
|
|||
classes.append((key, value))
|
||||
funcs = []
|
||||
for key, value in inspect.getmembers(object, inspect.isroutine):
|
||||
# if __all__ exists, believe it. Otherwise use old heuristic.
|
||||
if (all is not None or
|
||||
inspect.isbuiltin(value) or inspect.getmodule(value) is object):
|
||||
# if __all__ exists, believe it. Otherwise use a heuristic.
|
||||
if (all is not None
|
||||
or (inspect.getmodule(value) or object) is object):
|
||||
if visiblename(key, all, object):
|
||||
funcs.append((key, value))
|
||||
data = []
|
||||
|
|
|
|||
|
|
@ -81,6 +81,8 @@ class B(A):
|
|||
A_method_ref = A().A_method
|
||||
A_method_alias = A.A_method
|
||||
B_method_alias = B_method
|
||||
count = list.count # same name
|
||||
list_count = list.count
|
||||
__repr__ = object.__repr__ # same name
|
||||
object_repr = object.__repr__
|
||||
get = {}.get # same name
|
||||
|
|
@ -180,5 +182,7 @@ B_method = B.B_method # same name
|
|||
B_method2 = B.B_method
|
||||
count = list.count # same name
|
||||
list_count = list.count
|
||||
__repr__ = object.__repr__ # same name
|
||||
object_repr = object.__repr__
|
||||
get = {}.get # same name
|
||||
dict_get = {}.get
|
||||
|
|
|
|||
|
|
@ -1686,6 +1686,8 @@ class PydocFodderTest(unittest.TestCase):
|
|||
self.assertIn(' | global_func(x, y) from test.test_pydoc.pydocfodder', lines)
|
||||
self.assertIn(' | global_func_alias = global_func(x, y)', lines)
|
||||
self.assertIn(' | global_func2_alias = global_func2(x, y) from test.test_pydoc.pydocfodder', lines)
|
||||
self.assertIn(' | count(self, value, /) from builtins.list', lines)
|
||||
self.assertIn(' | list_count = count(self, value, /)', lines)
|
||||
self.assertIn(' | __repr__(self, /) from builtins.object', lines)
|
||||
self.assertIn(' | object_repr = __repr__(self, /)', lines)
|
||||
|
||||
|
|
@ -1714,6 +1716,8 @@ class PydocFodderTest(unittest.TestCase):
|
|||
self.assertIn('global_func(x, y) from test.test_pydoc.pydocfodder', lines)
|
||||
self.assertIn('global_func_alias = global_func(x, y)', lines)
|
||||
self.assertIn('global_func2_alias = global_func2(x, y) from test.test_pydoc.pydocfodder', lines)
|
||||
self.assertIn('count(self, value, /) from builtins.list', lines)
|
||||
self.assertIn('list_count = count(self, value, /)', lines)
|
||||
self.assertIn('__repr__(self, /) from builtins.object', lines)
|
||||
self.assertIn('object_repr = __repr__(self, /)', lines)
|
||||
|
||||
|
|
@ -1757,6 +1761,10 @@ class PydocFodderTest(unittest.TestCase):
|
|||
# unbound methods
|
||||
self.assertIn(' B_method(self)', lines)
|
||||
self.assertIn(' B_method2 = B_method(self)', lines)
|
||||
self.assertIn(' count(self, value, /) unbound builtins.list method', lines)
|
||||
self.assertIn(' list_count = count(self, value, /) unbound builtins.list method', lines)
|
||||
self.assertIn(' __repr__(self, /) unbound builtins.object method', lines)
|
||||
self.assertIn(' object_repr = __repr__(self, /) unbound builtins.object method', lines)
|
||||
|
||||
def test_html_doc_routines_in_module(self):
|
||||
doc = pydoc.HTMLDoc()
|
||||
|
|
@ -1782,6 +1790,10 @@ class PydocFodderTest(unittest.TestCase):
|
|||
# unbound methods
|
||||
self.assertIn(' B_method(self)', lines)
|
||||
self.assertIn(' B_method2 = B_method(self)', lines)
|
||||
self.assertIn(' count(self, value, /) unbound builtins.list method', lines)
|
||||
self.assertIn(' list_count = count(self, value, /) unbound builtins.list method', lines)
|
||||
self.assertIn(' __repr__(self, /) unbound builtins.object method', lines)
|
||||
self.assertIn(' object_repr = __repr__(self, /) unbound builtins.object method', lines)
|
||||
|
||||
|
||||
@unittest.skipIf(
|
||||
|
|
|
|||
|
|
@ -0,0 +1,2 @@
|
|||
:mod:`pydoc` no longer skips global functions implemented as builtin methods,
|
||||
such as :class:`~type.MethodDescriptorType` and :class:`~type.WrapperDescriptorType`.
|
||||
Loading…
Add table
Add a link
Reference in a new issue