Enforce the style cleanup in the previous patch.
* build-aux/bracket-spacing.pl: Enforce trailing spacing.
* cfg.mk (bracket-spacing-check): Tweak error wording.
* docs/hacking.html.in: Document the rule.
* HACKING: Regenerate.
Signed-off-by: Eric Blake <eblake(a)redhat.com>
---
HACKING | 23 +++++++++++++++++++++++
build-aux/bracket-spacing.pl | 12 ++++++++++++
cfg.mk | 2 +-
docs/hacking.html.in | 29 +++++++++++++++++++++++++++++
4 files changed, 65 insertions(+), 1 deletion(-)
diff --git a/HACKING b/HACKING
index 2bd6d69..42f76b6 100644
--- a/HACKING
+++ b/HACKING
@@ -318,6 +318,29 @@ immediately prior to any closing bracket. E.g.
int foo(int wizz); // Good
+Semicolons
+==========
+Semicolons should never have a space beforehand. Inside the condition of a
+"for" loop, there should always be a space or line break after each semicolon,
+except for the special case of an infinite loop (although more infinite loops
+use "while"). While not enforced, loop counters generally use post-increment.
+
+ for (i = 0 ;i < limit ; ++i) { // Bad
+ for (i = 0; i < limit; i++) { // Good
+ for (;;) { // ok
+ while (1) { // Better
+
+Empty loop bodies are better represented with curly braces and a comment,
+although use of a semicolon is not currently rejected.
+
+ while ((rc = waitpid(pid, &st, 0) == -1) && // ok
+ errno == EINTR);
+ while ((rc = waitpid(pid, &st, 0) == -1) && // Better
+ errno == EINTR) {
+ /* nothing */
+ }
+
+
Curly braces
============
Omit the curly braces around an "if", "while", "for" etc.
body only when that
diff --git a/build-aux/bracket-spacing.pl b/build-aux/bracket-spacing.pl
index 2eeeeb4..de40040 100755
--- a/build-aux/bracket-spacing.pl
+++ b/build-aux/bracket-spacing.pl
@@ -1,6 +1,7 @@
#!/usr/bin/perl
#
# bracket-spacing.pl: Report any usage of 'function (..args..)'
+# Also check for other syntax issues, such as correct use of ';'
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
@@ -31,6 +32,9 @@ foreach my $file (@ARGV) {
while (defined (my $line = <FILE>)) {
my $data = $line;
+ # Kill any quoted ; or "
+ $data =~ s,'[";]','X',g;
+
# Kill any quoted strings
$data =~ s,"([^\\\"]|\\.)*","XXX",g;
@@ -125,6 +129,14 @@ foreach my $file (@ARGV) {
$ret = 1;
last;
}
+
+ # Require EOL, macro line continuation, or whitespace after ":".
+ # Allow "for (;;)" as an exception.
+ while ($data =~ /;[^ \\\n;)]/) {
+ print "$file:$.: $line";
+ $ret = 1;
+ last;
+ }
}
close FILE;
}
diff --git a/cfg.mk b/cfg.mk
index 55359e8..6e8b6d4 100644
--- a/cfg.mk
+++ b/cfg.mk
@@ -845,7 +845,7 @@ syntax-check: $(top_srcdir)/HACKING bracket-spacing-check
bracket-spacing-check:
$(AM_V_GEN)files=`$(VC_LIST) | grep '\.c$$'`; \
$(PERL) $(top_srcdir)/build-aux/bracket-spacing.pl $$files || \
- (echo $(ME): incorrect whitespace around brackets, see HACKING for rules
&& exit 1)
+ (echo "$(ME): incorrect whitespace, see HACKING for rules" &&
exit 1)
# sc_po_check can fail if generated files are not built first
sc_po_check: \
diff --git a/docs/hacking.html.in b/docs/hacking.html.in
index 78959f3..08b8b4c 100644
--- a/docs/hacking.html.in
+++ b/docs/hacking.html.in
@@ -377,6 +377,35 @@
int foo(int wizz); // Good
</pre>
+ <h2><a name="semicolon">Semicolons</a></h2>
+
+ <p>
+ Semicolons should never have a space beforehand. Inside the
+ condition of a <code>for</code> loop, there should always be a
+ space or line break after each semicolon, except for the special
+ case of an infinite loop (although more infinite loops
+ use <code>while</code>). While not enforced, loop counters
+ generally use post-increment.
+ </p>
+ <pre>
+ for (i = 0 ;i < limit ; ++i) { // Bad
+ for (i = 0; i < limit; i++) { // Good
+ for (;;) { // ok
+ while (1) { // Better
+</pre>
+ <p>
+ Empty loop bodies are better represented with curly braces and a
+ comment, although use of a semicolon is not currently rejected.
+ </p>
+ <pre>
+ while ((rc = waitpid(pid, &st, 0) == -1) && // ok
+ errno == EINTR);
+ while ((rc = waitpid(pid, &st, 0) == -1) && // Better
+ errno == EINTR) {
+ /* nothing */
+ }
+</pre>
+
<h2><a name="curly_braces">Curly braces</a></h2>
<p>
--
1.8.1.4