Re: [RFC] clang-format: outline the git project's coding style

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On 13/08/17 05:41, Jeff King wrote:
> On Fri, Aug 11, 2017 at 09:39:11PM -0700, Junio C Hamano wrote:
> 
>>> Yeah, I just dug in the archive. The script I ran way back when was
>>> actually clang-format-diff.
>>
>> I am confident with the competence of people around here that we can
>> come up with a reasonable checker for obvious style violations. In
>> the worst case, we could customize and/or tweak checkpatch.pl and
>> start from there.
> 
> I am confident we _can_, too. My question is whether we will. :)
> 
>> Assuming that we can have such a checker, I am more interested in
>> the way how people envision such a checker fits in our workflow to
>> help people.  Earlier Dscho floated an idea to integrate with the
>> GitHub pull requests in a way similar to how Travis and SubmitGit
>> are triggered, and I can sort of see how it may help, but I haven't
>> seen ideas from others.
> 
> Yeah, I agree. I assume most people already run "make test" locally. I'd
> be happy enough if we started with a "make style" that offers style
> suggestions for you to accept. From there we can grow into
> "automatically apply suggestions" and integrating with things like
> submitGit.

As a start, how about something like this:

-- >8 --
$ git diff
diff --git a/Makefile b/Makefile
index 461c845d3..7555def45 100644
--- a/Makefile
+++ b/Makefile
@@ -2440,6 +2440,18 @@ $(SP_OBJ): %.sp: %.c GIT-CFLAGS FORCE
 .PHONY: sparse $(SP_OBJ)
 sparse: $(SP_OBJ)
 
+ST_C = $(patsubst %.o,%.stc,$(C_OBJ))
+ST_H = $(patsubst %.h,%.sth,$(LIB_H))
+
+$(ST_C): %.stc: %.c FORCE
+       checkpatch.pl --no-tree --show-types --ignore=NEW_TYPEDEFS,INLINE -f $<
+
+$(ST_H): %.sth: %.h FORCE
+       checkpatch.pl --no-tree --show-types --ignore=NEW_TYPEDEFS,INLINE -f $<
+
+.PHONY: style $(ST_C) $(ST_H)
+style: $(ST_C) $(ST_H)
+
 check: common-cmds.h
        @if sparse; \
        then \
$ 
-- >8 --

To give it a try:

    $ make git.stc    # just run checkpatch over git.c
    $ make cache.sth  # just run checkpatch over cache.h
    $ make -k style >style.out 2>&1  # yep, large output!

A bit crude, but workable. ;-)

Just FYI, for me:

$ wc -l style.out
144076 style.out
$ 
$ grep '^WARNING' style.out | cut -d: -f1,2 | sort | uniq -c
      2 WARNING:AVOID_EXTERNS
    495 WARNING:BLOCK_COMMENT_STYLE
    127 WARNING:BRACES
    213 WARNING:CONSTANT_COMPARISON
  12584 WARNING:CONST_STRUCT
      5 WARNING:CVS_KEYWORD
     26 WARNING:DEEP_INDENTATION
      2 WARNING:DEFAULT_NO_BREAK
     77 WARNING:EMBEDDED_FUNCTION_NAME
      5 WARNING:ENOSYS
    773 WARNING:FUNCTION_ARGUMENTS
     39 WARNING:INDENTED_LABEL
   2610 WARNING:LEADING_SPACE
      1 WARNING:LINE_CONTINUATIONS
   2680 WARNING:LINE_SPACING
   3975 WARNING:LONG_LINE
    330 WARNING:LONG_LINE_COMMENT
    380 WARNING:LONG_LINE_STRING
      2 WARNING:MACRO_WITH_FLOW_CONTROL
      1 WARNING:MISORDERED_TYPE
     17 WARNING:MISSING_SPACE
      1 WARNING:ONE_SEMICOLON
     77 WARNING:PREFER_PRINTF
      7 WARNING:QUOTED_WHITESPACE_BEFORE_NEWLINE
     10 WARNING:RETURN_VOID
      5 WARNING:SINGLE_STATEMENT_DO_WHILE_MACRO
      6 WARNING:SIZEOF_PARENTHESIS
     61 WARNING:SPACE_BEFORE_TAB
    347 WARNING:SPACING
    322 WARNING:SPLIT_STRING
     87 WARNING:STATIC_CONST_CHAR_ARRAY
      2 WARNING:STORAGE_CLASS
    538 WARNING:SUSPECT_CODE_INDENT
     29 WARNING:SYMBOLIC_PERMS
    279 WARNING:TABSTOP
      9 WARNING:TRAILING_SEMICOLON
      3 WARNING:TYPECAST_INT_CONSTANT
      2 WARNING:UNNECESSARY_BREAK
     56 WARNING:UNNECESSARY_ELSE
    568 WARNING:UNSPECIFIED_INT
      4 WARNING:USE_NEGATIVE_ERRNO
     26 WARNING:VOLATILE
$ 

Hmm, on reflection, it may be a bit too crude! :-D

ATB,
Ramsay Jones




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux