|
@@ -47,6 +47,8 @@ my $ignore_perl_version = 0;
|
|
|
my $minimum_perl_version = 5.10.0;
|
|
|
my $min_conf_desc_length = 4;
|
|
|
my $spelling_file = "$D/spelling.txt";
|
|
|
+my $codespell = 0;
|
|
|
+my $codespellfile = "/usr/local/share/codespell/dictionary.txt";
|
|
|
|
|
|
sub help {
|
|
|
my ($exitcode) = @_;
|
|
@@ -88,6 +90,9 @@ Options:
|
|
|
file. It's your fault if there's no backup or git
|
|
|
--ignore-perl-version override checking of perl version. expect
|
|
|
runtime errors.
|
|
|
+ --codespell Use the codespell dictionary for spelling/typos
|
|
|
+ (default:/usr/local/share/codespell/dictionary.txt)
|
|
|
+ --codespellfile Use this codespell dictionary
|
|
|
-h, --help, --version display this help and exit
|
|
|
|
|
|
When FILE is - read standard input.
|
|
@@ -146,6 +151,8 @@ GetOptions(
|
|
|
'ignore-perl-version!' => \$ignore_perl_version,
|
|
|
'debug=s' => \%debug,
|
|
|
'test-only=s' => \$tst_only,
|
|
|
+ 'codespell!' => \$codespell,
|
|
|
+ 'codespellfile=s' => \$codespellfile,
|
|
|
'h|help' => \$help,
|
|
|
'version' => \$help
|
|
|
) or help(1);
|
|
@@ -449,7 +456,6 @@ my $misspellings;
|
|
|
my %spelling_fix;
|
|
|
|
|
|
if (open(my $spelling, '<', $spelling_file)) {
|
|
|
- my @spelling_list;
|
|
|
while (<$spelling>) {
|
|
|
my $line = $_;
|
|
|
|
|
@@ -461,15 +467,39 @@ if (open(my $spelling, '<', $spelling_file)) {
|
|
|
|
|
|
my ($suspect, $fix) = split(/\|\|/, $line);
|
|
|
|
|
|
- push(@spelling_list, $suspect);
|
|
|
$spelling_fix{$suspect} = $fix;
|
|
|
}
|
|
|
close($spelling);
|
|
|
- $misspellings = join("|", @spelling_list);
|
|
|
} else {
|
|
|
warn "No typos will be found - file '$spelling_file': $!\n";
|
|
|
}
|
|
|
|
|
|
+if ($codespell) {
|
|
|
+ if (open(my $spelling, '<', $codespellfile)) {
|
|
|
+ while (<$spelling>) {
|
|
|
+ my $line = $_;
|
|
|
+
|
|
|
+ $line =~ s/\s*\n?$//g;
|
|
|
+ $line =~ s/^\s*//g;
|
|
|
+
|
|
|
+ next if ($line =~ m/^\s*#/);
|
|
|
+ next if ($line =~ m/^\s*$/);
|
|
|
+ next if ($line =~ m/, disabled/i);
|
|
|
+
|
|
|
+ $line =~ s/,.*$//;
|
|
|
+
|
|
|
+ my ($suspect, $fix) = split(/->/, $line);
|
|
|
+
|
|
|
+ $spelling_fix{$suspect} = $fix;
|
|
|
+ }
|
|
|
+ close($spelling);
|
|
|
+ } else {
|
|
|
+ warn "No codespell typos will be found - file '$codespellfile': $!\n";
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+$misspellings = join("|", sort keys %spelling_fix) if keys %spelling_fix;
|
|
|
+
|
|
|
sub build_types {
|
|
|
my $mods = "(?x: \n" . join("|\n ", @modifierList) . "\n)";
|
|
|
my $all = "(?x: \n" . join("|\n ", @typeList) . "\n)";
|
|
@@ -2305,7 +2335,7 @@ sub process {
|
|
|
# Check for various typo / spelling mistakes
|
|
|
if (defined($misspellings) &&
|
|
|
($in_commit_log || $line =~ /^(?:\+|Subject:)/i)) {
|
|
|
- while ($rawline =~ /(?:^|[^a-z@])($misspellings)(?:$|[^a-z@])/gi) {
|
|
|
+ while ($rawline =~ /(?:^|[^a-z@])($misspellings)(?:\b|$|[^a-z@])/gi) {
|
|
|
my $typo = $1;
|
|
|
my $typo_fix = $spelling_fix{lc($typo)};
|
|
|
$typo_fix = ucfirst($typo_fix) if ($typo =~ /^[A-Z]/);
|