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@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 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; > } > -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list