Re: [PATCH 1/1] checkpatch: don't fake typedefs with #define

From: Phil Carmody
Date: Mon May 21 2012 - 08:08:09 EST


On 17/05/12 14:24 -0700, ext Joe Perches wrote:
> On Fri, 2012-05-18 at 00:16 +0300, Phil Carmody wrote:
> > On 17/05/12 13:54 -0700, ext Joe Perches wrote:
> > > > +# check for deliberate avoidance of the above anti-typedef rule
> > > > + if ($line =~ /#\s*define\s+$Ident\s+$Type\b/) {
> > > > + WARN("NEW_TYPEDEFS",
> > > > + "do not fake typedefs using #define\n" . $herecurr);
> > > > + }
> > > > +
> > >
> > > I think the false positive rate is pretty high.
> > > I used this and don't see too many I'd remove.
> > >
> > > $ git grep -E "#\s*define\s+\w+\s+(struct|unsigned|char|short|int|long|const)\b"

I hadn't actually run that before, but to be honest, I think
few of them have much justification. Or at least, were that
code to be written today by one of the regular contributors,
it probably wouldn't be written with such a #define. A lot
do go directly against the advice in Documentation/CodingStyle.

> > > Got an example you want this to find?
> >
> > Too many. Alas I can't share them.
>
> Too bad.
>
> If all the defines end in _t maybe you could use
> if ($line =~ /^\+\s*#\s*define\s+\w+_t\s+$Type\b/) {
> etc...
>

Well, certainly structs are the majority of the immediate ones I'd
most like to nail, so how about this:

diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index faea0ec..0db7f84 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -2299,6 +2299,12 @@ sub process {
"do not add new typedefs\n" . $herecurr);
}

+# check for deliberate avoidance of the above anti-typedef rule
+ if ($line =~ /#\s*define\s+$Ident\s+(enum|union|struct)\s+$Ident\b/) {
+ WARN("NEW_TYPEDEFS",
+ "do not fake typedefs using #define\n" . $herecurr);
+ }
+
# * goes on variable not on type
# (char*[ const])
while ($line =~ m{(\($NonptrType(\s*(?:$Modifier\b\s*|\*\s*)+)\))}g) {


--
Phil Carmody
Tel: +372 5697 1161
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/