[coreboot-gerrit] New patch to review for coreboot: kconfig_lint: make sure if and endif statements are balanced

Martin Roth (martinroth@google.com) gerrit at coreboot.org
Wed Mar 2 21:19:22 CET 2016


Martin Roth (martinroth at google.com) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/13876

-gerrit

commit 0b658c58801957b12ef8f2008906293269d2d45b
Author: Martin Roth <martinroth at google.com>
Date:   Wed Mar 2 12:16:13 2016 -0700

    kconfig_lint: make sure if and endif statements are balanced
    
    In Kconfig files, the 'if' and 'endif' statements need to match up. A
    file can't start an if statement that's completed in the next file.
    
    Add a check as the files are being parsed to make sure that they match
    up correctly.
    
    Change-Id: If51207ea037089ab84c768e5a868270468cf4c4f
    Signed-off-by: Martin Roth <martinroth at google.com>
---
 util/lint/kconfig_lint | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/util/lint/kconfig_lint b/util/lint/kconfig_lint
index 38fa968..c955343 100755
--- a/util/lint/kconfig_lint
+++ b/util/lint/kconfig_lint
@@ -447,6 +447,7 @@ sub build_and_parse_kconfig_tree {
     my @inside_menu   = ();    # stack of menu names
     my $inside_choice = "";
     my $configs_inside_choice;
+    my %fileinfo;
 
     #start the tree off by loading the top level kconfig
     @config_to_parse = load_kconfig_file( $top_level_kconfig, "", 0, 0, "", 0 );
@@ -601,12 +602,14 @@ sub build_and_parse_kconfig_tree {
             my $expr = $1;
             push( @inside_if, $expr );
             handle_expressions( $expr, $inside_config, $filename, $line_no );
+            $fileinfo{$filename}{iflevel}++;
         }
 
         # endif
         elsif ( $line =~ /^\s*endif/ ) {
             $inside_config = "";
             pop(@inside_if);
+            $fileinfo{$filename}{iflevel}--;
         }
 
         #range <symbol> <symbol> [if <expr>]
@@ -665,6 +668,16 @@ sub build_and_parse_kconfig_tree {
         }
         push @wholeconfig, @parseline;
     }
+
+    foreach my $file ( keys %fileinfo ) {
+        if ( $fileinfo{$file}{iflevel} > 0 ) {
+            show_error("$file has $fileinfo{$file}{iflevel} more 'if' statement(s) than 'endif' statements.");
+        }
+        elsif ( $fileinfo{$file}{iflevel} < 0 ) {
+            show_error(
+                "$file has " . ( $fileinfo{$file}{iflevel} * -1 ) . " more 'endif' statement(s) than 'if' statements." );
+        }
+    }
 }
 
 #-------------------------------------------------------------------------------



More information about the coreboot-gerrit mailing list