On 20-08-01 23:07, Taylor R Campbell wrote:
  | > Module Name:    src
  | > Committed By:   lukem
  | > Date:           Sat Aug  1 02:45:36 UTC 2020
  | > 
  | > Modified Files:
  | >         src/share/misc: style
  | > 
  | > Log Message:
  | > style: prefer braces for single statement control statements
  | > 
  | > Prefer to use { braces } around single statements after
  | > control statements, instead of discouraging them.
  | > 
  | > Per discussion on tech-userlevel & tech-kern, where the significant
  | > majority of developers who responded (including current and former
  | > core members) prefer this new style.
  | 
  | Hmm...that's not the conclusion I got from the thread.  What you proposed
  | (https://mail-index.netbsd.org/tech-userlevel/2020/07/12/msg012536.html),
  | and got consensus on, was:
  | 
  | - discourage braces around single statements
  | + permit braces around single statements
  | 
  | What you committed was:
  | 
  | - discourage braces around single statements
  | + prefer braces around single statements and add braces to all examples
  | 
  | At least two core members (me and kre) preferred the change you
  | originally proposed over the change you committed.
  | 
  | Personally I feel that braces around short statements hurt legibility
  | by adding unnecessary visual clutter, and make it more cumbersome to
  | have consistent patterns like
  | 
  |     if (foo() == -1)
  |             goto fail0;
  |     if ((x = bar()) == -1)
  |             goto fail1;
  |     if (baz() == -1)
  |             goto fail2;
  | 
  | which makes it more tempting to get clever with shortcuts for error
  | branches or with reversing the sense of the branch, and we have too
  | many bugs with clever shortcuts in error branches already.
  | 
  | We don't have a `goto fail' problem in NetBSD -- if we did, our
  | toolchain would detect it with -Werror=misleading-indentation, as I
  | just confirmed experimentally.  (Same goes for macros that expand to
  | multiple statements, with -Werror=multistatement-macros.)
  | 
  | Can you please restore this to the change you originally suggested,
  | along the lines of the attached patch?

  | Index: share/misc/style
  | ===================================================================
  | RCS file: /cvsroot/src/share/misc/style,v
  | retrieving revision 1.56
  | diff -p -p -u -r1.56 style
  | --- share/misc/style        1 Aug 2020 02:45:35 -0000       1.56
  | +++ share/misc/style        1 Aug 2020 22:54:53 -0000
  | @@ -241,9 +241,8 @@ main(int argc, char *argv[])
  |                     errno = 0;
  |                     num = strtol(optarg, &ep, 10);
  |                     if (num <= 0 || *ep != '\0' || (errno == ERANGE &&
  | -                       (num == LONG_MAX || num == LONG_MIN)) ) {
  | +                       (num == LONG_MAX || num == LONG_MIN)) )
  |                             errx(1, "illegal number -- %s", optarg);
  | -                   }
  |                     break;
  |             case '?':
  |             default:
  | @@ -256,16 +255,16 @@ main(int argc, char *argv[])
  |  
  |     /*
  |      * Space after keywords (while, for, return, switch).
  | -    * Braces are preferred for control statements
  | -    * with only a single statement.
  | +    *
  | +    * Braces around single-line bodies are optional; use discretion.
  |      *
  |      * Forever loops are done with for's, not while's.
  |      */
  | -   for (p = buf; *p != '\0'; ++p) {
  | +   for (p = buf; *p != '\0'; ++p)
  |             continue;               /* Explicit no-op */
  | -   }
  |     for (;;) {
  | -           stmt;
  | +           stmt1;
  | +           stmt2;
  |     }
  |  
  |     /*
  | @@ -317,9 +316,8 @@ main(int argc, char *argv[])
  |     }
  |  
  |     /* No spaces after function names. */
  | -   if ((result = function(a1, a2, a3, a4)) == NULL) {
  | +   if ((result = function(a1, a2, a3, a4)) == NULL)
  |             exit(1);
  | -   }
  |  
  |     /*
  |      * Unary operators don't require spaces, binary operators do.
  | @@ -397,12 +395,10 @@ function(int a1, int a2, float fl, int a
  |      *
  |      * Use err/warn(3), don't roll your own!
  |      */
  | -   if ((four = malloc(sizeof(*four))) == NULL) {
  | +   if ((four = malloc(sizeof(*four))) == NULL)
  |             err(1, NULL);
  | -   }
  | -   if ((six = (int *)overflow()) == NULL) {
  | +   if ((six = (int *)overflow()) == NULL)
  |             errx(1, "Number overflowed.");
  | -   }
  |  
  |     /* No parentheses are needed around the return value. */
  |     return eight;
  | @@ -426,9 +422,8 @@ dirinfo(const char *p, struct stat *sb, 
  |     _DIAGASSERT(p != NULL);
  |     _DIAGASSERT(filedesc != -1);
  |  
  | -   if (stat(p, sb) < 0) {
  | +   if (stat(p, sb) < 0)
  |             err(1, "Unable to stat %s", p);
  | -   }
  |  
  |     /*
  |      * To printf quantities that might be larger than "long", include


I've reverted the change.

Bikeshed away.

Reply via email to