Skip to content

Commit b7a4830

Browse files
committed
Fix linking to classes (in class tree, and add links on unbound methods).
1 parent 6dcfa38 commit b7a4830

File tree

1 file changed

+23
-24
lines changed

1 file changed

+23
-24
lines changed

Lib/pydoc.py

Lines changed: 23 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -342,12 +342,13 @@ def namelink(self, name, *dicts):
342342
return '<a href="%s">%s</a>' % (dict[name], name)
343343
return name
344344

345-
def classlink(self, object, modname, *dicts):
345+
def classlink(self, object, modname):
346346
"""Make a link for a class."""
347347
name = classname(object, modname)
348-
for dict in dicts:
349-
if dict.has_key(object):
350-
return '<a href="%s">%s</a>' % (dict[object], name)
348+
if sys.modules.has_key(object.__module__) and \
349+
getattr(sys.modules[object.__module__], object.__name__) is object:
350+
return '<a href="%s.html#%s">%s</a>' % (
351+
object.__module__, object.__name__, name)
351352
return name
352353

353354
def modulelink(self, object):
@@ -405,23 +406,23 @@ def markup(self, text, escape=None, funcs={}, classes={}, methods={}):
405406

406407
# ---------------------------------------------- type-specific routines
407408

408-
def formattree(self, tree, modname, classes={}, parent=None):
409+
def formattree(self, tree, modname, parent=None):
409410
"""Produce HTML for a class tree as given by inspect.getclasstree()."""
410411
result = ''
411412
for entry in tree:
412413
if type(entry) is type(()):
413414
c, bases = entry
414415
result = result + '<dt><font face="helvetica, arial"><small>'
415-
result = result + self.classlink(c, modname, classes)
416+
result = result + self.classlink(c, modname)
416417
if bases and bases != (parent,):
417418
parents = []
418419
for base in bases:
419-
parents.append(self.classlink(base, modname, classes))
420+
parents.append(self.classlink(base, modname))
420421
result = result + '(' + join(parents, ', ') + ')'
421422
result = result + '\n</small></font></dt>'
422423
elif type(entry) is type([]):
423424
result = result + '<dd>\n%s</dd>\n' % self.formattree(
424-
entry, modname, classes, c)
425+
entry, modname, c)
425426
return '<dl>\n%s</dl>\n' % result
426427

427428
def docmodule(self, object, name=None, mod=None):
@@ -505,8 +506,8 @@ def docmodule(self, object, name=None, mod=None):
505506

506507
if classes:
507508
classlist = map(lambda (key, value): value, classes)
508-
contents = [self.formattree(
509-
inspect.getclasstree(classlist, 1), name, cdict)]
509+
contents = [
510+
self.formattree(inspect.getclasstree(classlist, 1), name)]
510511
for key, value in classes:
511512
contents.append(self.document(value, key, name, fdict, cdict))
512513
result = result + self.bigsection(
@@ -558,8 +559,7 @@ def docclass(self, object, name=None, mod=None, funcs={}, classes={}):
558559
if bases:
559560
parents = []
560561
for base in bases:
561-
parents.append(
562-
self.classlink(base, object.__module__, classes))
562+
parents.append(self.classlink(base, object.__module__))
563563
title = title + '(%s)' % join(parents, ', ')
564564
doc = self.markup(
565565
getdoc(object), self.preformat, funcs, classes, mdict)
@@ -583,16 +583,14 @@ def docroutine(self, object, name=None, mod=None,
583583
imclass = object.im_class
584584
if cl:
585585
if imclass is not cl:
586-
url = '%s.html#%s-%s' % (
587-
imclass.__module__, imclass.__name__, name)
588-
note = ' from <a href="%s">%s</a>' % (
589-
url, classname(imclass, mod))
586+
note = ' from ' + self.classlink(imclass, mod)
590587
skipdocs = 1
591588
else:
592-
inst = object.im_self
593-
note = (inst and
594-
' method of %s instance' % classname(inst.__class__, mod) or
595-
' unbound %s method' % classname(imclass, mod))
589+
if object.im_self:
590+
note = ' method of %s instance' % self.classlink(
591+
object.im_self.__class__, mod)
592+
else:
593+
note = ' unbound %s method' % self.classlink(imclass,mod)
596594
object = object.im_func
597595

598596
if name == realname:
@@ -848,10 +846,11 @@ def docroutine(self, object, name=None, mod=None, cl=None):
848846
note = ' from ' + classname(imclass, mod)
849847
skipdocs = 1
850848
else:
851-
inst = object.im_self
852-
note = (inst and
853-
' method of %s instance' % classname(inst.__class__, mod) or
854-
' unbound %s method' % classname(imclass, mod))
849+
if object.im_self:
850+
note = ' method of %s instance' % classname(
851+
object.im_self.__class__, mod)
852+
else:
853+
note = ' unbound %s method' % classname(imclass,mod)
855854
object = object.im_func
856855

857856
if name == realname:

0 commit comments

Comments
 (0)