#!/usr/bin/perl
# Finds missing usage documentation in an entire object tree.
# Note that a few objects (thingsets) use fields for items in them, and do
# not need documentation for those fields.
use Mooix::Thing;
my @todo=Mooix::Thing->get(shift) || die "usage: missingdocs objectdir [skip ..]\n";
my %seen;
my @skip = map { Mooix::Thing->get($_) } @ARGV;
while (@todo) {
	my $o=pop @todo;
	next if $seen{$o->index};
	$seen{$o->index}=1;
	my $skip=0;
	foreach my $s (@skip) {
		if ($o != $_ && $o->isa($s)) {
			$skip=1;
			last;
		}
	}
	opendir(D, $o->id) || die "open $o: $!";
	while (my $field = readdir(D)) {
		next if $field eq '..' || $field eq '.';
		if (-d $o->fieldfile($field)) {
			push @todo, $o->$field;
		}
		
		# Doesn't work, since I leave empy fields unset.
		#if ($field =~ /(.*)\.inf$/) {
		#	my $base=$1;
		#	if (! $o->fieldfile($base)) {
		#		print "extraneous $o $field\n";
		#	}
		#}
		
		# Things that need no documentation.
		next if $skip ||
		        $field =~ /\.(inf|cmd|msg|hlp)$/ ||
		        $field =~ /_verb$/ ||
		        $field =~ /^\./;
	
		my $inf=$field.".inf";
		if (! length $o->fieldfile($inf)) {
			print "missing $o $field\n";
		}
	}
}
