All of lore.kernel.org
 help / color / mirror / Atom feed
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();



  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.