On 11/13/2014 09:37 AM, Martin Kletzander wrote:
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.
And because of a later ";;" check - one cannot entirely work around this
single colon count...
Signed-off-by: Martin Kletzander <mkletzan(a)redhat.com>
---
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
as what?
+ 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) {
+
[1] Perhaps maybe an additional print here indicating failure is because
of single line condition no need for brackets
+ 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 = "";
+ }
[1]I have to say the error one gets if they violate this rule:
maint.mk: incorrect whitespace, see HACKING for rules
make: *** [bracket-spacing-check] Error 1
Is rather ambiguous - I was trying to find a way around the
EDIT_NOT_CHANGED issue from 17/22 without changing the macro and when I
saw the message it really didn't seem to convey the message that other
checks seem to convey. This is not an incorrect whitespace - it's
extraneous/unnecessary brackets (although I do understand the error
comes from the file name - it's just odd to see).
BTW: I *did* find a way around the check, although I know it's not a
proper comment...
- if (STREQ(doc, doc_edited))
+ if (STREQ(doc, doc_edited)) {
+ // comment
EDIT_NOT_CHANGED;
+ }
John
}
close FILE;
}