On Thu, 2019-07-04 at 11:49 -0700, Joe Perches wrote:
> On Thu, 2019-07-04 at 17:40 +0800, Miles Chen wrote:
> > This change adds 3 Kconfig default value tests:
> []
> > diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
> []
> > @@ -3005,6 +3005,27 @@ sub process {
> >                          "Use of boolean is deprecated, please use bool 
> > instead.\n" . $herecurr);
> >             }
> >  
> > +# discourage redundant 'default n'
> > +           if ($realfile =~ /Kconfig/ &&
> > +               $line =~ /^\+\s*default n$/) {
> > +                   WARN("DEFAULT_VALUE_STYLE",
> > +                        "'default n' is the default value, no need to 
> > write it explicitly.\n" . $herecurr);
> > +           }
> > +
> > +# discourage quote: use default [ynm], not default "[ynm]"
> > +           if ($realfile =~ /Kconfig/ &&
> > +               $rawline =~ /^\+\s*default\s*"[ynm]"/) {
> > +                   WARN("DEFAULT_VALUE_STYLE",
> > +                        "Use default [ynm] instead of default \"[ynm]\"\n" 
> > . $herecurr);
> > +           }
> > +
> > +# discourage default \!?EXPERT
> > +           if ($realfile =~ /Kconfig/ &&
> > +               $line =~ /^\+\s*default \!?EXPERT/) {
> > +                   WARN("DEFAULT_VALUE_STYLE",
> > +                        "Avoid default turn on kernel configs by default 
> > !?EXPERT\n" . $herecurr);
> > +           }
> > +
> 
> I'd prefer to create a block for all the Kconfig file tests and
> avoid multiply determining if the filename includes Kconfig so
> the script runs a bit faster.
> 

Thanks for your comments.
yes, the script runs faster this way.

> Also some trivial changes to the added tests with added --fix
> capability.  Something like:

Thanks for posting the patch, I'll verify it and post as patch v3.

> ---
>  scripts/checkpatch.pl | 139 
> ++++++++++++++++++++++++++++++--------------------
>  1 file changed, 85 insertions(+), 54 deletions(-)
> 
> diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
> index 6cb99ec62000..4780149a8d30 100755
> --- a/scripts/checkpatch.pl
> +++ b/scripts/checkpatch.pl
> @@ -2934,60 +2934,98 @@ sub process {
>                                     "Do not include the paragraph about 
> writing to the Free Software Foundation's mailing address from the sample GPL 
> notice. The FSF has changed addresses in the past, and may do so again. Linux 
> already includes a copy of the GPL.\n" . $herevet)
>               }
>  
> -# check for Kconfig help text having a real description
> -# Only applies when adding the entry originally, after that we do not have
> -# sufficient context to determine whether it is indeed long enough.
> -             if ($realfile =~ /Kconfig/ &&
> -                 # 'choice' is usually the last thing on the line (though
> -                 # Kconfig supports named choices), so use a word boundary
> -                 # (\b) rather than a whitespace character (\s)
> -                 $line =~ /^\+\s*(?:config|menuconfig|choice)\b/) {
> -                     my $length = 0;
> -                     my $cnt = $realcnt;
> -                     my $ln = $linenr + 1;
> -                     my $f;
> -                     my $is_start = 0;
> -                     my $is_end = 0;
> -                     for (; $cnt > 0 && defined $lines[$ln - 1]; $ln++) {
> -                             $f = $lines[$ln - 1];
> -                             $cnt-- if ($lines[$ln - 1] !~ /^-/);
> -                             $is_end = $lines[$ln - 1] =~ /^\+/;
> -
> -                             next if ($f =~ /^-/);
> -                             last if (!$file && $f =~ /^\@\@/);
> -
> -                             if ($lines[$ln - 1] =~ 
> /^\+\s*(?:bool|tristate|prompt)\s*["']/) {
> -                                     $is_start = 1;
> -                             } elsif ($lines[$ln - 1] =~ 
> /^\+\s*(?:help|---help---)\s*$/) {
> -                                     if ($lines[$ln - 1] =~ "---help---") {
> -                                             WARN("CONFIG_DESCRIPTION",
> -                                                  "prefer 'help' over 
> '---help---' for new help texts\n" . $herecurr);
> +# Kconfig tests
> +             if ($realfile =~ /Kconfig/) {
> +                     # check for Kconfig help text having a real description
> +                     # Only applies when adding the entry originally, after
> +                     # that we do not have sufficient context to determine
> +                     # whether it is indeed long enough.
> +                     # 'choice' is usually the last thing on the line (though
> +                     # Kconfig supports named choices), so use a word
> +                     # boundary (\b) rather than a whitespace character (\s)
> +                     if ($line =~ /^\+\s*(?:config|menuconfig|choice)\b/) {
> +                             my $length = 0;
> +                             my $cnt = $realcnt;
> +                             my $ln = $linenr + 1;
> +                             my $f;
> +                             my $is_start = 0;
> +                             my $is_end = 0;
> +                             for (; $cnt > 0 && defined $lines[$ln - 1]; 
> $ln++) {
> +                                     $f = $lines[$ln - 1];
> +                                     $cnt-- if ($lines[$ln - 1] !~ /^-/);
> +                                     $is_end = $lines[$ln - 1] =~ /^\+/;
> +
> +                                     next if ($f =~ /^-/);
> +                                     last if (!$file && $f =~ /^\@\@/);
> +
> +                                     if ($lines[$ln - 1] =~ 
> /^\+\s*(?:bool|tristate|prompt)\s*["']/) {
> +                                             $is_start = 1;
> +                                     } elsif ($lines[$ln - 1] =~ 
> /^\+\s*(?:help|---help---)\s*$/) {
> +                                             if ($lines[$ln - 1] =~ 
> "---help---") {
> +                                                     
> WARN("CONFIG_DESCRIPTION",
> +                                                          "prefer 'help' 
> over '---help---' for new help texts\n" . $herecurr);
> +                                             }
> +                                             $length = -1;
> +                                     }
> +
> +                                     $f =~ s/^.//;
> +                                     $f =~ s/#.*//;
> +                                     $f =~ s/^\s+//;
> +                                     next if ($f =~ /^$/);
> +
> +                                     # This only checks context lines in the 
> patch
> +                                     # and so hopefully shouldn't trigger 
> false
> +                                     # positives, even though some of these 
> are
> +                                     # common words in help texts
> +                                     if ($f =~ 
> /^\s*(?:config|menuconfig|choice|endchoice|
> +                                                        
> if|endif|menu|endmenu|source)\b/x) {
> +                                             $is_end = 1;
> +                                             last;
>                                       }
> -                                     $length = -1;
> +                                     $length++;
> +                             }
> +                             if ($is_start && $is_end && $length < 
> $min_conf_desc_length) {
> +                                     WARN("CONFIG_DESCRIPTION",
> +                                          "please write a paragraph that 
> describes the config symbol fully\n" . $herecurr);
>                               }
> +                             #print "is_start<$is_start> is_end<$is_end> 
> length<$length>\n";
> +                     }
>  
> -                             $f =~ s/^.//;
> -                             $f =~ s/#.*//;
> -                             $f =~ s/^\s+//;
> -                             next if ($f =~ /^$/);
> -
> -                             # This only checks context lines in the patch
> -                             # and so hopefully shouldn't trigger false
> -                             # positives, even though some of these are
> -                             # common words in help texts
> -                             if ($f =~ 
> /^\s*(?:config|menuconfig|choice|endchoice|
> -                                               
> if|endif|menu|endmenu|source)\b/x) {
> -                                     $is_end = 1;
> -                                     last;
> +# discourage the use of boolean for type definition attributes
> +                     if ($line =~ /^\+\s*\bboolean\b/) {
> +                             if (WARN("CONFIG_TYPE_BOOLEAN",
> +                                      "Use of boolean is deprecated, please 
> use bool instead\n" . $herecurr) &&
> +                                 $fix) {
> +                                     $fixed[$fixlinenr] =~ 
> s/\bboolean\b/bool/;
> +                             }
> +                     }
> +
> +# Kconfig: discourage redundant 'default n'
> +                     if ($line =~ /^\+\s*default\s+n$/) {
> +                             if (WARN("CONFIG_DEFAULT_VALUE_STYLE",
> +                                      "'default n' is the default value, no 
> need to write it explicitly\n" . $herecurr) &&
> +                                 $fix) {
> +                                     fix_delete_line($fixlinenr, $rawline);
>                               }
> -                             $length++;
>                       }
> -                     if ($is_start && $is_end && $length < 
> $min_conf_desc_length) {
> -                             WARN("CONFIG_DESCRIPTION",
> -                                  "please write a paragraph that describes 
> the config symbol fully\n" . $herecurr);
> +
> +# Kconfig: discourage quoted defaults: use default [ynm], not default "[ynm]"
> +                     if ($rawline =~ /^\+\s*default\s+"([ynm])"/) {
> +                             if (WARN("CONFIG_DEFAULT_VALUE_STYLE",
> +                                      "Use 'default $1' not 'default 
> \"$1\"'\n" . $herecurr) &&
> +                                 $fix) {
> +                                     $fixed[$fixlinenr] =~ 
> s/\b(default\s+)"(.)"/$1$2/;
> +                             }
> +                     }
> +
> +# Kconfig: discourage using default EXPERT or !EXPERT
> +                     if ($line =~ /^\+\s*default\s+\!?\s*EXPERT\b/) {
> +                             WARN("CONFIG_DEFAULT_VALUE_STYLE",
> +                                  "Avoid using default EXPERT\n" . 
> $herecurr);
>                       }
> -                     #print "is_start<$is_start> is_end<$is_end> 
> length<$length>\n";
>               }
> +# End of Kconfig tests
> +
>  
>  # check for MAINTAINERS entries that don't have the right form
>               if ($realfile =~ /^MAINTAINERS$/ &&
> @@ -3000,13 +3038,6 @@ sub process {
>                       }
>               }
>  
> -# discourage the use of boolean for type definition attributes of Kconfig 
> options
> -             if ($realfile =~ /Kconfig/ &&
> -                 $line =~ /^\+\s*\bboolean\b/) {
> -                     WARN("CONFIG_TYPE_BOOLEAN",
> -                          "Use of boolean is deprecated, please use bool 
> instead.\n" . $herecurr);
> -             }
> -
>               if (($realfile =~ /Makefile.*/ || $realfile =~ /Kbuild.*/) &&
>                   ($line =~ /\+(EXTRA_[A-Z]+FLAGS).*/)) {
>                       my $flag = $1;
> 
> 


Reply via email to