Re: [PATCH] checkpatch: add --typedefsfile

From: Jerome Forissier
Date: Fri Apr 21 2017 - 02:31:23 EST




On 04/20/2017 06:49 PM, Joe Perches wrote:
> On Thu, 2017-04-20 at 17:39 +0200, Jerome Forissier wrote:
>> When using checkpatch on out-of-tree code, it may occur that some
>> project-specific types are used, which will cause spurious warnings.
>> Add the --typedefsfile option as a way to extend the known types and
>> deal with this issue.
>
> I'm not opposed to the addition.
> What out-of-tree project is this for?

OP-TEE [1]. We run a Travis job on all pull requests [2], and checkpatch
is part of that. The typical false warning we get on a regular basis is
with some pointers to functions returning TEE_Result [3], which is a
typedef from the GlobalPlatform APIs. We consider it is acceptable to
use GP types in the OP-TEE core implementation, that's why this patch
would be helpful for us.

[1] https://github.com/OP-TEE/optee_os
[2] https://travis-ci.org/OP-TEE/optee_os/builds
[3] https://travis-ci.org/OP-TEE/optee_os/builds/193355335#L1733

Thanks,
--
Jerome

>
>> Signed-off-by: Jerome Forissier <jerome.forissier@xxxxxxxxxx>
>> ---
>> scripts/checkpatch.pl | 56 ++++++++++++++++++++++++++++++++++-----------------
>> 1 file changed, 37 insertions(+), 19 deletions(-)
>>
>> diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
>> index baa3c7b..eb55f5f 100755
>> --- a/scripts/checkpatch.pl
>> +++ b/scripts/checkpatch.pl
>> @@ -55,6 +55,7 @@ my $spelling_file = "$D/spelling.txt";
>> my $codespell = 0;
>> my $codespellfile = "/usr/share/codespell/dictionary.txt";
>> my $conststructsfile = "$D/const_structs.checkpatch";
>> +my $typedefsfile = "";
>> my $color = 1;
>> my $allow_c99_comments = 1;
>>
>> @@ -113,6 +114,7 @@ Options:
>> --codespell Use the codespell dictionary for spelling/typos
>> (default:/usr/share/codespell/dictionary.txt)
>> --codespellfile Use this codespell dictionary
>> + --typedefsfile Read additional types from this file
>> --color Use colors when output is STDOUT (default: on)
>> -h, --help, --version display this help and exit
>>
>> @@ -208,6 +210,7 @@ GetOptions(
>> 'test-only=s' => \$tst_only,
>> 'codespell!' => \$codespell,
>> 'codespellfile=s' => \$codespellfile,
>> + 'typedefsfile=s' => \$typedefsfile,
>> 'color!' => \$color,
>> 'h|help' => \$help,
>> 'version' => \$help
>> @@ -629,28 +632,43 @@ if ($codespell) {
>>
>> $misspellings = join("|", sort keys %spelling_fix) if keys %spelling_fix;
>>
>> +sub read_words {
>> + my ($wordsRef, $file) = @_;
>> +
>> + if (open(my $words, '<', $file)) {
>> + while (<$words>) {
>> + my $line = $_;
>> +
>> + $line =~ s/\s*\n?$//g;
>> + $line =~ s/^\s*//g;
>> +
>> + next if ($line =~ m/^\s*#/);
>> + next if ($line =~ m/^\s*$/);
>> + if ($line =~ /\s/) {
>> + print("$file: '$line' invalid - ignored\n");
>> + next;
>> + }
>> +
>> + $$wordsRef .= '|' if ($$wordsRef ne "");
>> + $$wordsRef .= $line;
>> + }
>> + close($file);
>> + return 1;
>> + }
>> +
>> + return 0;
>> +}
>> +
>> my $const_structs = "";
>> -if (open(my $conststructs, '<', $conststructsfile)) {
>> - while (<$conststructs>) {
>> - my $line = $_;
>> +read_words(\$const_structs, $conststructsfile)
>> + or warn "No structs that should be const will be found - file '$conststructsfile': $!\n";
>>
>> - $line =~ s/\s*\n?$//g;
>> - $line =~ s/^\s*//g;
>> -
>> - next if ($line =~ m/^\s*#/);
>> - next if ($line =~ m/^\s*$/);
>> - if ($line =~ /\s/) {
>> - print("$conststructsfile: '$line' invalid - ignored\n");
>> - next;
>> - }
>> -
>> - $const_structs .= '|' if ($const_structs ne "");
>> - $const_structs .= $line;
>> - }
>> - close($conststructsfile);
>> -} else {
>> - warn "No structs that should be const will be found - file '$conststructsfile': $!\n";
>> +my $typeOtherTypedefs = "";
>> +if (length($typedefsfile)) {
>> + read_words(\$typeOtherTypedefs, $typedefsfile)
>> + or warn "No additional types will be considered - file '$typedefsfile': $!\n";
>> }
>> +$typeTypedefs .= '|' . $typeOtherTypedefs if ($typeOtherTypedefs ne "");
>>
>> sub build_types {
>> my $mods = "(?x: \n" . join("|\n ", (@modifierList, @modifierListFile)) . "\n)";