]> sjero.net Git - wget/commitdiff
Check for undocumented options in --help, too.
authorMicah Cowan <micah@cowan.name>
Fri, 10 Jul 2009 08:29:22 +0000 (01:29 -0700)
committerMicah Cowan <micah@cowan.name>
Fri, 10 Jul 2009 08:29:22 +0000 (01:29 -0700)
ChangeLog
util/paramcheck.pl

index 302539a78ee1ece708702dedeedce9726b9a6950..6229253572c461e60f62c689edd5e648fa2bfc93 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2009-07-10  Micah Cowan  <micah@cowan.name>
+
+       * util/paramcheck.pl (find_documentation): Added.
+       (emit_undocumented_opts): Check for documentation in both TexInfo
+       and --help string.
+
 2009-07-05  Micah Cowan  <micah@cowan.name>
 
        * po/Rules-quot: Added targets to build en@{quot,boldquot}.po
index bc6b8cfdfb8efcda88404f60020ab587638c449a..16ff7917e17db12381e0703601bc5f104d5eacb1 100755 (executable)
@@ -23,23 +23,28 @@ use constant false => 0;
 use FindBin qw($Bin);
 use File::Spec ();
 
+my $main_c_file = File::Spec->catfile($Bin, File::Spec->updir, 'src', 'main.c');
+my $init_c_file = File::Spec->catfile($Bin, File::Spec->updir, 'src', 'init.c');
+my $tex_file = File::Spec->catfile($Bin, File::Spec->updir, 'doc', 'wget.texi');
+my $main_content = read_file($main_c_file);
+my $init_content = read_file($init_c_file);
+my $tex_content = read_file($tex_file);
+
 my @args = ([
-    File::Spec->catfile($Bin, File::Spec->updir, 'src', 'main.c'),
+    $main_content,
     qr/static \s+? struct \s+? cmdline_option \s+? option_data\[\] \s+? = \s+? \{ (.*?) \}\;/sx,
     [ qw(long_name short_name type data argtype) ],
 ], [
-    File::Spec->catfile($Bin, File::Spec->updir, 'src', 'init.c'),
+    $init_content,
     qr/commands\[\] \s+? = \s+? \{ (.*?) \}\;/sx,
     [ qw(name place action) ],
 ]);
-my $tex_file = File::Spec->catfile($Bin, File::Spec->updir, 'doc', 'wget.texi');
 
 {
     my @data;
 
     foreach my $arg (@args) {
-        my ($file, $regex, $names) = @$arg;
-        my $source = read_file($file);
+        my ($source, $regex, $names) = @$arg;
         my @chunks = extract_chunks($source, $regex);
         push @data, extract_entries(\@chunks, $names);
     }
@@ -122,11 +127,9 @@ sub output_results
     emit_deprecated_cmds($cmds);
     print "\n";
 
-    my $tex = read_file($tex_file);
-
-    emit_undocumented_opts($tex, $opts);
+    emit_undocumented_opts($tex_content, $main_content, $opts);
     print "\n";
-    emit_undocumented_cmds($tex, $opts, $cmds, \%index);
+    emit_undocumented_cmds($tex_content, $opts, $cmds, \%index);
     print "\n";
 }
 
@@ -239,34 +242,53 @@ Deprecated commands
 EOT
 }
 
+sub find_documentation
+{
+    my ($push, $opt) = (shift, shift);
+    my $info = [];
+
+    my $opt_name = $opt->{'long_name'};
+    for my $doc (@_) {
+        next if $opt->{'deprecated'};
+        if ($doc->{$opt_name}
+            || ($opt_name !~ /^no/ && $doc->{"no-$opt_name"})) {
+            push @$info, 1;
+        } else {
+            push @$info, 0;
+        }
+    }
+    push @$push, [$opt_name, @$info] if grep {$_ eq 0} @$info;
+}
+
 sub emit_undocumented_opts
 {
-    my ($tex, $opts) = @_;
+    my ($tex, $main, $opts) = @_;
 
-    my %items;
+    my (%tex_items, %main_items);
     while ($tex =~ /^\@item\w*? \s+? --([\w\-]+)/gmx) {
-        my $opt = $1;
-        $items{$opt} = true;
+        $tex_items{$1} = true;
+    }
+    ($main) = $main =~ /(\nprint_help.*\n}\n)/s;
+    while ($main =~ /--([-a-z0-9]+)/g) {
+        $main_items{$1} = true;
     }
     my @options;
     foreach my $opt (@$opts) {
-        my $opt_name = $opt->{long_name};
-        if (not $items{$opt_name}
-          || ($opt_name !~ /^no/
-            ? $items{"no-$opt_name"}
-            : false)
-          || $opt->{deprecated})
-        {
-            push @options, $opt_name;
-        }
+        find_documentation (\@options, $opt, \%tex_items, \%main_items);
     }
 
     local $" = "\n";
     print <<EOT;
-Undocumented options
-====================
-@options
+Undocumented options          Not In:
+====================          ==================
 EOT
+    for my $opt (@options) {
+        printf("%-29s ", $opt->[0]);
+        print 'texinfo ' unless $opt->[1];
+        print 'nor ' unless $opt->[1] or $opt->[2];
+        print '--help ' unless $opt->[2];
+        print "\n";
+    }
 }
 
 sub emit_undocumented_cmds