The patch titled Subject: checkpatch: support deprecated terms checking has been removed from the -mm tree. Its filename was checkpatch-support-deprecated-terms-checking.patch This patch was dropped because it was withdrawn ------------------------------------------------------ From: SeongJae Park <sjpark@xxxxxxxxx> Subject: checkpatch: support deprecated terms checking Patch series "Recommend denylist/allowlist instead of blacklist/whitelist:, v4. This patchset 1) adds support of deprecated terms in the 'checkpatch.pl' and 2) set the 'blacklist' and 'whitelist' as deprecated with replacement suggestion of 'denylist' and 'allowlist', because the suggestions are incontrovertible, doesn't make people hurt, and more self-explanatory. This patch (of 2): Some terms could be deprecated for various reasons, but it is hard to update the entire old usages. That said, we could at least encourage new patches to use the suggested replacements. This commit adds check of deprecated terms in the 'checkpatch.pl' for that. The script will get deprecated terms and suggested replacements of those from 'scripts/deprecated_terms.txt' file and warn if the deprecated terms are used. The mechanism and the format of the file are almost the same as that of 'spelling.txt'. For the reason, this commit modularizes the read of the 'spelling.txt' and reuses. Link: http://lkml.kernel.org/r/20200611062550.20113-1-sjpark@xxxxxxxxxx Link: http://lkml.kernel.org/r/20200611062550.20113-2-sjpark@xxxxxxxxxx Signed-off-by: SeongJae Park <sjpark@xxxxxxxxx> Cc: Colin Ian King <colin.king@xxxxxxxxxxxxx> Cc: Jiri Slaby <jslaby@xxxxxxx> Cc: Michael Ellerman <mpe@xxxxxxxxxxxxxx> Cc: SeongJae Park <sj38.park@xxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- scripts/checkpatch.pl | 60 ++++++++++++++++++++++++--------- scripts/deprecated_terms.txt | 5 ++ 2 files changed, 50 insertions(+), 15 deletions(-) --- a/scripts/checkpatch.pl~checkpatch-support-deprecated-terms-checking +++ a/scripts/checkpatch.pl @@ -57,6 +57,7 @@ my $max_line_length = 100; my $ignore_perl_version = 0; my $minimum_perl_version = 5.10.0; my $min_conf_desc_length = 4; +my $deprecated_terms_file = "$D/deprecated_terms.txt"; my $spelling_file = "$D/spelling.txt"; my $codespell = 0; my $codespellfile = "/usr/share/codespell/dictionary.txt"; @@ -692,29 +693,40 @@ our $allowed_asm_includes = qr{(?x: )}; # memory.h: ARM has a custom one -# Load common spelling mistakes and build regular expression list. -my $misspellings; -my %spelling_fix; +sub read_word_corrections { + my ($file, $fixesRef) = @_; + my $suspects; -if (open(my $spelling, '<', $spelling_file)) { - while (<$spelling>) { - my $line = $_; + if (open(my $corrections, '<', $file)) { + while (<$corrections>) { + my $line = $_; - $line =~ s/\s*\n?$//g; - $line =~ s/^\s*//g; + $line =~ s/\s*\n?$//g; + $line =~ s/^\s*//g; - next if ($line =~ m/^\s*#/); - next if ($line =~ m/^\s*$/); + next if ($line =~ m/^\s*#/); + next if ($line =~ m/^\s*$/); - my ($suspect, $fix) = split(/\|\|/, $line); + my ($suspect, $fix) = split(/\|\|/, $line); - $spelling_fix{$suspect} = $fix; + $fixesRef->{$suspect} = $fix; + } + close($corrections); + } else { + warn "No correction will be found - file '$file': $!\n"; } - close($spelling); -} else { - warn "No typos will be found - file '$spelling_file': $!\n"; } +# Load deprecated terms and build regular expression list. +my %deprecated_terms_fix; +read_word_corrections($deprecated_terms_file, \%deprecated_terms_fix); +my $deprecated_terms = join("|", sort keys %deprecated_terms_fix) if keys %deprecated_terms_fix; + +# Load common spelling mistakes and build regular expression list. +my $misspellings; +my %spelling_fix; +read_word_corrections($spelling_file, \%spelling_fix); + if ($codespell) { if (open(my $spelling, '<', $codespellfile)) { while (<$spelling>) { @@ -2956,6 +2968,24 @@ sub process { } } } + +# Check for deprecated terms + if (defined($deprecated_terms) && + ($in_commit_log || $line =~ /^(?:\+|Subject:)/i)) { + while ($rawline =~ /(?:^|[^a-z@])($deprecated_terms)(?:\b|$|[^a-z@])/gi) { + my $deprecated_term = $1; + my $suggested = $deprecated_terms_fix{lc($deprecated_term)}; + $suggested = ucfirst($suggested) if ($deprecated_term=~ /^[A-Z]/); + $suggested = uc($suggested) if ($deprecated_term =~ /^[A-Z]+$/); + my $msg_level = \&WARN; + $msg_level = \&CHK if ($file); + if (&{$msg_level}("DEPRECATED_TERM", + "Use of '$deprecated_term' is deprecated, please '$suggested', instead.\n" . $herecurr) && + $fix) { + $fixed[$fixlinenr] =~ s/(^|[^A-Za-z@])($deprecated_term)($|[^A-Za-z@])/$1$suggested$3/; + } + } + } # Check for various typo / spelling mistakes if (defined($misspellings) && --- /dev/null +++ a/scripts/deprecated_terms.txt @@ -0,0 +1,5 @@ +# License: GPLv2 +# +# The format of each line is: +# deprecated||suggested +# _ Patches currently in -mm which might be from sjpark@xxxxxxxxx are scripts-deprecated_terms-recommend-denylist-allowlist-instead-of-blacklist-whitelist.patch scripts-deprecated_terms-sync-with-inclusive-terms.patch