+ Text-mode (but not yet GUI mode) pydoc now produces useful stuff for
properties: the docstring (if any) is displayed, and the getter, setter and deleter (if any) functions are named. All that is shown indented after the property name. + Text-mode pydoc class display now draws a horizontal line between class attribute groups (similar to GUI mode -- while visually more intrusive in text mode, it's still an improvement).
This commit is contained in:
parent
66c1a525e0
commit
f4aad8eb28
44
Lib/pydoc.py
44
Lib/pydoc.py
|
@ -991,29 +991,55 @@ class TextDoc(Doc):
|
||||||
contents = doc and [doc + '\n'] or []
|
contents = doc and [doc + '\n'] or []
|
||||||
push = contents.append
|
push = contents.append
|
||||||
|
|
||||||
|
# Cute little class to pump out a horizontal rule between sections.
|
||||||
|
class HorizontalRule:
|
||||||
|
def __init__(self):
|
||||||
|
self.needone = 0
|
||||||
|
def maybe(self):
|
||||||
|
if self.needone:
|
||||||
|
push('-' * 70)
|
||||||
|
self.needone = 1
|
||||||
|
hr = HorizontalRule()
|
||||||
|
|
||||||
def spill(msg, attrs, predicate):
|
def spill(msg, attrs, predicate):
|
||||||
ok, attrs = _split_list(attrs, predicate)
|
ok, attrs = _split_list(attrs, predicate)
|
||||||
if ok:
|
if ok:
|
||||||
|
hr.maybe()
|
||||||
push(msg)
|
push(msg)
|
||||||
for name, kind, homecls, value in ok:
|
for name, kind, homecls, value in ok:
|
||||||
push(self.document(getattr(object, name),
|
push(self.document(getattr(object, name),
|
||||||
name, mod, object))
|
name, mod, object))
|
||||||
return attrs
|
return attrs
|
||||||
|
|
||||||
# pydoc can't make any reasonable sense of properties on its own,
|
|
||||||
# and it doesn't appear that the getter, setter and del'er methods
|
|
||||||
# are discoverable. For now, just pump out their names.
|
|
||||||
def spillproperties(msg, attrs, predicate):
|
def spillproperties(msg, attrs, predicate):
|
||||||
ok, attrs = _split_list(attrs, predicate)
|
ok, attrs = _split_list(attrs, predicate)
|
||||||
if ok:
|
if ok:
|
||||||
|
hr.maybe()
|
||||||
push(msg)
|
push(msg)
|
||||||
for name, kind, homecls, value in ok:
|
for name, kind, homecls, value in ok:
|
||||||
push(name + '\n')
|
push(name)
|
||||||
|
need_blank_after_doc = 0
|
||||||
|
doc = getdoc(value) or ''
|
||||||
|
if doc:
|
||||||
|
push(self.indent(doc))
|
||||||
|
need_blank_after_doc = 1
|
||||||
|
for attr, tag in [("fset", " setter"),
|
||||||
|
("fget", " getter"),
|
||||||
|
("fdel", " deleter")]:
|
||||||
|
func = getattr(value, attr)
|
||||||
|
if func is not None:
|
||||||
|
if need_blank_after_doc:
|
||||||
|
push('')
|
||||||
|
need_blank_after_doc = 0
|
||||||
|
base = self.docother(func, name + tag, mod, 70)
|
||||||
|
push(self.indent(base))
|
||||||
|
push('')
|
||||||
return attrs
|
return attrs
|
||||||
|
|
||||||
def spilldata(msg, attrs, predicate):
|
def spilldata(msg, attrs, predicate):
|
||||||
ok, attrs = _split_list(attrs, predicate)
|
ok, attrs = _split_list(attrs, predicate)
|
||||||
if ok:
|
if ok:
|
||||||
|
hr.maybe()
|
||||||
push(msg)
|
push(msg)
|
||||||
for name, kind, homecls, value in ok:
|
for name, kind, homecls, value in ok:
|
||||||
doc = getattr(value, "__doc__", None)
|
doc = getattr(value, "__doc__", None)
|
||||||
|
@ -1040,15 +1066,15 @@ class TextDoc(Doc):
|
||||||
attrs.sort(lambda t1, t2: cmp(t1[0], t2[0]))
|
attrs.sort(lambda t1, t2: cmp(t1[0], t2[0]))
|
||||||
|
|
||||||
# Pump out the attrs, segregated by kind.
|
# Pump out the attrs, segregated by kind.
|
||||||
attrs = spill("* Methods %s:\n" % tag, attrs,
|
attrs = spill("Methods %s:\n" % tag, attrs,
|
||||||
lambda t: t[1] == 'method')
|
lambda t: t[1] == 'method')
|
||||||
attrs = spill("* Class methods %s:\n" % tag, attrs,
|
attrs = spill("Class methods %s:\n" % tag, attrs,
|
||||||
lambda t: t[1] == 'class method')
|
lambda t: t[1] == 'class method')
|
||||||
attrs = spill("* Static methods %s:\n" % tag, attrs,
|
attrs = spill("Static methods %s:\n" % tag, attrs,
|
||||||
lambda t: t[1] == 'static method')
|
lambda t: t[1] == 'static method')
|
||||||
attrs = spillproperties("* Properties %s:\n" % tag, attrs,
|
attrs = spillproperties("Properties %s:\n" % tag, attrs,
|
||||||
lambda t: t[1] == 'property')
|
lambda t: t[1] == 'property')
|
||||||
attrs = spilldata("* Data %s:\n" % tag, attrs,
|
attrs = spilldata("Data %s:\n" % tag, attrs,
|
||||||
lambda t: t[1] == 'data')
|
lambda t: t[1] == 'data')
|
||||||
assert attrs == []
|
assert attrs == []
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue