lbajardsilogic@0: #!/usr/bin/perl -w lbajardsilogic@0: require 5; lbajardsilogic@0: use strict; lbajardsilogic@0: lbajardsilogic@0: # Command line should contain a list of files to look in. lbajardsilogic@0: # lbajardsilogic@0: # A likely invocation would be lbajardsilogic@0: # find . \( -name \*.h -o -name \*.cpp \) -print | xargs perl ./find-todo.pl lbajardsilogic@0: # lbajardsilogic@0: # Unusual or binary files will be ignored. lbajardsilogic@0: lbajardsilogic@0: my $todo_count = 0; lbajardsilogic@0: my $file_count = 0; lbajardsilogic@0: my $unfinished_count = 0; lbajardsilogic@0: lbajardsilogic@0: sub print_file_maybe lbajardsilogic@0: { lbajardsilogic@0: my ($pf, $file) = @_; lbajardsilogic@0: if (! $$pf) { lbajardsilogic@0: print "\n$file:\n"; lbajardsilogic@0: $$pf = 1; lbajardsilogic@0: $file_count++; lbajardsilogic@0: } lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: foreach (@ARGV) { lbajardsilogic@0: lbajardsilogic@0: my $file = $_; lbajardsilogic@0: next if ($file =~ /~$/); lbajardsilogic@0: open FILE, $file or next; lbajardsilogic@0: my $in_todo = 0; lbajardsilogic@0: my $printed_file = 0; lbajardsilogic@0: my $line = 0; lbajardsilogic@0: lbajardsilogic@0: while () { lbajardsilogic@0: lbajardsilogic@0: $line++; lbajardsilogic@0: last if (m.^[\200-\377].); # probably a binary file lbajardsilogic@0: lbajardsilogic@0: if ($in_todo) { lbajardsilogic@0: lbajardsilogic@0: if (m, /[/\*](!!!)?\s* (.*) $ ,x) { lbajardsilogic@0: print " $2\n"; lbajardsilogic@0: } else { lbajardsilogic@0: $in_todo = 0; lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: } else { lbajardsilogic@0: lbajardsilogic@0: if (m, /[/\*] !!!\s* (.*) $ ,x) { lbajardsilogic@0: print_file_maybe(\$printed_file, $file); lbajardsilogic@0: print sprintf("%8d", $line), ": $1\n"; lbajardsilogic@0: $in_todo = 1; lbajardsilogic@0: $todo_count++; lbajardsilogic@0: lbajardsilogic@0: } elsif (m, /[/\*] \Q...\E \s* (.*) $ ,x) { lbajardsilogic@0: print_file_maybe(\$printed_file, $file); lbajardsilogic@0: print sprintf("%8d", $line), ": [U] $1\n"; lbajardsilogic@0: $unfinished_count++; lbajardsilogic@0: } lbajardsilogic@0: } lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: close FILE; lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: print "\nTotal: $todo_count problem items, $unfinished_count unfinished " . lbajardsilogic@0: "markers in $file_count files\n\n"; lbajardsilogic@0: