Module Name: src Committed By: rillig Date: Fri Jun 16 12:30:45 UTC 2023
Modified Files: src/tests/usr.bin/indent: fmt_decl.c lsym_typedef.c src/usr.bin/indent: indent.c indent.h Log Message: indent: fix indentation and linebreaks in typedef declarations To generate a diff of this commit: cvs rdiff -u -r1.57 -r1.58 src/tests/usr.bin/indent/fmt_decl.c cvs rdiff -u -r1.7 -r1.8 src/tests/usr.bin/indent/lsym_typedef.c cvs rdiff -u -r1.373 -r1.374 src/usr.bin/indent/indent.c cvs rdiff -u -r1.200 -r1.201 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/fmt_decl.c diff -u src/tests/usr.bin/indent/fmt_decl.c:1.57 src/tests/usr.bin/indent/fmt_decl.c:1.58 --- src/tests/usr.bin/indent/fmt_decl.c:1.57 Thu Jun 15 09:19:07 2023 +++ src/tests/usr.bin/indent/fmt_decl.c Fri Jun 16 12:30:45 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: fmt_decl.c,v 1.57 2023/06/15 09:19:07 rillig Exp $ */ +/* $NetBSD: fmt_decl.c,v 1.58 2023/06/16 12:30:45 rillig Exp $ */ /* * Tests for declarations of global variables, external functions, and local @@ -83,7 +83,7 @@ typedef struct Complex { double x; double y; -} Complex; +} Complex; //indent end @@ -606,7 +606,7 @@ ToToken(bool cond) typedef struct OpenDirs { CachedDirList list; HashTable /* of CachedDirListNode */ table; -} OpenDirs; +} OpenDirs; //indent end //indent run-equals-input -THashTable @@ -1041,9 +1041,7 @@ ParseVErrorInternal(FILE *f, bool useVar typedef struct { const char *m_name; -} -// $ FIXME: Remove this line break. -mod_t; +} mod_t; //indent end Index: src/tests/usr.bin/indent/lsym_typedef.c diff -u src/tests/usr.bin/indent/lsym_typedef.c:1.7 src/tests/usr.bin/indent/lsym_typedef.c:1.8 --- src/tests/usr.bin/indent/lsym_typedef.c:1.7 Fri Jun 16 11:58:33 2023 +++ src/tests/usr.bin/indent/lsym_typedef.c Fri Jun 16 12:30:45 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: lsym_typedef.c,v 1.7 2023/06/16 11:58:33 rillig Exp $ */ +/* $NetBSD: lsym_typedef.c,v 1.8 2023/06/16 12:30:45 rillig Exp $ */ /* * Tests for the token lsym_typedef, which represents the keyword 'typedef' @@ -70,14 +70,23 @@ typedef struct { int member; bool bit:1; } typedef_name; + +struct { + int member; + bool bit:1; +} var_name; //indent end -//indent run -di0 +//indent run typedef struct { - int member; -// $ FIXME: No space after the ':' here. - bool bit: 1; -} -// $ FIXME: No linebreak here. -typedef_name; + int member; + bool bit:1; +} typedef_name; + +struct { + int member; + bool bit:1; +} var_name; //indent end + +//indent run-equals-input -di0 Index: src/usr.bin/indent/indent.c diff -u src/usr.bin/indent/indent.c:1.373 src/usr.bin/indent/indent.c:1.374 --- src/usr.bin/indent/indent.c:1.373 Fri Jun 16 11:48:32 2023 +++ src/usr.bin/indent/indent.c Fri Jun 16 12:30:45 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: indent.c,v 1.373 2023/06/16 11:48:32 rillig Exp $ */ +/* $NetBSD: indent.c,v 1.374 2023/06/16 12:30:45 rillig Exp $ */ /*- * SPDX-License-Identifier: BSD-4-Clause @@ -38,7 +38,7 @@ */ #include <sys/cdefs.h> -__RCSID("$NetBSD: indent.c,v 1.373 2023/06/16 11:48:32 rillig Exp $"); +__RCSID("$NetBSD: indent.c,v 1.374 2023/06/16 12:30:45 rillig Exp $"); #include <sys/param.h> #include <err.h> @@ -377,6 +377,7 @@ static bool is_function_pointer_declaration(void) { return ps.in_decl + && !ps.in_typedef_decl && !ps.in_init && !ps.decl_indent_done && !ps.line_has_func_def @@ -870,8 +871,10 @@ process_semicolon(void) { if (out.line_kind == lk_stmt_head) out.line_kind = lk_other; - if (ps.decl_level == 0) + if (ps.decl_level == 0) { ps.in_var_decl = false; + ps.in_typedef_decl = false; + } ps.seen_case = false; /* only needs to be reset on error */ ps.quest_level = 0; /* only needs to be reset on error */ if (ps.prev_lsym == lsym_rparen) @@ -924,7 +927,7 @@ process_type_outside_parentheses(void) } ps.in_var_decl = /* maybe */ true; - ps.in_decl = ps.prev_lsym != lsym_typedef; + ps.in_decl = true; ps.line_has_decl = ps.in_decl; if (ps.decl_level == 0) ps.declaration = decl_begin; @@ -951,7 +954,8 @@ process_word(lexer_symbol lsym) else if (ps.want_blank) buf_add_char(&code, ' '); ps.want_blank = false; - + } else if (ps.in_typedef_decl && ps.decl_level == 0) { + /* Do not indent typedef declarators. */ } else if (!ps.in_init && !ps.decl_indent_done && ps.ind_paren_level == 0) { if (opt.decl_indent == 0 @@ -1020,7 +1024,7 @@ process_lsym(lexer_symbol lsym) case lsym_other_colon: process_other_colon(); break; case lsym_comma: process_comma(); break; case lsym_semicolon: process_semicolon(); break; - case lsym_typedef: goto copy_token; + case lsym_typedef: ps.in_typedef_decl = true; goto copy_token; case lsym_modifier: goto copy_token; case lsym_case: ps.seen_case = true; goto copy_token; case lsym_default: ps.seen_case = true; goto copy_token; Index: src/usr.bin/indent/indent.h diff -u src/usr.bin/indent/indent.h:1.200 src/usr.bin/indent/indent.h:1.201 --- src/usr.bin/indent/indent.h:1.200 Fri Jun 16 11:48:32 2023 +++ src/usr.bin/indent/indent.h Fri Jun 16 12:30:45 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: indent.h,v 1.200 2023/06/16 11:48:32 rillig Exp $ */ +/* $NetBSD: indent.h,v 1.201 2023/06/16 12:30:45 rillig Exp $ */ /*- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD @@ -306,6 +306,7 @@ extern struct parser_state { bool in_stmt_or_decl; /* whether in a statement or a struct * declaration or a plain declaration */ bool in_decl; /* XXX: double-check the exact meaning */ + bool in_typedef_decl; bool in_var_decl; /* starts at a type name or a '){' from a * compound literal; ends at the '(' from a * function definition or a ';' outside '{}';