From: Josh Triplett <josh@joshtriplett.org>
To: Joe Perches <joe@perches.com>
Cc: Andy Whitcroft <apw@canonical.com>,
gregkh@linux-foundation.org, akpm@linux-foundation.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH] scripts/checkpatch.pl: Only emit LONG_LINE for --strict
Date: Wed, 25 Jun 2014 22:08:24 -0700 [thread overview]
Message-ID: <20140626050824.GB1645@thin> (raw)
In-Reply-To: <1403756211.7977.22.camel@joe-AO725>
On Wed, Jun 25, 2014 at 09:16:51PM -0700, Joe Perches wrote:
> On Wed, 2014-06-25 at 20:44 -0700, Josh Triplett wrote:
> > On Wed, Jun 25, 2014 at 07:33:03PM -0700, Joe Perches wrote:
> > > On Wed, 2014-06-25 at 19:24 -0700, Josh Triplett wrote:
> > > > On Wed, Jun 25, 2014 at 05:05:07PM -0700, Joe Perches wrote:
> > > > > On Wed, 2014-06-25 at 08:46 -0700, Josh Triplett wrote:
> > > > > > Regardless of the long-standing debate over line width, checkpatch
> > > > > > should not warn about it by default.
> > > > >
> > > > > I'm not getting involved here.
> > > > > I don't care much one way or another.
> > > []
> > > > I'm not asking you to get involved in the Great Line Length Debate;
> > > > that's why I didn't attempt to patch CodingStyle or similar. However, I
> > > > think it makes sense for *checkpatch* to stop emitting this warning.
> > >
> > > I think checkpatch should encourage people to write code in
> > > a style that matches CodingStyle as well as the predominant
> > > styles used in the rest of the kernel.
> >
> > Not arguing with that, but in this particular case the warning seems
> > counterproductive to that goal, especially compared to the
> > DEEP_INDENTATION warning. More subjective or "to taste" issues tend
> > to have lower severity in checkpatch. And CodingStyle *already* says
> > "unless exceeding 80 columns significantly increases
> > readability"
>
> Just some suggestions off the top of my head.
>
> If the goal is to reduce long line lengths, then maybe
> more warnings or --strict tests for things like:
The goal is to make code more readable; a length guideline can help with
that, but a hard limit does more harm than good. And notably, we don't
*have* a hard limit, we have a guideline; however, checkpatch routinely
gets treated as a hard requirement rather than a guideline, and as such
it should avoid tests that have a high false-positive rate, which
LONG_LINE does.
> long variable names: (pick a length)
>
> some_long_variable_name_with_a_color
To avoid encouraging people to disemvowel their variables. I'd suggest
flagging identifiers_with_too_many_words or IdentifiersWithTooManyWords
instead.
> consecutive dereferences where a temporary might be better:
>
> foo->bar[baz].member1 = 1;
> foo->bar[baz].member2 = 2;
That one seems better done with coccinelle, actually.
> Multiple logical tests on a single line:
>
> foo > bar && baz < quz && etc...
If any individual test takes up a significant number of columns, sure.
> Arguments after column 80
> 1
> 1 2 3 4 5 6 7 8 9 0
> 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
> result = some_long_function(some_arg(arg1, arg2), another_arg(arg3, arg4), 4);
>
> where a single argument of a short length before a
> statement terminating ; may be ignored, but a longer
> argument list may not.
That one seems like one of the most common cases where the 80-column
rule can result in less readable code. On the one hand, in the case
above, something like this would usually (but not always) improve the
code:
result = some_long_function(
some_arg(arg1, arg2),
another_arg(arg1, arg2),
4);
On the other hand, breaking within the arguments of some_arg or
another_arg seems completely and utterly wrong, and breaking around a
binary operator within the argument list would likewise make it painful
to read. I've seen things like that in numerous patches. where a single
expression that would only take ~100ish characters gets broken across
half a dozen lines because it starts with a few tabs worth of
indentation and has moderate-length (but completely reasonable) names:
result = sensible_function_name(
sensible_variable_name,
something(smallish)
+ something_else,
variable_name
& ~SOME_BIT_NAME);
That seems far more readable if written as
result = sensible_function_name(
sensible_variable_name,
something(smallish) + something_else,
variable_name & ~SOME_BIT_NAME);
even though the last two lines extend past 80 characters.
Now, arguably the four leading tabs on those lines suggest the need for
some code refactoring; personally, I'd suggest changing DEEP_INDENTATION
to flag 4+ tabs rather than 6+ tabs as it currently does. That would
mirror CodingStyle, which says "The answer to that is that if you need
more than 3 levels of indentation, you're screwed anyway, and should fix
your program." To avoid flagging too much existing code that has >4
levels of indentation but short, simple code, I'd suggest specifically
matching lines that have >4 tabs *and* >80 columns, and flagging the
indentation as the cause of the problem rather than the >80 columns.
I'm going to try sending a patch that keeps the existing 80-column
warning, but changes the message and guidance based on the content of
the line.
> Long trigraphs:
>
> should be on multiple lines
"trigraphs"? Do you mean ternaries? Yeah, that's a good case where if
the three components of the ternary together are too long, that's a
natural splitting point that shouldn't make the code less readable.
> Comments beyond 80 column
Yeah, that one makes sense: if you have a comment to the right of a long
line, and the comment is what's making it long, it's easy enough to move
the comment before the line.
- Josh Triplett
next prev parent reply other threads:[~2014-06-26 5:08 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-06-25 15:46 [PATCH] scripts/checkpatch.pl: Only emit LONG_LINE for --strict Josh Triplett
2014-06-26 0:05 ` Joe Perches
2014-06-26 2:24 ` Josh Triplett
2014-06-26 2:33 ` Joe Perches
2014-06-26 3:44 ` Josh Triplett
2014-06-26 4:16 ` Joe Perches
2014-06-26 5:08 ` Josh Triplett [this message]
2014-06-26 5:29 ` Joe Perches
2014-06-26 5:49 ` Josh Triplett
2014-06-26 3:59 ` Greg KH
2014-06-26 4:43 ` Josh Triplett
2014-06-26 6:52 ` Christoph Hellwig
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=20140626050824.GB1645@thin \
--to=josh@joshtriplett.org \
--cc=akpm@linux-foundation.org \
--cc=apw@canonical.com \
--cc=gregkh@linux-foundation.org \
--cc=joe@perches.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.