mirror of
https://github.com/python/cpython.git
synced 2025-07-30 06:34:15 +00:00
Issue #11666: Teach pydoc to display full help for named tuples
This commit is contained in:
parent
f9e9a6f403
commit
9aa5a34b6b
3 changed files with 26 additions and 10 deletions
21
Lib/pydoc.py
21
Lib/pydoc.py
|
@ -156,7 +156,7 @@ def _split_list(s, predicate):
|
|||
no.append(x)
|
||||
return yes, no
|
||||
|
||||
def visiblename(name, all=None):
|
||||
def visiblename(name, all=None, obj=None):
|
||||
"""Decide whether to show documentation on a variable."""
|
||||
# Certain special names are redundant.
|
||||
_hidden_names = ('__builtins__', '__doc__', '__file__', '__path__',
|
||||
|
@ -164,6 +164,9 @@ def visiblename(name, all=None):
|
|||
if name in _hidden_names: return 0
|
||||
# Private names are hidden, but special names are displayed.
|
||||
if name.startswith('__') and name.endswith('__'): return 1
|
||||
# Namedtuples have public fields and methods with a single leading underscore
|
||||
if name.startswith('_') and hasattr(obj, '_fields'):
|
||||
return 1
|
||||
if all is not None:
|
||||
# only document that which the programmer exported in __all__
|
||||
return name in all
|
||||
|
@ -627,7 +630,7 @@ class HTMLDoc(Doc):
|
|||
# if __all__ exists, believe it. Otherwise use old heuristic.
|
||||
if (all is not None or
|
||||
(inspect.getmodule(value) or object) is object):
|
||||
if visiblename(key, all):
|
||||
if visiblename(key, all, object):
|
||||
classes.append((key, value))
|
||||
cdict[key] = cdict[value] = '#' + key
|
||||
for key, value in classes:
|
||||
|
@ -643,13 +646,13 @@ class HTMLDoc(Doc):
|
|||
# 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 visiblename(key, all):
|
||||
if visiblename(key, all, object):
|
||||
funcs.append((key, value))
|
||||
fdict[key] = '#-' + key
|
||||
if inspect.isfunction(value): fdict[value] = fdict[key]
|
||||
data = []
|
||||
for key, value in inspect.getmembers(object, isdata):
|
||||
if visiblename(key, all):
|
||||
if visiblename(key, all, object):
|
||||
data.append((key, value))
|
||||
|
||||
doc = self.markup(getdoc(object), self.preformat, fdict, cdict)
|
||||
|
@ -773,7 +776,7 @@ class HTMLDoc(Doc):
|
|||
push('\n')
|
||||
return attrs
|
||||
|
||||
attrs = filter(lambda data: visiblename(data[0]),
|
||||
attrs = filter(lambda data: visiblename(data[0], obj=object),
|
||||
classify_class_attrs(object))
|
||||
mdict = {}
|
||||
for key, kind, homecls, value in attrs:
|
||||
|
@ -1042,18 +1045,18 @@ class TextDoc(Doc):
|
|||
# if __all__ exists, believe it. Otherwise use old heuristic.
|
||||
if (all is not None
|
||||
or (inspect.getmodule(value) or object) is object):
|
||||
if visiblename(key, all):
|
||||
if visiblename(key, all, object):
|
||||
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 visiblename(key, all):
|
||||
if visiblename(key, all, object):
|
||||
funcs.append((key, value))
|
||||
data = []
|
||||
for key, value in inspect.getmembers(object, isdata):
|
||||
if visiblename(key, all):
|
||||
if visiblename(key, all, object):
|
||||
data.append((key, value))
|
||||
|
||||
modpkgs = []
|
||||
|
@ -1186,7 +1189,7 @@ class TextDoc(Doc):
|
|||
name, mod, maxlen=70, doc=doc) + '\n')
|
||||
return attrs
|
||||
|
||||
attrs = filter(lambda data: visiblename(data[0]),
|
||||
attrs = filter(lambda data: visiblename(data[0], obj=object),
|
||||
classify_class_attrs(object))
|
||||
while attrs:
|
||||
if mro:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue