git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] Document conventions on static initialization and else cuddling

From
Adam Spiers <git@adamspiers.org>
Date
Sep 19, 2012, 21:14 UTC
Message-ID
<20120919211403.GF19246@atlantic.linksys.moosehall>
In-Reply-To
<7vk3vpg2v1.fsf@alter.siamese.dyndns.org>
On Wed, Sep 19, 2012 at 01:43:46PM -0700, Junio C Hamano wrote:
Show 12 quoted lines
> Adam Spiers <git@adamspiers.org> writes:
> 
> > Signed-off-by: Adam Spiers <git@adamspiers.org>
> > ---
> >
> > I have begun work on fixing existing code to adhere to these
> > guidelines on braces, but there are currently a lot of violations,
> > which means any patches to fix them would be large.  So before I spend
> > any more time on it, I would like to check whether such patches would
> > be welcomed? And if so, should I be doing that on the master branch?
> 
> In general, no.
[snipped]
Show 9 quoted lines
> > I have also added some simple rules such as `check-brace-before-else'
> > to the top-level Makefile which perform appropriate `grep -n' commands
> > to detect violations and for example easily fix them via emacs' M-x
> > grep.  These rules can be invoked together via a `check-style' target.
> > Would this also be welcomed?  If so, should the checks all be
> > introduced in a single commit, or each check along with the code which
> > was fixed with its help?
> 
> I am not enthused, personally.
OK, I'll drop work on these then.
[snipped]
Show 25 quoted lines
> >  Documentation/CodingGuidelines | 42 +++++++++++++++++++++++++++++++++++++-----
> >  1 file changed, 37 insertions(+), 5 deletions(-)
> >
> > diff --git a/Documentation/CodingGuidelines b/Documentation/CodingGuidelines
> > index 57da6aa..1a2851d 100644
> > --- a/Documentation/CodingGuidelines
> > +++ b/Documentation/CodingGuidelines
> > @@ -117,17 +117,49 @@ For C programs:
> >     "char * string".  This makes it easier to understand code
> >     like "char *string, c;".
> >  
> > + - We avoid unnecessary explicit initialization of BSS-allocated vars
> > +   (static and globals) to zero or NULL:
> > +
> > +	static int n;
> > +	static char **ch;
> > +
> > +   rather than:
> > +
> > +	static int n = 0;
> > +	static char **ch = NULL;
> 
> As I said, I am in general not in favor of piling more rules here,
> but we've seen this one in new contribution often enough that it is
> a good addition.

Yes, I am proposing its addition precisely because its current omission resulted in a small but non-negligible amount of both my time and yours being wasted in a recent patch review cycle.

Show 10 quoted lines
> > +
> > +   These are superfluous according to ISO/IEC 9899:1999 (a.k.a. C99);
> > +   see item 10 in section 6.7.8 ("Initialization") of WG14 N1256 for
> > +   the exact text:
> > +
> > +     http://open-std.org/JTC1/SC22/WG14/www/docs/n1256.pdf
> 
> But I do not think this explanation is necessary.  "This is one of
> our house rules" is a sufficient reason people, who want to blindly
> obey guidelines, need to see.

I presume I'm not the only person who wishes to obey guidelines but also understand why they exist. In general, a deeper understanding of the purpose behind guidelines helps improve judgement about when and how to apply them.

Show 20 quoted lines
> >   - We avoid using braces unnecessarily.  I.e.
> >  
> >  	if (bla) {
> >  		x = 1;
> >  	}
> >  
> > -   is frowned upon.  A gray area is when the statement extends
> > -   over a few lines, and/or you have a lengthy comment atop of
> > -   it.  Also, like in the Linux kernel, if there is a long list
> > -   of "else if" statements, it can make sense to add braces to
> > -   single line blocks.
> > +   is frowned upon.  A gray area is when the statement extends
> > +   over a few lines, and/or you have a lengthy comment atop of
> > +   it.  Also, like in the Linux kernel, it can make sense to add
> > +   braces to single line blocks if there are already braces in
> > +   another branch of the same conditional, and/or there is long
> > +   list of "else if" statements.
> 
> Reflowing text without reason is frowned upon as it makes the
> review unnecessary harder by hiding where things have changed.

There was a reason, it just wasn't a particularly good one :-) (emacs reflows by paragraph, so you have to go out of your way to stop it reflowing existing text.)

BTW, for anyone else reading who is confused by the fact that the quoted hunk above shows no signs of reflowing, I think the hunk itself has been re-reflowed back to the original width (presumably deliberately in order to determine what really changed).

Show 13 quoted lines
> You are suggesting to
> 
>         /* Turn this into ... */        /* ... this instead */
>         if (condition)                  if (condition) {
>                 true;                           true;
>         else {                          } else {
>                 otherwise;                      otherwise;
>                 ...                             ...
>         }                               }
> 
> I do not think such an update is wrong per-se, but among different
> shades of gray, the left is probably one of the most minor kind of
> violations.
I was under the impression it was _your_ suggestion ;-)
  http://thread.gmane.org/gmane.comp.version-control.git/204661/focus=204975

Perhaps I read too much into that, since it was concerning the mirror image case (i.e. where the 'else' branch is a single statement and the 'if' branch requires braces), but they seem like stylistically equivalent debates to me.

Thanks for the review, Junio. Based on my responses above, what would you like me to do with the patch (if anything)?

Previous: Junio C Hamano
Message 80 of 80 in “new git check-ignore sub-command”
  1. 0/9 new git check-ignore sub-commandAdam Spiers, Sep 2, 2012
  2. 1/9 Update directory listing API doc to match codeAdam Spiers, Sep 2, 2012
  3. 2/9 Improve documentation and comments regarding directory traversal APIAdam Spiers, Sep 2, 2012
  4. 3/9 Rename cryptic 'which' variable to more consistent nameAdam Spiers, Sep 2, 2012
  5. Junio C HamanoSep 2, 2012
  6. 4/9 Refactor excluded_from_listAdam Spiers, Sep 2, 2012
  7. Nguyen Thai Ngoc DuySep 4, 2012
  8. 5/9 Refactor excluded and path_excludedAdam Spiers, Sep 2, 2012
  9. Nguyen Thai Ngoc DuySep 4, 2012
  10. Junio C HamanoSep 4, 2012
  11. Nguyen Thai Ngoc DuySep 5, 2012
  12. Junio C HamanoSep 6, 2012
  13. Nguyen Thai Ngoc DuySep 6, 2012
  14. Thiago FarinaSep 6, 2012
  15. Nguyen Thai Ngoc DuySep 6, 2012
  16. Adam SpiersSep 6, 2012
  17. Junio C HamanoSep 6, 2012
  18. 6/9 For each exclude pattern, store information about where it came fromAdam Spiers, Sep 2, 2012
  19. Philip OakleySep 2, 2012
  20. Junio C HamanoSep 2, 2012
  21. Philip OakleySep 2, 2012
  22. Adam SpiersSep 6, 2012
  23. 7/9 Extract some useful pathspec handling code from builtin/add.c into a libraryAdam Spiers, Sep 2, 2012
  24. 8/9 Provide free_directory() for reclaiming dir_struct memoryAdam Spiers, Sep 2, 2012
  25. 9/9 Add git-check-ignoresAdam Spiers, Sep 2, 2012
  26. Nguyen Thai Ngoc DuySep 2, 2012
  27. Adam SpiersSep 2, 2012
  28. Junio C HamanoSep 2, 2012
  29. Nguyen Thai Ngoc DuySep 3, 2012
  30. Junio C HamanoSep 2, 2012
  31. Junio C HamanoSep 3, 2012
  32. 00/14 new git check-ignore sub-commandAdam Spiers, Sep 20, 2012
  33. 01/14 Update directory listing API doc to match codeAdam Spiers, Sep 20, 2012
  34. 02/14 Improve documentation and comments regarding directory traversal APIAdam Spiers, Sep 20, 2012
  35. 03/14 Rename cryptic 'which' variable to more consistent nameAdam Spiers, Sep 20, 2012
  36. 04/14 Rename path_excluded() to is_path_excluded()Adam Spiers, Sep 20, 2012
  37. 05/14 Rename excluded_from_list() to is_excluded_from_list()Adam Spiers, Sep 20, 2012
  38. 06/14 Rename excluded() to is_excluded()Adam Spiers, Sep 20, 2012
  39. 07/14 Refactor is_excluded_from_list()Adam Spiers, Sep 20, 2012
  40. 08/14 Refactor is_excluded()Adam Spiers, Sep 20, 2012
  41. 09/14 Refactor is_path_excluded()Adam Spiers, Sep 20, 2012
  42. 10/14 For each exclude pattern, store information about where it came fromAdam Spiers, Sep 20, 2012
  43. Junio C HamanoSep 20, 2012
  44. Adam SpiersDec 26, 2012
  45. 11/14 Refactor treat_gitlinks()Adam Spiers, Sep 20, 2012
  46. 12/14 Extract some useful pathspec handling code from builtin/add.c into a libraryAdam Spiers, Sep 20, 2012
  47. Michael HaggertySep 21, 2012
  48. 13/14 Provide free_directory() for reclaiming dir_struct memoryAdam Spiers, Sep 20, 2012
  49. Michael HaggertySep 21, 2012
  50. Junio C HamanoSep 21, 2012
  51. 14/14 Add git-check-ignore sub-commandAdam Spiers, Sep 20, 2012
  52. Johannes SixtSep 21, 2012
  53. Junio C HamanoSep 25, 2012
  54. Johannes SixtSep 26, 2012
  55. Junio C HamanoSep 26, 2012
  56. Michael HaggertySep 21, 2012
  57. Junio C HamanoSep 21, 2012
  58. Junio C HamanoSep 21, 2012
  59. Junio C HamanoSep 20, 2012
  60. Junio C HamanoSep 20, 2012
  61. Adam SpiersSep 20, 2012
  62. Junio C HamanoSep 21, 2012
  63. Adam SpiersDec 26, 2012
  64. Junio C HamanoSep 21, 2012
  65. compiler checksAdam Spiers, Dec 16, 2012
  66. Junio C HamanoSep 24, 2012
  67. Nguyen Thai Ngoc DuySep 4, 2012
  68. Junio C HamanoSep 4, 2012
  69. Nguyen Thai Ngoc DuySep 5, 2012
  70. Adam SpiersSep 10, 2012
  71. Adam SpiersSep 10, 2012
  72. Nguyen Thai Ngoc DuySep 10, 2012
  73. Junio C HamanoSep 10, 2012
  74. Junio C HamanoSep 2, 2012
  75. Adam SpiersSep 6, 2012
  76. Adam SpiersSep 7, 2012
  77. Junio C HamanoSep 7, 2012
  78. Document conventions on static initialization and else cuddlingAdam Spiers, Sep 19, 2012
  79. Junio C HamanoSep 19, 2012
  80. Adam SpiersSep 19, 2012

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.