]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
maint: enforce comma style usage
authorEric Blake <eblake@redhat.com>
Tue, 19 Nov 2013 21:29:44 +0000 (14:29 -0700)
committerEric Blake <eblake@redhat.com>
Wed, 20 Nov 2013 16:24:18 +0000 (09:24 -0700)
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@redhat.com>
HACKING
build-aux/bracket-spacing.pl
docs/hacking.html.in

diff --git a/HACKING b/HACKING
index f8797cc4f8dd9061193eaa93091d3f9379b1f35e..5d9cdca9886f20adab997b957fdc62aa7b3901df 100644 (file)
--- a/HACKING
+++ b/HACKING
@@ -325,6 +325,35 @@ 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 syntax-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. Any sentinel enumerator value with a name ending in _LAST
+is exempt, since you would extend such an enum before the _LAST element.
+Another reason to favor trailing commas is that it requires less effort to
+produce via code generators. Note that the syntax checker is unable to enforce
+a style of trailing commas, so there are counterexamples in existing code
+which do not use it; also, while C99 allows trailing commas, remember that
+JSON and XDR do not.
+
+      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
index 4c199689e1e7993fd73dc903f649bf22367cadf8..802a640e4ed9102c5821b640cfcf98a69e1de3ed 100755 (executable)
@@ -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;
 }
index 7f31abf198c56dbef43916504f8c9d81229a282f..0febee2115d1c6b1a2cd4734833a69c84676833d 100644 (file)
       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
+      syntax-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.  Any
+      sentinel enumerator value with a name ending in _LAST is exempt,
+      since you would extend such an enum before the _LAST element.
+      Another reason to favor trailing commas is that it requires less
+      effort to produce via code generators.  Note that the syntax
+      checker is unable to enforce a style of trailing commas, so
+      there are counterexamples in existing code which do not use it;
+      also, while C99 allows trailing commas, remember that JSON and
+      XDR do not.
+    </p>
+    <pre>
+      enum {
+          VALUE_ONE,
+          VALUE_TWO // Bad
+      };
+      enum {
+          VALUE_THREE,
+          VALUE_FOUR, // Good
+      };
+</pre>
+
     <h2><a name="semicolon">Semicolons</a></h2>
 
     <p>