[Epydoc-commits] SF.net SVN: epydoc: [1649] trunk/epydoc/src/epydoc
Brought to you by:
edloper
|
From: <ed...@us...> - 2007-09-25 23:33:02
|
Revision: 1649
http://epydoc.svn.sourceforge.net/epydoc/?rev=1649&view=rev
Author: edloper
Date: 2007-09-25 16:32:59 -0700 (Tue, 25 Sep 2007)
Log Message:
-----------
- Added warnings for unused identifiers in @group and @sort fields.
This helps catch typos, eg: "@group foo: tree_wlaker"
Modified Paths:
--------------
trunk/epydoc/src/epydoc/apidoc.py
trunk/epydoc/src/epydoc/docbuilder.py
Modified: trunk/epydoc/src/epydoc/apidoc.py
===================================================================
--- trunk/epydoc/src/epydoc/apidoc.py 2007-09-25 22:08:01 UTC (rev 1648)
+++ trunk/epydoc/src/epydoc/apidoc.py 2007-09-25 23:32:59 UTC (rev 1649)
@@ -994,17 +994,22 @@
# Add any variables that are listed in sort_spec
if self.sort_spec is not UNKNOWN:
+ unused_idents = set(self.sort_spec)
for ident in self.sort_spec:
if ident in unsorted:
- self.sorted_variables.append(unsorted[ident])
- del unsorted[ident]
+ self.sorted_variables.append(unsorted.pop(ident))
+ unused_idents.discard(ident)
elif '*' in ident:
regexp = re.compile('^%s$' % ident.replace('*', '(.*)'))
# sort within matching group?
for name, var_doc in unsorted.items():
if regexp.match(name):
- self.sorted_variables.append(var_doc)
- unsorted.remove(var_doc)
+ self.sorted_variables.append(unsorted.pop(name))
+ unused_idents.discard(ident)
+ for ident in unused_idents:
+ log.warning("@sort: %s.%s not found" %
+ (self.canonical_name, ident))
+
# Add any remaining variables in alphabetical order.
var_docs = unsorted.items()
@@ -1022,6 +1027,7 @@
assert len(self.sorted_variables) == len(self.variables)
elts = [(v.name, v) for v in self.sorted_variables]
+ self._unused_groups = dict([(n,set(i)) for (n,i) in self.group_specs])
self.variable_groups = self._init_grouping(elts)
def group_names(self):
@@ -1057,27 +1063,37 @@
return {'': [elt[1] for elt in elts]}
ungrouped = set([elt_doc for (elt_name, elt_doc) in elts])
+
+ ungrouped = dict(elts)
groups = {}
- for (group_name, elt_names) in self.group_specs:
- group_re = re.compile('|'.join([n.replace('*','.*')+'$'
- for n in elt_names]))
- group = groups.get(group_name, [])
- for elt_name, elt_doc in list(elts):
- if group_re.match(elt_name):
- group.append(elt_doc)
- if elt_doc in ungrouped:
- ungrouped.remove(elt_doc)
- else:
- # [xx] might just be listed in the same group twice!
- log.warning("%s.%s is in multiple groups" %
- (self.canonical_name, elt_name))
- groups[group_name] = group
+ for elt_name, elt_doc in elts:
+ for (group_name, idents) in self.group_specs:
+ group = groups.setdefault(group_name, [])
+ unused_groups = self._unused_groups[group_name]
+ for ident in idents:
+ if re.match('^%s$' % ident.replace('*', '(.*)'), elt_name):
+ unused_groups.discard(ident)
+ if elt_name in ungrouped:
+ group.append(ungrouped.pop(elt_name))
+ else:
+ log.warning("%s.%s in multiple groups" %
+ (self.canonical_name, elt_name))
# Convert ungrouped from an unordered set to an ordered list.
groups[''] = [elt_doc for (elt_name, elt_doc) in elts
- if elt_doc in ungrouped]
+ if elt_name in ungrouped]
return groups
+ def report_unused_groups(self):
+ """
+ Issue a warning for any @group items that were not used by
+ L{_init_grouping()}.
+ """
+ for (group, unused_idents) in self._unused_groups.items():
+ for ident in unused_idents:
+ log.warning("@group %s: %s.%s not found" %
+ (group, self.canonical_name, ident))
+
class ModuleDoc(NamespaceDoc):
"""
API documentation information about a single module.
Modified: trunk/epydoc/src/epydoc/docbuilder.py
===================================================================
--- trunk/epydoc/src/epydoc/docbuilder.py 2007-09-25 22:08:01 UTC (rev 1648)
+++ trunk/epydoc/src/epydoc/docbuilder.py 2007-09-25 23:32:59 UTC (rev 1649)
@@ -291,6 +291,7 @@
val_doc.init_variable_groups()
if isinstance(val_doc, ModuleDoc):
val_doc.init_submodule_groups()
+ val_doc.report_unused_groups()
log.end_progress()
return docindex
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|