[libvirt] [PATCH 11/11] maint: enforce comma style usage

Eric Blake eblake at redhat.com
Wed Nov 20 00:30:11 UTC 2013


Enforce and document the style set up by the previous patches.

* build-aux/bracket-spacing.pl: Add comma checks.
* docs/hacking.html.in: Document the rules.
* HACKING: Regenerate.

Signed-off-by: Eric Blake <eblake at redhat.com>
---
 HACKING                      | 25 +++++++++++++++++++++++++
 build-aux/bracket-spacing.pl | 15 +++++++++++----
 docs/hacking.html.in         | 31 +++++++++++++++++++++++++++++++
 3 files changed, 67 insertions(+), 4 deletions(-)

diff --git a/HACKING b/HACKING
index f8797cc..357a4bd 100644
--- a/HACKING
+++ b/HACKING
@@ -325,6 +325,31 @@ immediately prior to any closing bracket. E.g.
       int foo(int wizz);    // Good


+Commas
+======
+Commas should always be followed by a space or end of line, and never have
+leading space; this is enforced during 'make check'.
+
+      call(a,b ,c);// Bad
+      call(a, b, c); // Good
+
+When declaring an enum or using a struct initializer that occupies more than
+one line, use a trailing comma. That way, future edits to extend the list only
+have to add a line, rather than modify an existing line to add the
+intermediate comma. However, this is harder to enforce, so you will find
+counterexamples in existing code. Additionally, any sentinel enumerator value
+with a name ending in _LAST is exempt.
+
+      enum {
+          VALUE_ONE,
+          VALUE_TWO // Bad
+      };
+      enum {
+          VALUE_THREE,
+          VALUE_FOUR, // Good
+      };
+
+
 Semicolons
 ==========
 Semicolons should never have a space beforehand. Inside the condition of a
diff --git a/build-aux/bracket-spacing.pl b/build-aux/bracket-spacing.pl
index 4c19968..802a640 100755
--- a/build-aux/bracket-spacing.pl
+++ b/build-aux/bracket-spacing.pl
@@ -32,8 +32,8 @@ foreach my $file (@ARGV) {
     while (defined (my $line = <FILE>)) {
         my $data = $line;

-        # Kill any quoted ; or "
-        $data =~ s,'[";]','X',g;
+        # Kill any quoted , ; or "
+        $data =~ s/'[";,]'/'X'/g;

         # Kill any quoted strings
         $data =~ s,"([^\\\"]|\\.)*","XXX",g;
@@ -114,7 +114,7 @@ foreach my $file (@ARGV) {
             last;
         }

-        # Forbid whitespace before ";". Things like below are allowed:
+        # Forbid whitespace before ";" or ",". Things like below are allowed:
         #
         # 1) The expression is empty for "for" loop. E.g.
         #   for (i = 0; ; i++)
@@ -124,7 +124,7 @@ foreach my $file (@ARGV) {
         #          errno == EINTR)
         #       ;
         #
-        while ($data =~ /[^;\s]\s+;/) {
+        while ($data =~ /[^;\s]\s+[;,]/) {
             print "$file:$.: $line";
             $ret = 1;
             last;
@@ -137,6 +137,13 @@ foreach my $file (@ARGV) {
             $ret = 1;
             last;
         }
+
+        # Require EOL, space, or enum/struct end after comma.
+        while ($data =~ /,[^ \\\n)}]/) {
+            print "$file:$.: $line";
+            $ret = 1;
+            last;
+        }
     }
     close FILE;
 }
diff --git a/docs/hacking.html.in b/docs/hacking.html.in
index 7f31abf..cc76997 100644
--- a/docs/hacking.html.in
+++ b/docs/hacking.html.in
@@ -402,6 +402,37 @@
       int foo(int wizz);    // Good
 </pre>

+    <h2><a name="comma">Commas</a></h2>
+
+    <p>
+      Commas should always be followed by a space or end of line, and
+      never have leading space; this is enforced during 'make check'.
+    </p>
+    <pre>
+      call(a,b ,c);// Bad
+      call(a, b, c); // Good
+</pre>
+
+    <p>
+      When declaring an enum or using a struct initializer that
+      occupies more than one line, use a trailing comma.  That way,
+      future edits to extend the list only have to add a line, rather
+      than modify an existing line to add the intermediate comma.
+      However, this is harder to enforce, so you will find
+      counterexamples in existing code.  Additionally, any sentinel
+      enumerator value with a name ending in _LAST is exempt.
+    </p>
+    <pre>
+      enum {
+          VALUE_ONE,
+          VALUE_TWO // Bad
+      };
+      enum {
+          VALUE_THREE,
+          VALUE_FOUR, // Good
+      };
+</pre>
+
     <h2><a name="semicolon">Semicolons</a></h2>

     <p>
-- 
1.8.3.1




More information about the libvir-list mailing list