diff options
author | Daniel Stenberg <daniel@haxx.se> | 2023-04-28 18:07:33 +0200 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2023-04-28 23:11:00 +0200 |
commit | 9ce7eee07042605045dcfd02a6f5b38ad5c8a05d (patch) | |
tree | 7a83474325c43f8d34233dae5bad509b2475ce74 /scripts | |
parent | 31303c34e90949847860db82c4768cab1482beda (diff) | |
download | curl-9ce7eee07042605045dcfd02a6f5b38ad5c8a05d.tar.gz |
checksrc: find bad indentation in conditions without open brace
If the previous line starts with if/while/for AND ends with a closed
parenthesis and there's an equal number of open and closed parentheses
on that line, verify that this line is indented $indent more steps, if
not a cpp line.
Also adjust the fall-out from this fix.
Closes #11054
Diffstat (limited to 'scripts')
-rwxr-xr-x | scripts/checksrc.pl | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/scripts/checksrc.pl b/scripts/checksrc.pl index 540b22978..1ec9212a0 100755 --- a/scripts/checksrc.pl +++ b/scripts/checksrc.pl @@ -765,6 +765,32 @@ sub scanfile { } } + # if the previous line starts with if/while/for AND ends with a closed + # parenthesis and there's an equal number of open and closed + # parentheses, check that this line is indented $indent more steps, if + # not a cpp line + elsif(!$prevp && ($prevl =~ /^( *)(if|while|for)(\(.*\))\z/)) { + my $first = length($1); + my $op = $3; + my $cl = $3; + + $op =~ s/[^(]//g; + $cl =~ s/[^)]//g; + + if(length($op) == length($cl)) { + # this line has some character besides spaces + if($l =~ /^( *)[^ ]/) { + my $second = length($1); + my $expect = $first+$indent; + if($expect != $second) { + my $diff = $second - $first; + checkwarn("INDENTATION", $line, length($1), $file, $ol, + "not indented $indent steps (uses $diff)"); + } + } + } + } + # check for 'char * name' if(($l =~ /(^.*(char|int|long|void|CURL|CURLM|CURLMsg|[cC]url_[A-Za-z_]+|struct [a-zA-Z_]+) *(\*+)) (\w+)/) && ($4 !~ /^(const|volatile)$/)) { checkwarn("ASTERISKSPACE", |