From e666a678bdd0e968f4a60a7da455cbc2938fdd51 Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Wed, 18 Sep 2024 15:28:19 +0200 Subject: [PATCH] checksrc: check for spaces around '?', '>' and '<' Closes #14921 --- scripts/checksrc.pl | 33 +++++++++++++++++++++++++++++++++ tests/data/test1185 | 30 +++++++++++++++++++++++++----- 2 files changed, 58 insertions(+), 5 deletions(-) diff --git a/scripts/checksrc.pl b/scripts/checksrc.pl index 2316268dfd..7889f4ced7 100755 --- a/scripts/checksrc.pl +++ b/scripts/checksrc.pl @@ -81,6 +81,8 @@ my %warnings = ( 'SPACEBEFORELABEL' => 'labels not at the start of the line', 'MULTISPACE' => 'multiple spaces used when not suitable', 'NOSPACEEQUALS' => 'equals sign without preceding space', + 'NOSPACEQ' => 'missing space around ternary question mark operator', + 'NOSPACETHAN' => 'missing space aground less or greater than', 'NOTEQUALSZERO', => 'if/while comparison with != 0', 'ONELINECONDITION' => 'conditional block on the same line as the if()', 'OPENCOMMENT' => 'file ended with a /* comment still "open"', @@ -623,6 +625,37 @@ sub scanfile { "space after open parenthesis"); } + # check spaces before question mark + if($nostr =~ /^(.*)(\w|\)|\]|')\?/i) { + my $m = $1; + my $e = $nostr; + $e =~ s/'?'//g; # ignore these + if($e =~ /^(.*)(\w|\)|')\?/i) { + checkwarn("NOSPACEQ", + $line, length($m)+1, $file, $l, + "missing space before question mark"); + } + } + # check spaces after question mark + if($nostr =~ /^(.*)\?\w/i) { + checkwarn("NOSPACEQ", + $line, length($1)+1, $file, $l, + "missing space after question mark"); + } + + # check spaces before less or greater than + if($nostr =~ /^(.*)(\w|\)|\])[<>]/) { + checkwarn("NOSPACETHAN", + $line, length($1)+1, $file, $l, + "missing space before less or greater than"); + } + # check spaces after less or greater than + if($nostr =~ /^(.*)[^-][<>](\w|\(|\[)/) { + checkwarn("NOSPACETHAN", + $line, length($1)+1, $file, $l, + "missing space after less or greater than"); + } + # check spaces before close parentheses, unless it was a space or a # close parenthesis! if($l =~ /(.*[^\) ]) \)/) { diff --git a/tests/data/test1185 b/tests/data/test1185 index 94c3be10c6..a3ec33d46d 100644 --- a/tests/data/test1185 +++ b/tests/data/test1185 @@ -72,10 +72,12 @@ void startfunc(int a, int b) { int a = sizeof int; int a = snprintf(buffer, sizeof(buffer), "%d", 99); + int moo = hej?wrong:a>b; + int moo2 = wrong2:(a)>(b); if(a) b++; - // CPP comment? + // CPP comment ? /* comment doesn't end @@ -163,11 +165,29 @@ void startfunc(int a, int b) { ./%LOGDIR/code1185.c:53:10: warning: use of snprintf is banned (SNPRINTF) int a = snprintf(buffer, sizeof(buffer), "%d", 99); ^ -./%LOGDIR/code1185.c:55:7: warning: conditional block on the same line (ONELINECONDITION) +./%LOGDIR/code1185.c:54:15: warning: missing space before question mark (NOSPACEQ) + int moo = hej?wrong:a>b; + ^ +./%LOGDIR/code1185.c:54:16: warning: missing space after question mark (NOSPACEQ) + int moo = hej?wrong:a>b; + ^ +./%LOGDIR/code1185.c:54:23: warning: missing space before less or greater than (NOSPACETHAN) + int moo = hej?wrong:a>b; + ^ +./%LOGDIR/code1185.c:54:23: warning: missing space after less or greater than (NOSPACETHAN) + int moo = hej?wrong:a>b; + ^ +./%LOGDIR/code1185.c:55:23: warning: missing space before less or greater than (NOSPACETHAN) + int moo2 = wrong2:(a)>(b); + ^ +./%LOGDIR/code1185.c:55:23: warning: missing space after less or greater than (NOSPACETHAN) + int moo2 = wrong2:(a)>(b); + ^ +./%LOGDIR/code1185.c:57:7: warning: conditional block on the same line (ONELINECONDITION) if(a) b++; ^ -./%LOGDIR/code1185.c:57:2: warning: // comment (CPPCOMMENTS) - // CPP comment? +./%LOGDIR/code1185.c:59:2: warning: // comment (CPPCOMMENTS) + // CPP comment ? ^ ./%LOGDIR/code1185.c:1:1: error: Missing copyright statement (COPYRIGHT) @@ -175,7 +195,7 @@ void startfunc(int a, int b) { ./%LOGDIR/code1185.c:1:1: error: Missing closing comment (OPENCOMMENT) ^ -checksrc: 0 errors and 30 warnings +checksrc: 0 errors and 36 warnings 5 -- 2.47.3