78 lines
2 KiB
Text
78 lines
2 KiB
Text
|
#!/usr/bin/perl -w
|
||
|
use strict;
|
||
|
use File::Find ();
|
||
|
|
||
|
# -----------------------------------------------------------------------------
|
||
|
#
|
||
|
# Script
|
||
|
# find-tinyDescription
|
||
|
#
|
||
|
# Description
|
||
|
# Search for *.[H] files with 'Class' starting in the first column
|
||
|
# and a missing Description, or a tiny Description.
|
||
|
# A tiny Description is less than XX letters and does not resemble
|
||
|
# the class name. We'll look for descriptions matching the class name
|
||
|
# in a later pass.
|
||
|
#
|
||
|
# - print filename '#' and the description
|
||
|
#
|
||
|
# -----------------------------------------------------------------------------
|
||
|
|
||
|
my $minLength = 16;
|
||
|
my $re_filespec = qr{^.+\.[H]$};
|
||
|
|
||
|
# for the convenience of &wanted calls, including -eval statements:
|
||
|
## use vars qw( *name *dir *prune );
|
||
|
## *name = *File::Find::name;
|
||
|
## *dir = *File::Find::dir;
|
||
|
## *prune = *File::Find::prune;
|
||
|
|
||
|
sub wanted {
|
||
|
unless ( lstat($_) and -f _ and -r _ and not -l _ and /$re_filespec/ ) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
my ( $currentClass, $description );
|
||
|
|
||
|
local @ARGV = $_;
|
||
|
while (<>) {
|
||
|
my $name;
|
||
|
|
||
|
## examine the class name
|
||
|
if (/^Class\s*$/) {
|
||
|
$_ = <>;
|
||
|
($currentClass) = split;
|
||
|
}
|
||
|
if (/^Description\s*$/) {
|
||
|
$_ = <>;
|
||
|
( $description = $_ ) =~ s{^\s+|\s+$}{}g;
|
||
|
|
||
|
# remove trailing punctuation as being noise
|
||
|
$description =~ s{\s*[.,:]+$}{};
|
||
|
last;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$description ||= '';
|
||
|
|
||
|
## we have 'Class' tag
|
||
|
if ( defined $currentClass ) {
|
||
|
# description doesnt looks like a class name
|
||
|
if (
|
||
|
$description !~ m{^\w+(::\w+)+$}
|
||
|
and
|
||
|
(length $description < $minLength or $description =~ m{^\S+$})
|
||
|
) {
|
||
|
print "$File::Find::name # $description\n";
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
## Traverse desired filesystems
|
||
|
for my $dir (@ARGV) {
|
||
|
no warnings 'File::Find';
|
||
|
warn "(**) checking '$dir' ...\n";
|
||
|
File::Find::find( { wanted => \&wanted }, $dir );
|
||
|
}
|
||
|
|