Module Name:    src
Committed By:   rillig
Date:           Mon May 15 10:13:40 UTC 2023

Modified Files:
        src/tests/usr.bin/indent: lsym_question.c
        src/usr.bin/indent: indent.c indent.h

Log Message:
indent: fix indentation of multi-line '?:' expressions in functions


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/tests/usr.bin/indent/lsym_question.c
cvs rdiff -u -r1.273 -r1.274 src/usr.bin/indent/indent.c
cvs rdiff -u -r1.136 -r1.137 src/usr.bin/indent/indent.h

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/lsym_question.c
diff -u src/tests/usr.bin/indent/lsym_question.c:1.4 src/tests/usr.bin/indent/lsym_question.c:1.5
--- src/tests/usr.bin/indent/lsym_question.c:1.4	Sun Apr 24 09:04:12 2022
+++ src/tests/usr.bin/indent/lsym_question.c	Mon May 15 10:13:40 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: lsym_question.c,v 1.4 2022/04/24 09:04:12 rillig Exp $ */
+/* $NetBSD: lsym_question.c,v 1.5 2023/05/15 10:13:40 rillig Exp $ */
 
 /*
  * Tests for the token lsym_question, which represents the '?' in a '?:'
@@ -56,11 +56,18 @@ void
 function(void)
 {
 	const char *branch = cond
-	// $ TODO: Indent these continuation lines as they are part of the
-	// $ TODO: initializer expression, not of the declarator part to the
-	// $ TODO: left of the '='.
-	? "then"
-	: "else";
+		? "then"
+		: "else";
+
+	const char *multiple_branches = cond1
+		? "then 1"
+		: cond2
+		? "then 2"
+		: "else";
+
+	const char *condensed = cond1 ? "condensed 1"
+		: cond2 ? "condensed 2"
+		: "condensed else";
 }
 //indent end
 

Index: src/usr.bin/indent/indent.c
diff -u src/usr.bin/indent/indent.c:1.273 src/usr.bin/indent/indent.c:1.274
--- src/usr.bin/indent/indent.c:1.273	Mon May 15 09:22:53 2023
+++ src/usr.bin/indent/indent.c	Mon May 15 10:13:40 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: indent.c,v 1.273 2023/05/15 09:22:53 rillig Exp $	*/
+/*	$NetBSD: indent.c,v 1.274 2023/05/15 10:13:40 rillig Exp $	*/
 
 /*-
  * SPDX-License-Identifier: BSD-4-Clause
@@ -38,7 +38,7 @@
  */
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: indent.c,v 1.273 2023/05/15 09:22:53 rillig Exp $");
+__RCSID("$NetBSD: indent.c,v 1.274 2023/05/15 10:13:40 rillig Exp $");
 
 #include <sys/param.h>
 #include <err.h>
@@ -532,6 +532,11 @@ static void
 process_question(void)
 {
     ps.quest_level++;
+    if (code.len == 0) {
+	ps.in_stmt_cont = true;
+	ps.in_stmt_or_decl = true;
+	ps.in_decl = false;
+    }
     if (ps.want_blank)
 	buf_add_char(&code, ' ');
     buf_add_char(&code, '?');
@@ -543,6 +548,11 @@ process_colon(void)
 {
     if (ps.quest_level > 0) {	/* part of a '?:' operator */
 	ps.quest_level--;
+	if (code.len == 0) {
+	    ps.in_stmt_cont = true;
+	    ps.in_stmt_or_decl = true;
+	    ps.in_decl = false;
+	}
 	if (ps.want_blank)
 	    buf_add_char(&code, ' ');
 	buf_add_char(&code, ':');

Index: src/usr.bin/indent/indent.h
diff -u src/usr.bin/indent/indent.h:1.136 src/usr.bin/indent/indent.h:1.137
--- src/usr.bin/indent/indent.h:1.136	Mon May 15 09:53:32 2023
+++ src/usr.bin/indent/indent.h	Mon May 15 10:13:40 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: indent.h,v 1.136 2023/05/15 09:53:32 rillig Exp $	*/
+/*	$NetBSD: indent.h,v 1.137 2023/05/15 10:13:40 rillig Exp $	*/
 
 /*-
  * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
@@ -297,9 +297,9 @@ extern struct parser_state {
 				 * currently prepared for output */
     int ind_level_follow;	/* the level to which ind_level should be set
 				 * after the current line is printed */
-    bool in_stmt_cont;		/* whether the next line should have an extra
-				 * indentation level because we are in the
-				 * middle of a statement */
+    bool in_stmt_cont;		/* whether the current line should have an
+				 * extra indentation level because we are in
+				 * the middle of a statement */
     int decl_level;		/* current nesting level for a structure
 				 * declaration or an initializer */
     bool decl_indent_done;	/* whether the indentation for a declaration

Reply via email to