From 995ef7804c43018a1eba327d0aaf5855d5fe5487 Mon Sep 17 00:00:00 2001 From: Martin Kletzander Date: Wed, 12 Nov 2014 17:22:27 +0100 Subject: [PATCH] bracket-spacing: Add syntax-check for unnecessary curly brackets 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. Signed-off-by: Martin Kletzander --- build-aux/bracket-spacing.pl | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/build-aux/bracket-spacing.pl b/build-aux/bracket-spacing.pl index 3d3d7d8d48..5bc96d2750 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 = )) { @@ -161,6 +166,37 @@ foreach my $file (@ARGV) { print "$file:$.: $line"; $ret = 1; } + + # One line conditional statements with one line bodies should + # not use curly brackets. + 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) { + + print "Curly brackets around single-line body:\n"; + print "$file:$cb_linenum-$.:\n$cb_code$line"; + $ret = 1; + + # There _should_ be no need to reset the values; but to + # keep my inner peace... + $cb_linenum = 0; + $cb_scolon = 0; + $cb_code = ""; + } } close FILE; }