[PATCH v2 22/22] bracket-spacing: Add syntax-check for unnecessary curly brackets

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



We're looking for three consecutive lines, first one is a if/for/while
with a condition and start of body, second one is a body with one and
only semicolon and third is end of the body by itself.

Signed-off-by: Martin Kletzander <mkletzan@xxxxxxxxxx>
---
 build-aux/bracket-spacing.pl | 35 +++++++++++++++++++++++++++++++++++
 1 file changed, 35 insertions(+)

diff --git a/build-aux/bracket-spacing.pl b/build-aux/bracket-spacing.pl
index d178703..eb2d372 100755
--- a/build-aux/bracket-spacing.pl
+++ b/build-aux/bracket-spacing.pl
@@ -27,6 +27,11 @@ my $ret = 0;
 my $incomment = 0;

 foreach my $file (@ARGV) {
+    # Per-file variables for multiline Curly Bracket (cb_) check
+    my $cb_linenum = 0;
+    my $cb_code = "";
+    my $cb_scolon = 0;
+
     open FILE, $file;

     while (defined (my $line = <FILE>)) {
@@ -153,6 +158,36 @@ foreach my $file (@ARGV) {
             print "$file:$.: $line";
             $ret = 1;
         }
+
+        # One line conditional statements with one line bodies should
+        # not use curly brackets.  We also need to use $line instead $data as
+        if ($data =~ /^\s*(if|while|for)\b.*\{$/) {
+            $cb_linenum = $.;
+            $cb_code = $line;
+            $cb_scolon = 0;
+        }
+
+        # We need to check for exactly one semicolon inside the body,
+        # because empty statements (e.g. with comment only) are
+        # allowed
+        if ($cb_linenum == $. - 1 && $data =~ /^[^;]*;[^;]*$/) {
+            $cb_code .= $line;
+            $cb_scolon = 1;
+        }
+
+        if ($data =~ /^\s*}\s*$/ &&
+            $cb_linenum == $. - 2 &&
+            $cb_scolon) {
+
+            print "$file:$cb_linenum-$.:\n$cb_code$line";
+            $ret = 1;
+
+            # There _should_ be no need to reset the values; but to
+            # keep my inner piece...
+            $cb_linenum = 0;
+            $cb_scolon = 0;
+            $cb_code = "";
+        }
     }
     close FILE;
 }
-- 
2.1.3

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]