util/lint/kconfig_lint: update help checking

- Turn the check for help text with no indentation from a warning to
an error.
- Show an error if the help text is at the same indentation level as
the 'help' keyword.

Change-Id: Ibf868c83e2a128ceb6c4d3da7f2cf7dc237054e6
Signed-off-by: Martin Roth <martinroth@google.com>
Reviewed-on: https://review.coreboot.org/19851
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Ronald G. Minnich <rminnich@gmail.com>
This commit is contained in:
Martin Roth 2017-05-23 19:43:43 -06:00
parent 2dafd89769
commit 8849f3be4a
2 changed files with 15 additions and 3 deletions

View File

@ -1007,6 +1007,7 @@ sub add_referenced_symbol {
{ {
#create a non-global static variable by enclosing it and the subroutine #create a non-global static variable by enclosing it and the subroutine
my $help_whitespace = ""; #string to show length of the help whitespace my $help_whitespace = ""; #string to show length of the help whitespace
my $help_keyword_whitespace = "";
sub handle_help { sub handle_help {
my ( $line, $inside_help, $inside_config, $inside_choice, $filename, $line_no ) = @_; my ( $line, $inside_help, $inside_config, $inside_choice, $filename, $line_no ) = @_;
@ -1018,15 +1019,20 @@ sub add_referenced_symbol {
$line =~ /^(\s+)/; #find the indentation level. $line =~ /^(\s+)/; #find the indentation level.
$help_whitespace = $1; $help_whitespace = $1;
if ( !$help_whitespace ) { if ( !$help_whitespace ) {
show_warning("$filename:$line_no - help text starts with no whitespace."); show_error("$filename:$line_no - help text starts with no whitespace.");
return $inside_help;
}
elsif ($help_keyword_whitespace eq $help_whitespace) {
show_error("$filename:$line_no - help text needs additional indentation.");
return $inside_help; return $inside_help;
} }
} }
#help ends at the first line which has a smaller indentation than the first line of the help text. #help ends at the first line which has a smaller indentation than the first line of the help text.
if ( ( $line !~ /$help_whitespace/ ) && ( $line !~ /^[\r\n]+/ ) ) { if ( ( $line !~ /^$help_whitespace/ ) && ( $line !~ /^[\r\n]+/ ) ) {
$inside_help = 0; $inside_help = 0;
$help_whitespace = ""; $help_whitespace = "";
$help_keyword_whitespace = "";
} }
else { #if it's not ended, add the line to the helptext array for the symbol's instance else { #if it's not ended, add the line to the helptext array for the symbol's instance
if ($inside_config) { if ($inside_config) {
@ -1034,10 +1040,15 @@ sub add_referenced_symbol {
if ($help_whitespace) { $line =~ s/^$help_whitespace//; } if ($help_whitespace) { $line =~ s/^$help_whitespace//; }
push( @{ $symbols{$inside_config}{$sym_num}{helptext} }, $line ); push( @{ $symbols{$inside_config}{$sym_num}{helptext} }, $line );
} }
if ( ($help_keyword_whitespace eq $help_whitespace) && ( $line !~ /^[\r\n]+/ ) ) {
show_error("$filename:$line_no - help text needs additional indentation.");
}
} }
} }
elsif ( ( $line =~ /^(\s*)help/ ) || ( $line =~ /^(\s*)---help---/ ) ) { elsif ( ( $line =~ /^(\s*)help/ ) || ( $line =~ /^(\s*)---help---/ ) ) {
$inside_help = $line_no; $inside_help = $line_no;
$line =~ /^(\s+)/;
$help_keyword_whitespace = $1;
if ( ( !$inside_config ) && ( !$inside_choice ) ) { if ( ( !$inside_config ) && ( !$inside_choice ) ) {
if ($show_note_output) { if ($show_note_output) {
print "# Note: $filename:$line_no help is not inside a config or choice block.\n"; print "# Note: $filename:$line_no help is not inside a config or choice block.\n";

View File

@ -45,7 +45,6 @@ Notes:
Warnings in Kconfig files: Warnings in Kconfig files:
- Any 'default' expressions that can never be reached. - Any 'default' expressions that can never be reached.
- Symbols that are defined but never used. - Symbols that are defined but never used.
- Help text starting with no whitespace.
- Directories specified in a 'source' keyword do not exist. - Directories specified in a 'source' keyword do not exist.
- A 'source' keyword loading a Kconfig file that has already been loaded. - A 'source' keyword loading a Kconfig file that has already been loaded.
- A 'source' keyword loading a Kconfig file that doesn't exist. Note that - A 'source' keyword loading a Kconfig file that doesn't exist. Note that
@ -78,6 +77,8 @@ Errors in Kconfig files:
- Lines not ending with a linefeed. These can cause some keywords to not - Lines not ending with a linefeed. These can cause some keywords to not
function properly ('source' keywords in particular). It's also just function properly ('source' keywords in particular). It's also just
generally good to end the file with a linefeed. generally good to end the file with a linefeed.
- Help text starting with no whitespace.
- Help text that starts at the same indentation level as the 'help' keyword.
Errors in Kconfig that are also caught by Kconfig itself: Errors in Kconfig that are also caught by Kconfig itself:
- Invalid expressions. - Invalid expressions.