From: Joe Perches <joe@perches.com>
To: Phil Carmody <ext-phil.2.carmody@nokia.com>
Cc: linux-kernel@vger.kernel.org, apw@canonical.com
Subject: Re: [PATCH 1/1] checkpatch: don't fake typedefs with #define
Date: Tue, 22 May 2012 09:48:14 -0700 [thread overview]
Message-ID: <1337705294.326.11.camel@joe2Laptop> (raw)
In-Reply-To: <20120522080123.GD25862@pcarmody2.research.nokia.com>
On Tue, 2012-05-22 at 11:01 +0300, Phil Carmody wrote:
> On 21/05/12 09:41 -0700, ext Joe Perches wrote:
> > On Mon, 2012-05-21 at 15:05 +0300, Phil Carmody wrote:
> > > +# check for deliberate avoidance of the above anti-typedef rule
> > > + if ($line =~ /#\s*define\s+$Ident\s+(enum|union|struct)\s+$Ident\b/) {
>
> > I believe this would not catch,
> >
> > #define typedeflike_define_t \
> > struct foo
> >
> > If it's deliberate, you probably want to.
> >
> > So maybe you want to move this and use
> > the $stat tests like the extern or memset
> > tests do (look around line 3200).
>
> Thanks for the pointer. This flags everything I'm interested in:
>
> diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
> index faea0ec..408aee0 100755
> --- a/scripts/checkpatch.pl
> +++ b/scripts/checkpatch.pl
> @@ -3319,6 +3319,13 @@ sub process {
> "externs should be avoided in .c files\n" . $herecurr);
> }
>
> +# check for deliberate avoidance of the anti-typedef rule
> + if (defined $stat &&
> + $stat =~ /#\s*define\s+$Ident\s+(enum|union|struct)\s+$Ident\b/) {
> + WARN("NEW_TYPEDEFS",
> + "do not fake typedefs using #define\n" . $herecurr);
> + }
> +
This doesn't trigger on the example I gave you.
$ cat def_type.c
#define foo struct bar
#define foo \
struct bar
#define foo /* baz */ \
struct bar
#define foo /* baz */ \
\
struct /* baz */ bar
$
It seems for macros the $dstat variable needs to be tested.
Try this:
diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index faea0ec..fc4df52 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -2933,6 +2933,21 @@ sub process {
^\"|\"$
}x;
#print "REST<$rest> dstat<$dstat> ctx<$ctx>\n";
+
+# check for deliberate avoidance of the anti-typedef rule
+ if ($dstat =~ /(enum|union|struct)\s+$Ident\b/) {
+ $ctx =~ s/\n*$//;
+ my $herectx = $here . "\n";
+ my $cnt = statement_rawlines($ctx);
+
+ for (my $n = 0; $n < $cnt; $n++) {
+ $herectx .= raw_line($linenr, $n) . "\n";
+ }
+
+ WARN("NEW_TYPEDEFS",
+ "do not fake typedefs using #define\n" . $herectx);
+ }
+
if ($dstat ne '' &&
$dstat !~ /^(?:$Ident|-?$Constant),$/ && # 10, // foo(),
$dstat !~ /^(?:$Ident|-?$Constant);$/ && # foo();
next prev parent reply other threads:[~2012-05-22 16:48 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-05-17 12:52 [PATCH 1/1] checkpatch: don't fake typedefs with #define Phil Carmody
2012-05-17 20:54 ` Joe Perches
2012-05-17 21:16 ` Phil Carmody
2012-05-17 21:24 ` Joe Perches
2012-05-21 12:05 ` Phil Carmody
2012-05-21 16:41 ` Joe Perches
2012-05-22 8:01 ` Phil Carmody
2012-05-22 16:48 ` Joe Perches [this message]
2012-05-23 1:54 ` Ryan Mallon
2012-05-23 2:02 ` Joe Perches
2012-05-23 2:50 ` Ryan Mallon
2012-05-23 3:25 ` Joe Perches
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1337705294.326.11.camel@joe2Laptop \
--to=joe@perches.com \
--cc=apw@canonical.com \
--cc=ext-phil.2.carmody@nokia.com \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.