From: Ramsay Jones <ramsay@ramsayjones.plus.com>
To: Junio C Hamano <gitster@pobox.com>, Jeff King <peff@peff.net>
Cc: Lars Schneider <larsxschneider@gmail.com>,
Git Users <git@vger.kernel.org>,
linux.mdb@gmail.com, Stefan Beller <sbeller@google.com>,
Jonathan Nieder <jrnieder@gmail.com>
Subject: Re: [PATCH v1] travis-ci: override CFLAGS properly, add -Wdeclaration-after-statement
Date: Tue, 9 Feb 2016 20:51:22 +0000 [thread overview]
Message-ID: <56BA514A.8040209@ramsayjones.plus.com> (raw)
In-Reply-To: <xmqqlh6t4vya.fsf@gitster.mtv.corp.google.com>
On 09/02/16 17:47, Junio C Hamano wrote:
> Jeff King <peff@peff.net> writes:
>
>> Perhaps. I'm not sure that people actually use checkpatch.pl for git.
>>
>> Out of curiosity, I tried:
>>
>> mkdir out
>> git format-patch -o out v2.6.0..v2.7.0
>> checkpatch.pl out/*
>>
>> It's rather noisy, and after skimming, I'd say (subjectively) that only
>> a small fraction are actual style issues we try to enforce. So it would
>> certainly need a fair bit of tweaking for regular use, I think.
>>
>> -Peff
>
> FWIW, I use the attached (it assumes a recent kernel checkout at
> certain location and checkpatch-original.pl being a symlink to it)
> occasionally. I found patches from some people are consistently
> clean and suspect they may be running checkpatch themselves.
>
> -- >8 -- Meta/CP (not on 'todo' branch) -- >8 --
> #!/bin/sh
>
> # Run checkpatch on the series
> Meta=$(git rev-parse --show-cdup)Meta
> cp0="$Meta/checkpatch-original.pl"
> cp1="$Meta/checkpatch.pl"
> tmp="/var/tmp/CP.$$"
>
> mkdir "$tmp" || exit
> trap 'rm -fr "$tmp"' 0
>
> if ! test -f "$cp1" ||
> test "$cp0" -nt "$cp1"
> then
> cat "$cp0" >"$cp1" &&
> (cd "$Meta" &&
> patch -p1 <<\EOF
> --- a/checkpatch.pl
> +++ b/checkpatch.pl
> @@ -282,6 +282,8 @@
> Reviewed-by:|
> Reported-by:|
> Suggested-by:|
> + Helped-by:|
> + Mentored-by:|
> To:|
> Cc:
> )};
> @@ -2338,7 +2340,7 @@
>
> # check for new typedefs, only function parameters and sparse annotations
> # make sense.
> - if ($line =~ /\btypedef\s/ &&
> + if (0 && $line =~ /\btypedef\s/ &&
> $line !~ /\btypedef\s+$Type\s*\(\s*\*?$Ident\s*\)\s*\(/ &&
> $line !~ /\btypedef\s+$Type\s+$Ident\s*\(/ &&
> $line !~ /\b$typeTypedefs\b/ &&
> @@ -2607,8 +2609,7 @@
>
> # No spaces for:
> # ->
> - # : when part of a bitfield
> - } elsif ($op eq '->' || $opv eq ':B') {
> + } elsif ($op eq '->') {
> if ($ctx =~ /Wx.|.xW/) {
> ERROR("SPACING",
> "spaces prohibited around that '$op' $at\n" . $hereptr);
>
> EOF
> )
> fi || exit
>
> cat "$@" | git mailsplit -b -o"$tmp" >/dev/null
>
> for mail in "$tmp"/*
> do
> (
> git mailinfo -k "$mail.msg" "$mail.patch" >"$mail.info" <"$mail"
> echo
> cat "$mail.msg"
> printf "%s\n" -- "---"
> cat "$mail.patch"
> ) >"$mail.mbox"
> perl "$Meta/checkpatch.pl" $ignore --no-tree --max-line-length=120 "$mail.mbox" || {
> grep "Subject: " "$mail.info"
> printf "%s\n" -- "------------------------------------------------"
> }
> done
I have used checkpatch on some small (new) projects from a 'style'
target in the makefile. (Checking both *.c and *.h)
If we try something similar on git, (while on current pu branch):
$ git diff
diff --git a/Makefile b/Makefile
index fd80e94..3d6f1d8 100644
--- a/Makefile
+++ b/Makefile
@@ -2247,6 +2247,14 @@ test-%$X: test-%.o GIT-LDFLAGS $(GITLIBS)
check-sha1:: test-sha1$X
./test-sha1.sh
+ST_OBJ = $(patsubst %.o,%.st,$(C_OBJ))
+
+$(ST_OBJ): %.st: %.c GIT-CFLAGS FORCE
+ checkpatch.pl --no-tree --show-types --ignore=NEW_TYPEDEFS -f $<
+
+.PHONY: style $(ST_OBJ)
+style: $(ST_OBJ)
+
SP_OBJ = $(patsubst %.o,%.sp,$(C_OBJ))
$(SP_OBJ): %.sp: %.c GIT-CFLAGS FORCE
$ make -k style >zzz 2>&1
$ grep "^WARNING:" zzz | wc -l
7320
$ grep "^ERROR:" zzz | wc -l
1155
$
To try and summarize a little:
$ grep '^WARNING:' zzz | sort | uniq -c
1 WARNING:AVOID_EXTERNS: externs should be avoided in .c files
18 WARNING:BRACES: braces {} are not necessary for any arm of this statement
82 WARNING:BRACES: braces {} are not necessary for single statement blocks
5 WARNING:CVS_KEYWORD: CVS style keyword markers, these will _not_ be updated
23 WARNING:DEEP_INDENTATION: Too many leading tabs - consider code refactoring
2 WARNING:DEFAULT_NO_BREAK: switch default: should use break
33 WARNING:INDENTED_LABEL: labels should not be indented
539 WARNING:LEADING_SPACE: please, no spaces at the start of a line
1 WARNING:LINE_CONTINUATIONS: Avoid unnecessary line continuations
3422 WARNING:LONG_LINE: line over 80 characters
14 WARNING:MISSING_BREAK: Possible switch case/default not preceeded by break or fallthrough comment
1 WARNING:ONE_SEMICOLON: Statements terminations use 1 semicolon
19 WARNING:PREFER_PRINTF: __printf(string-index, first-to-check) is preferred over __attribute__((format(printf, string-index, first-to-check)))
7 WARNING:QUOTED_WHITESPACE_BEFORE_NEWLINE: unnecessary whitespace before a quoted newline
17 WARNING:RETURN_VOID: void function return statements are not generally useful
4 WARNING:SINGLE_STATEMENT_DO_WHILE_MACRO: Single statement macros should not use a do {} while (0) loop
2 WARNING:SIZEOF_PARENTHESIS: sizeof msg should be sizeof(msg)
1 WARNING:SIZEOF_PARENTHESIS: sizeof opts should be sizeof(opts)
3 WARNING:SIZEOF_PARENTHESIS: sizeof sa should be sizeof(sa)
2 WARNING:SIZEOF_PARENTHESIS: sizeof sin should be sizeof(sin)
1 WARNING:SIZEOF_PARENTHESIS: sizeof timeout_buf should be sizeof(timeout_buf)
15 WARNING:SPACE_BEFORE_TAB: please, no space before tabs
2401 WARNING:SPACING: Missing a blank line after declarations
1 WARNING:SPACING: space prohibited before semicolon
180 WARNING:SPACING: space prohibited between function name and open parenthesis '('
6 WARNING:SPACING: Unnecessary space before function pointer arguments
280 WARNING:SPLIT_STRING: quoted string split across lines
51 WARNING:STATIC_CONST_CHAR_ARRAY: char * array declaration might be better as static const
3 WARNING:STATIC_CONST_CHAR_ARRAY: static char array declaration should probably be static const char
37 WARNING:STATIC_CONST_CHAR_ARRAY: static const char * array should probably be static const char * const
11 WARNING:SUSPECT_CODE_INDENT: suspect code indent for conditional statements (10, 12)
9 WARNING:SUSPECT_CODE_INDENT: suspect code indent for conditional statements (10, 14)
9 WARNING:SUSPECT_CODE_INDENT: suspect code indent for conditional statements (12, 14)
6 WARNING:SUSPECT_CODE_INDENT: suspect code indent for conditional statements (14, 18)
1 WARNING:SUSPECT_CODE_INDENT: suspect code indent for conditional statements (16, 16)
1 WARNING:SUSPECT_CODE_INDENT: suspect code indent for conditional statements (16, 18)
2 WARNING:SUSPECT_CODE_INDENT: suspect code indent for conditional statements (16, 20)
4 WARNING:SUSPECT_CODE_INDENT: suspect code indent for conditional statements (18, 20)
3 WARNING:SUSPECT_CODE_INDENT: suspect code indent for conditional statements (18, 22)
35 WARNING:SUSPECT_CODE_INDENT: suspect code indent for conditional statements (2, 4)
3 WARNING:SUSPECT_CODE_INDENT: suspect code indent for conditional statements (24, 28)
1 WARNING:SUSPECT_CODE_INDENT: suspect code indent for conditional statements (24, 30)
2 WARNING:SUSPECT_CODE_INDENT: suspect code indent for conditional statements (24, 31)
21 WARNING:SUSPECT_CODE_INDENT: suspect code indent for conditional statements (2, 6)
2 WARNING:SUSPECT_CODE_INDENT: suspect code indent for conditional statements (32, 36)
3 WARNING:SUSPECT_CODE_INDENT: suspect code indent for conditional statements (4, 6)
17 WARNING:SUSPECT_CODE_INDENT: suspect code indent for conditional statements (6, 10)
5 WARNING:SUSPECT_CODE_INDENT: suspect code indent for conditional statements (8, 10)
8 WARNING:SUSPECT_CODE_INDENT: suspect code indent for conditional statements (8, 12)
1 WARNING:SUSPECT_CODE_INDENT: suspect code indent for conditional statements (8, 15)
1 WARNING:TRAILING_SEMICOLON: macros should not use a trailing semicolon
4 WARNING:VOLATILE: Use of volatile is usually wrong: see Documentation/volatile-considered-harmful.txt
$
Hmm, I'm a little surprised by 2401 'Missing a blank line after declarations'! ;-)
$ grep '^ERROR:' zzz | sort | uniq -c
181 ERROR:ASSIGN_IN_IF: do not use assignment in if condition
42 ERROR:CODE_INDENT: code indent should use tabs where possible
6 ERROR:COMPLEX_MACRO: Macros with complex values should be enclosed in parenthesis
266 ERROR:ELSE_AFTER_BRACE: else should follow close brace '}'
50 ERROR:INITIALISED_STATIC: do not initialise statics to 0 or NULL
1 ERROR:OPEN_BRACE: open brace '{' following enum go on the same line
37 ERROR:OPEN_BRACE: open brace '{' following function declarations go on the next line
6 ERROR:OPEN_BRACE: open brace '{' following struct go on the same line
1 ERROR:OPEN_BRACE: open brace '{' following union go on the same line
83 ERROR:OPEN_BRACE: that open brace { should be on the previous line
16 ERROR:POINTER_LOCATION: "foo * bar" should be "foo *bar"
10 ERROR:POINTER_LOCATION: "foo* bar" should be "foo *bar"
1 ERROR:POINTER_LOCATION: "foo** bar" should be "foo **bar"
1 ERROR:POINTER_LOCATION: "foo * const * bar" should be "foo * const *bar"
42 ERROR:POINTER_LOCATION: "(foo*)" should be "(foo *)"
10 ERROR:POINTER_LOCATION: "(foo**)" should be "(foo **)"
6 ERROR:RETURN_PARENTHESES: return is not a function, parentheses are not required
2 ERROR:SPACING: need consistent spacing around '-' (ctx:WxV)
1 ERROR:SPACING: need consistent spacing around '*' (ctx:WxV)
25 ERROR:SPACING: need consistent spacing around '+' (ctx:WxV)
5 ERROR:SPACING: space prohibited after that '!' (ctx:BxW)
2 ERROR:SPACING: space prohibited after that '!' (ctx:ExW)
1 ERROR:SPACING: space prohibited after that '~' (ctx:WxW)
1 ERROR:SPACING: space prohibited after that '*' (ctx:WxW)
59 ERROR:SPACING: space prohibited after that open parenthesis '('
2 ERROR:SPACING: space prohibited after that open square bracket '['
36 ERROR:SPACING: space prohibited before that close parenthesis ')'
2 ERROR:SPACING: space required after that close brace '}'
1 ERROR:SPACING: space required after that ';' (ctx:BxV)
1 ERROR:SPACING: space required after that ',' (ctx:OxV)
4 ERROR:SPACING: space required after that ',' (ctx:VxO)
58 ERROR:SPACING: space required after that ',' (ctx:VxV)
1 ERROR:SPACING: space required after that ';' (ctx:WxV)
3 ERROR:SPACING: space required before that '-' (ctx:OxV)
1 ERROR:SPACING: space required before that '&' (ctx:OxV)
1 ERROR:SPACING: space required before that '*' (ctx:VxB)
2 ERROR:SPACING: space required before that '*' (ctx:VxV)
26 ERROR:SPACING: space required before the open parenthesis '('
4 ERROR:SPACING: spaces prohibited around that '->' (ctx:WxW)
1 ERROR:SPACING: spaces required around that '=' (ctx:VxE)
3 ERROR:SPACING: spaces required around that '==' (ctx:VxV)
11 ERROR:SPACING: spaces required around that '=' (ctx:VxV)
4 ERROR:SPACING: spaces required around that '>' (ctx:VxV)
2 ERROR:SPACING: spaces required around that '=' (ctx:VxW)
20 ERROR:SPACING: spaces required around that ':' (ctx:VxW)
1 ERROR:SPACING: spaces required around that '<=' (ctx:WxV)
1 ERROR:SPACING: spaces required around that '!=' (ctx:WxV)
6 ERROR:SWITCH_CASE_INDENT_LEVEL: switch and case should be at the same indent
105 ERROR:TRAILING_STATEMENTS: trailing statements should be on next line
4 ERROR:TRAILING_WHITESPACE: trailing whitespace
$
I don't know if that helps! :-D
ATB,
Ramsay Jones
next prev parent reply other threads:[~2016-02-09 20:51 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-02-08 8:59 [PATCH v1] travis-ci: override CFLAGS properly, add -Wdeclaration-after-statement larsxschneider
2016-02-08 12:25 ` Jeff King
2016-02-09 10:06 ` Lars Schneider
2016-02-09 17:36 ` Jeff King
2016-02-09 17:47 ` Junio C Hamano
2016-02-09 20:51 ` Ramsay Jones [this message]
2016-02-09 18:42 ` Junio C Hamano
2016-02-09 18:46 ` Stefan Beller
2016-02-09 23:03 ` Roberto Tyley
2016-02-09 23:14 ` Junio C Hamano
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=56BA514A.8040209@ramsayjones.plus.com \
--to=ramsay@ramsayjones.plus.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=jrnieder@gmail.com \
--cc=larsxschneider@gmail.com \
--cc=linux.mdb@gmail.com \
--cc=peff@peff.net \
--cc=sbeller@google.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).