Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751772AbbEJRXz (ORCPT ); Sun, 10 May 2015 13:23:55 -0400 Received: from hofr.at ([212.69.189.236]:60330 "EHLO mail.hofr.at" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751479AbbEJRXw (ORCPT ); Sun, 10 May 2015 13:23:52 -0400 Date: Sun, 10 May 2015 19:23:50 +0200 From: Nicholas Mc Guire To: Joe Perches Cc: Nicholas Mc Guire , Andy Whitcroft , linux-kernel@vger.kernel.org Subject: Re: [PATCH RFC V2] checkpatch: flag split arithmetic operations with CHECK Message-ID: <20150510172350.GA6012@opentech.at> References: <1431257186-18013-1-git-send-email-hofrat@osadl.org> <1431276724.29257.20.camel@perches.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1431276724.29257.20.camel@perches.com> User-Agent: Mutt/1.5.18 (2008-05-17) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 4898 Lines: 132 On Sun, 10 May 2015, Joe Perches wrote: > On Sun, 2015-05-10 at 13:26 +0200, Nicholas Mc Guire wrote: > > Simple arithmetic operations should be on one line, if they can be fit, > > rather than splitting at the operator. As this is not in the CodingStyle it > > is limited to --strict use of checkpatch.pl and emits a CHECK only. > > The "if they can fit" is an important consideration > not addressed by this patch. > Still playing with that but differenciating thos that would trivailly fit by folding lines (line1 offset + line 1 content + 2 content < 80) and those that should be partially rearanged like: simple folding case: func(var1 + var2) -> func(var1 + var2) < 80 char rearange case: func(..., var1 + var2, ...) -> func(..., var1 + var2, ...) are hard to pick appart (atleast I did not come up with a resonable solution) - so that is not yet working (forgot that in the posted TODO list) > > This extension should flag such lines as CHECK only, as this is not > > mandated by the CodingStyle and in some cases they seem justified > > (e.g. kernel/sched/fair.c:760 and a few other examples in that file) > > > TODO: Move to "# Check operator spacing" section as Joe Perches > > requested - simply got completely lost in that section... > > Also not clear if it really is the right place to put it - > > spacing issues and split operators are two quite different > > problems. > > Question: There are many (518) "lines over 80 char" warnings but that > > seems to be accepted in checkpatch.pl - should those be > > wrapped ? > > perl is not c > > Regexs are often quite long so I think trying to > do 80 column wrapping is something that would make > checkpatch even less readable. > ok - just wanted to make sure since checkpatch reported 8 warnings for the patch I sent out - thanks for the clarification.... and anything that prevents checkpatch.ol from getting less readable is absolutely justified... > > diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl > [] > > @@ -2577,6 +2577,58 @@ sub process { > > "Logical continuations should be on the previous line\n" . $hereprev); > > } > > > > +# check for + or - at the end of a line but ignore --/++ > > + if (!($rawline =~ /^\+.*(\+\+|--).*$/) && > > + $rawline =~ /^\+.*(\+|-)$/) { > > + my $opline = $line; $opline =~ s/^./ /; > > + my ($curr_values, $types) = annotate_values($opline . "\n", $prev_values); > > + # its type and the end 'B' -> binary * -> fuss > > + if($types =~ m/^.*B$/) { > > + CHK("ARITHMETIC_CONTINUATIONS", > > + "Arithmetic expressions should be on one line\n" . $hereprev); > > This message is unclear. > > Arithmetic should not be on one line as that conflicts > with line length limits. > > This test is similar to the logical operator continuation > test at line 2574. > > Maybe the message would be clearer with > "Arithmetic operator should be on the previous line\n" > for the case of (operand op)* being too long that would fit but I guess the goal would primarily be to flag arithmetic expression that would actually fit if rearanged - in wich case it makes no difference to which line you move it. fund(param1, var1 - var2 * var3, ... would be fine probably - and in this sense the arithmetic expression is prefereablly on one line. "Arithmetic operator are preferably placed on one line\n" any better (for the expression < 80 char case) ? > But more globally, maybe this style and message should > be used for many different operators: > > o multiplicative (*, /, %) > o additive (+, -) > o bitwise shift (<<, >>) > o relational (<, >, <=, >=) > o equality (==, !=) > o bitwise (&, ^, |) > o logical (&&, ||) > o assignment (=, *=, /=, %=, +=, -=, <<=, >>=, &=, ^=, |=) > > That's a rather bigger change though and would > be better done with more discussion first. > yup - and in that case it might be better if its not a newbe that takes on the task - even if it is enjoyable to some extent. An though the patch looks simple it was quite painful and some parts are actually not clean (like the way I filtered out the op type). So for any such generalization it probably needs a generic operator type function (some refined version of annotate_values()) and some additional positional checking to not report cases that won't fit no mater what line they are pushed to - so some classifier of the length of (operand operator) sequence as a whole allowing to adjust the message then for the different cases. thx! hofrat -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/