util/lint/checkpatch.pl: Update to v5.18-2 lines related to verbosity

Signed-off-by: Elyes Haouas <ehaouas@noos.fr>
Change-Id: I66f38cb01e58ee241bf58c4db83693029ddebcfa
Reviewed-on: https://review.coreboot.org/c/coreboot/+/63437
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Martin L Roth <martinroth@google.com>
This commit is contained in:
Elyes Haouas 2022-04-07 10:07:34 +02:00 committed by Martin L Roth
parent 7ff2c17beb
commit 46b07e53f5
1 changed files with 95 additions and 7 deletions

View File

@ -65,7 +65,8 @@ my $codespell = 0;
my $codespellfile = "/usr/share/codespell/dictionary.txt";
my $user_codespellfile = "";
my $conststructsfile = "$D/const_structs.checkpatch";
my $typedefsfile = "";
my $docsfile = "";
my $typedefsfile;
my $color = "auto";
my $allow_c99_comments = 1;
my $git_command ='git'; # coreboot
@ -86,6 +87,7 @@ Version: $V
Options:
-q, --quiet quiet
-v, --verbose verbose mode
--no-tree run without a kernel tree
--no-signoff do not check for 'Signed-off-by' line
--patch treat FILE as patchfile (default)
@ -162,15 +164,51 @@ sub list_types {
my $text = <$script>;
close($script);
my @types = ();
my %types = ();
# Also catch when type or level is passed through a variable
for ($text =~ /(?:(?:\bCHK|\bWARN|\bERROR|&\{\$msg_level})\s*\(|\$msg_type\s*=)\s*"([^"]+)"/g) {
push (@types, $_);
while ($text =~ /(?:(\bCHK|\bWARN|\bERROR|&\{\$msg_level})\s*\(|\$msg_type\s*=)\s*"([^"]+)"/g) {
if (defined($1)) {
if (exists($types{$2})) {
$types{$2} .= ",$1" if ($types{$2} ne $1);
} else {
$types{$2} = $1;
}
} else {
$types{$2} = "UNDETERMINED";
}
}
@types = sort(uniq(@types));
print("#\tMessage type\n\n");
foreach my $type (@types) {
if ($color) {
print(" ( Color coding: ");
print(RED . "ERROR" . RESET);
print(" | ");
print(YELLOW . "WARNING" . RESET);
print(" | ");
print(GREEN . "CHECK" . RESET);
print(" | ");
print("Multiple levels / Undetermined");
print(" )\n\n");
}
foreach my $type (sort keys %types) {
my $orig_type = $type;
if ($color) {
my $level = $types{$type};
if ($level eq "ERROR") {
$type = RED . $type . RESET;
} elsif ($level eq "WARN") {
$type = YELLOW . $type . RESET;
} elsif ($level eq "CHK") {
$type = GREEN . $type . RESET;
}
}
print(++$count . "\t" . $type . "\n");
if ($verbose && exists($verbose_messages{$orig_type})) {
my $message = $verbose_messages{$orig_type};
$message =~ s/\n/\n\t/g;
print("\t" . $message . "\n\n");
}
}
exit($exitcode);
@ -202,6 +240,46 @@ if (-f $conf) {
unshift(@ARGV, @conf_args) if @conf_args;
}
sub load_docs {
open(my $docs, '<', "$docsfile")
or warn "$P: Can't read the documentation file $docsfile $!\n";
my $type = '';
my $desc = '';
my $in_desc = 0;
while (<$docs>) {
chomp;
my $line = $_;
$line =~ s/\s+$//;
if ($line =~ /^\s*\*\*(.+)\*\*$/) {
if ($desc ne '') {
$verbose_messages{$type} = trim($desc);
}
$type = $1;
$desc = '';
$in_desc = 1;
} elsif ($in_desc) {
if ($line =~ /^(?:\s{4,}|$)/) {
$line =~ s/^\s{4}//;
$desc .= $line;
$desc .= "\n";
} else {
$verbose_messages{$type} = trim($desc);
$type = '';
$desc = '';
$in_desc = 0;
}
}
}
if ($desc ne '') {
$verbose_messages{$type} = trim($desc);
}
close($docs);
}
# Perl's Getopt::Long allows options to take optional arguments after a space.
# Prevent --color by itself from consuming other arguments
foreach (@ARGV) {
@ -212,6 +290,7 @@ foreach (@ARGV) {
GetOptions(
'q|quiet+' => \$quiet,
'v|verbose!' => \$verbose,
'tree!' => \$tree,
'signoff!' => \$chk_signoff,
'patch!' => \$chk_patch,
@ -2056,7 +2135,16 @@ sub report {
splice(@lines, 1, 1);
$output = join("\n", @lines);
}
$output = (split('\n', $output))[0] . "\n" if ($terse);
if ($terse) {
$output = (split('\n', $output))[0] . "\n";
}
if ($verbose && exists($verbose_messages{$type}) &&
!exists($verbose_emitted{$type})) {
$output .= $verbose_messages{$type} . "\n\n";
$verbose_emitted{$type} = 1;
}
push(our @report, $output);