Module Name:    src
Committed By:   rillig
Date:           Mon May 15 12:11:07 UTC 2023

Modified Files:
        src/tests/usr.bin/indent: opt_eei.c

Log Message:
tests/indent: test extra indentation with fixed continuation indentation


To generate a diff of this commit:
cvs rdiff -u -r1.8 -r1.9 src/tests/usr.bin/indent/opt_eei.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/tests/usr.bin/indent/opt_eei.c
diff -u src/tests/usr.bin/indent/opt_eei.c:1.8 src/tests/usr.bin/indent/opt_eei.c:1.9
--- src/tests/usr.bin/indent/opt_eei.c:1.8	Sun Apr 24 09:04:12 2022
+++ src/tests/usr.bin/indent/opt_eei.c	Mon May 15 12:11:07 2023
@@ -1,156 +1,167 @@
-/* $NetBSD: opt_eei.c,v 1.8 2022/04/24 09:04:12 rillig Exp $ */
+/* $NetBSD: opt_eei.c,v 1.9 2023/05/15 12:11:07 rillig Exp $ */
 
 /*
  * Tests for the options '-eei' and '-neei'.
  *
  * The option '-eei' enables extra indentation on continuation lines of the
  * expression part of 'if' and 'while' statements. These continuation lines
- * are indented one extra level.
+ * are indented one extra level to avoid being confused for the first
+ * statement of the body, even if the condition line starts with an operator
+ * such as '&&' or '<' that could not start a statement.
  *
  * The option '-neei' indents these conditions in the same way as all other
  * continued statements.
  */
 
 //indent input
-bool
-less(int a, int b)
+{
+	if (a <
+b)
+		stmt();
+	if (a
+<
+b)
+		stmt();
+	while (a
+< b)
+		stmt();
+	switch (
+		a)
+		stmt();
+}
+//indent end
+
+/*
+ * By default, continuation lines are aligned on parentheses, and only a
+ * multi-line switch statement would have ambiguous indentation.
+ */
+//indent run
 {
 	if (a <
 	    b)
-		return true;
+		stmt();
 	if (a
 	    <
 	    b)
-		return true;
+		stmt();
+	while (a
+	       < b)
+		stmt();
+	switch (
+		a)
+		stmt();
 }
 //indent end
 
+//indent run-equals-prev-output -neei
+
+/*
+ * For indentation 8, the only expression that needs to be disambiguated is
+ * the one from the switch statement.
+ */
 //indent run -eei
-bool
-less(int a, int b)
 {
 	if (a <
+/* $ XXX: No extra indentation necessary. */
 			b)
-		return true;
+		stmt();
 	if (a
+/* $ XXX: No extra indentation necessary. */
 			<
+/* $ XXX: No extra indentation necessary. */
 			b)
-		return true;
+		stmt();
+	while (a
+/* $ XXX: No extra indentation necessary. */
+			< b)
+		stmt();
+	switch (
+			a)
+		stmt();
 }
 //indent end
 
-//indent run-equals-input -neei
-
-/*
- * When a single indentation level is the same as the continuation
- * indentation, the code does not clearly show whether the 'b' belongs to the
- * condition or the body statement.
- */
+/* For indentation 4, the expressions from the 'if' are ambiguous. */
 //indent run -neei -i4
-bool
-less(int a, int b)
 {
     if (a <
 	b)
-	return true;
+	stmt();
     if (a
 	<
 	b)
-	return true;
+	stmt();
+    while (a
+	   < b)
+	stmt();
+    switch (
+	    a)
+	stmt();
 }
 //indent end
 
-/*
- * Adding the extra level of indentation is useful when the standard
- * indentation is the same as the indentation of statement continuations. In
- * such a case, the continued condition would have the same indentation as the
- * following statement, which would be confusing.
- */
 //indent run -eei -i4
-bool
-less(int a, int b)
 {
     if (a <
 	    b)
-	return true;
+	stmt();
     if (a
 	    <
 	    b)
-	return true;
+	stmt();
+    while (a
+/* $ XXX: No extra indentation necessary. */
+	    < b)
+	stmt();
+    switch (
+/* $ XXX: No extra indentation necessary. */
+	    a)
+	stmt();
 }
 //indent end
 
 /*
- * With an indentation size of 4, the width of the code 'if (' is exactly one
- * indentation level. With the option '-nlp', the option '-eei' has no effect.
- *
- * XXX: This is unexpected since this creates the exact ambiguity that the
- * option '-eei' is supposed to prevent.
+ * The -nlp option uses a fixed indentation for continuation lines. The if
+ * statements are disambiguated.
  */
 //indent run -eei -i4 -nlp
-bool
-less(int a, int b)
 {
     if (a <
+/* $ FIXME: Needs extra indentation. */
 	b)
-	return true;
+	stmt();
     if (a
+/* $ FIXME: Needs extra indentation. */
 	<
+/* $ FIXME: Needs extra indentation. */
 	b)
-	return true;
-}
-//indent end
-
-
-/*
- * The option '-eei' applies no matter whether the continued expression starts
- * with a word or an operator like '&&'. The latter cannot start a statement,
- * so there would be no ambiguity.
- */
-//indent input
-{
-	if (a
-&& b)
-	    stmt();
-}
-//indent end
-
-/*
- * XXX: The extra indentation is unnecessary since there is no possible
- * confusion: the standard indentation is 8, the indentation of the continued
- * condition could have stayed at 4.
- */
-//indent run -eei
-{
-	if (a
-			&& b)
-		stmt();
-}
-//indent end
-
-/*
- * The extra indentation is necessary here since otherwise the '&&' and the
- * 'stmt()' would start at the same indentation.
- */
-//indent run -eei -i4
-{
-    if (a
-	    && b)
+	stmt();
+    while (a
+/* $ FIXME: Needs extra indentation. */
+	< b)
+	stmt();
+    switch (
+/* $ FIXME: Needs extra indentation. */
+	a)
 	stmt();
 }
 //indent end
 
-/*
- * With an indentation size of 4, the width of the code 'if (' is exactly one
- * indentation level. With the option '-nlp', the option '-eei' has no effect.
- *
- * XXX: This is unexpected since this creates the exact ambiguity that the
- * option '-eei' is supposed to prevent.
- */
-//indent run -eei -i4 -nlp
+/* With a continuation indentation of 2, there is no ambiguity at all. */
+//indent run -eei -i6 -ci2 -nlp
 {
-    if (a
-	&& b)
-	stmt();
+      if (a <
+	b)
+	    stmt();
+      if (a
+	<
+	b)
+	    stmt();
+      while (a
+	< b)
+	    stmt();
+      switch (
+	a)
+	    stmt();
 }
 //indent end

Reply via email to