Re: [PATCH] checkpatch: add --typedefsfile
From: Joe Perches
Date: Thu Apr 20 2017 - 12:50:06 EST
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?
> 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)";