[PATCH 3/3] Add perl function indent_ctor_init_lists to whitespace.pl

K. "pestophagous" Heller pestophagous at gmail.com
Sat Oct 17 17:05:36 PDT 2015


whitespace.pl can now do a better job (although surely
still not 100% perfect job) of formatting constructor
member initialization lists according to the rules
described in the current CodingStyle file.

Signed-off-by: K. Heller <pestophagous at gmail.com>
---

I ran this version of whitespace.pl on most of the source files in the
subsurface repo and I was very happy with the results.  I did not find
anywhere that 'indent_ctor_init_lists' led to side-effects on lines
that have nothing to do with ctors.

An additional comment about whitespace.pl:

So far in my testing with clang-format 3.5.0, there appear to be parts
of whitespace.pl that can now be removed. (I have not made any
removals, though.)  For example: clang-format does handle the
Q_FOREACH and for_each_dive in my testing.  So I don't think
whitespace.pl needs to manipulate 'each'es.  Also, I am not sure that
I see any 'messing-up' with clang adding 4 spaces or 6 spaces
anywhere.

 scripts/whitespace.pl | 38 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 38 insertions(+)

diff --git a/scripts/whitespace.pl b/scripts/whitespace.pl
index 6cd8081..9ed9bf4 100755
--- a/scripts/whitespace.pl
+++ b/scripts/whitespace.pl
@@ -38,6 +38,44 @@ $source =~ s/^(#(?:if |)define.*)((?:\\\n.*){4})\n +([^*].*)$/$1$2\n\t$3/mg;
 $source =~ s/^(#(?:if |)define.*)((?:\\\n.*){5})\n +([^*].*)$/$1$2\n\t$3/mg;
 # don't put line break before the last single term argument of a calculation
 $source =~ s/(?:\G|^)(.*[+-])\n\s*(\S*\;)$/$1 $2/mg;
+
+sub indent_ctor_init_lists {
+    my($content) = @_;
+
+    my @not_ctor_words = qw(
+    \bdo\b
+    \belse\b
+    \bfor\b
+    \bif\b
+    \bsizeof\b
+    \bswitch\b
+    \bwhile\b
+    \btr\b
+    \bconnect\b
+    );
+
+    my $regexStr = "(" . join("|", @not_ctor_words) . ")";
+    my $not_ctor_regex = qr{$regexStr};
+
+    my $result = "";
+
+    for ( split(/\n/, $content) ) {
+
+        if ($_ =~ $not_ctor_regex) {
+            # probably not a ctor line. leave it be.
+            $result .= $_ . "\n";
+        }
+        else {
+            $_ =~ s/^\s*(\w*\(.*\),?)$/\t$1/mg;
+            $result .= $_ . "\n";
+        }
+    }
+
+    return $result;
+}
+
+$source = indent_ctor_init_lists($source);
+
 $quotedinput = $input;
 $quotedinput =~ s|/|\\/|g;
 open (DIFF, "| diff -u $input - | sed -e 's/--- $quotedinput/--- $quotedinput.old/' | sed -e 's/+++ -/+++ $quotedinput/'");
-- 
2.5.0



More information about the subsurface mailing list