Messages in this thread | | | Subject | Re: [PATCH v4 2/2] scripts: checkpatch: check unused parameters for function-like macro | From | Joe Perches <> | Date | Thu, 28 Mar 2024 02:57:35 -0700 |
| |
On Thu, 2024-03-28 at 15:21 +1300, Barry Song wrote: > From: Xining Xu <mac.xxn@outlook.com> > > If function-like macros do not utilize a parameter, it might result in a > build warning. In our coding style guidelines, we advocate for utilizing > static inline functions to replace such macros. This patch verifies > compliance with the new rule. [] > diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl [] > @@ -6109,6 +6109,36 @@ sub process { > WARN("TRAILING_SEMICOLON", > "macros should not use a trailing semicolon\n" . "$herectx"); > } > + > + # match "\s*" rather than "\s+" after the balanced parens, as macro definition with arguments > + # is not required to have whitespace after arguments > + if ($dstat =~ /^\+\s*#\s*define\s+$Ident$balanced_parens\s*(\S+.*)(\/[\/*].*)?/) {
I think '(\/[\/*].*)?' doesn't do what you expect perhaps '(\/[\/\*].*)?' though I don't know why this should be capture group
> + my $params = $1 || "";
> + my $body = $2 || "";
Should never get the || "" as the 2nd capture group is not optional
> + > + # get the individual params > + $params =~ tr/()//d; > + # remove leading and trailing whitespace > + $params =~ s/^\s+|\s+$//g; > + > + $ctx =~ s/\n*$//; > + my $cnt = statement_rawlines($ctx); > + my $herectx = get_stat_here($linenr, $cnt, $here); > + > + if ($params ne "") {
probably unnecessary
> + my @paramList = split /,\s*/, $params;
please use split() with parentheses
> + foreach my $param(@paramList) {
maybe foreach my $param (split(/,/, $params) { $param = trim($param); next if ($param =~ /\.\.\.$/);
> + if ($param =~ /\.\.\.$/) { > + # if the param name ends with "...", skip the check > + next; > + } > + if ($body !~ /\b$param\b/) { > + WARN("UNUSED_PARAM_IN_MACRO", > + "Parameter '$param' is not used in function-like macro\n" . "$herectx"); > + } > + }
It seems this logic is a bit redundant to existing code and might be better added in the block that starts
(line 6026) # check if any macro arguments are reused (ignore '...' and 'type')
as that already does each param in a #define and ignores ... and type
| |