Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/usr.bin/indent indent: improve type guessing, fix formatting...



details:   https://anonhg.NetBSD.org/src/rev/a5d6565bdacb
branches:  trunk
changeset: 375364:a5d6565bdacb
user:      rillig <rillig%NetBSD.org@localhost>
date:      Mon May 15 18:22:40 2023 +0000

description:
indent: improve type guessing, fix formatting of declarations

diffstat:

 tests/usr.bin/indent/lsym_type_outside_parentheses.c |  12 +++++++-----
 usr.bin/indent/indent.c                              |  19 ++++++++++++++++---
 usr.bin/indent/lexi.c                                |  12 +++++++-----
 3 files changed, 30 insertions(+), 13 deletions(-)

diffs (135 lines):

diff -r b1f08c0a6499 -r a5d6565bdacb tests/usr.bin/indent/lsym_type_outside_parentheses.c
--- a/tests/usr.bin/indent/lsym_type_outside_parentheses.c      Mon May 15 17:51:49 2023 +0000
+++ b/tests/usr.bin/indent/lsym_type_outside_parentheses.c      Mon May 15 18:22:40 2023 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: lsym_type_outside_parentheses.c,v 1.4 2023/05/15 17:51:49 rillig Exp $ */
+/* $NetBSD: lsym_type_outside_parentheses.c,v 1.5 2023/05/15 18:22:40 rillig Exp $ */
 
 /*
  * Tests for the token lsym_type_outside_parentheses, which represents a type
@@ -6,6 +6,7 @@
  * function.
  *
  * See also:
+ *     fmt_decl
  *     lex_ident
  *     lsym_type_in_parentheses
  *     lsym_word
@@ -19,11 +20,12 @@
 //indent input
 t1                    *no_init_ptr;
 t2                    *init_ptr = 0;
-/* $ FIXME: Assume that an identifier after 'const' is a type name. */
-const                  t3 * const_no_init_ptr;
+const t3              *const_no_init_ptr;
 static t4             *static_no_init_ptr;
-/* $ FIXME: Assume that an identifier after 'typedef' is a type name. */
-typedef t5 * typedef_no_init_ptr;
+typedef t5 *typedef_no_init_ptr;
+
+// $ XXX: There's no point aligning the word 'const' with the other names.
+const char            *const names[3];
 //indent end
 
 //indent run-equals-input -di24
diff -r b1f08c0a6499 -r a5d6565bdacb usr.bin/indent/indent.c
--- a/usr.bin/indent/indent.c   Mon May 15 17:51:49 2023 +0000
+++ b/usr.bin/indent/indent.c   Mon May 15 18:22:40 2023 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: indent.c,v 1.279 2023/05/15 14:55:47 rillig Exp $      */
+/*     $NetBSD: indent.c,v 1.280 2023/05/15 18:22:40 rillig Exp $      */
 
 /*-
  * SPDX-License-Identifier: BSD-4-Clause
@@ -38,7 +38,7 @@
  */
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: indent.c,v 1.279 2023/05/15 14:55:47 rillig Exp $");
+__RCSID("$NetBSD: indent.c,v 1.280 2023/05/15 18:22:40 rillig Exp $");
 
 #include <sys/param.h>
 #include <err.h>
@@ -411,6 +411,18 @@ want_blank_before_lparen(void)
     return true;
 }
 
+static bool
+want_blank_before_lbracket(void)
+{
+    if (code.len == 0)
+       return false;
+    if (ps.prev_token == lsym_comma)
+       return true;
+    if (ps.prev_token == lsym_binary_op)
+       return true;
+    return false;
+}
+
 static void
 process_lparen_or_lbracket(void)
 {
@@ -423,7 +435,8 @@ process_lparen_or_lbracket(void)
     if (is_function_pointer_declaration()) {
        code_add_decl_indent(ps.decl_ind, ps.tabs_to_var);
        ps.decl_indent_done = true;
-    } else if (want_blank_before_lparen())
+    } else if (token.st[0] == '('
+           ? want_blank_before_lparen() : want_blank_before_lbracket())
        buf_add_char(&code, ' ');
     ps.want_blank = false;
     buf_add_char(&code, token.st[0]);
diff -r b1f08c0a6499 -r a5d6565bdacb usr.bin/indent/lexi.c
--- a/usr.bin/indent/lexi.c     Mon May 15 17:51:49 2023 +0000
+++ b/usr.bin/indent/lexi.c     Mon May 15 18:22:40 2023 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: lexi.c,v 1.190 2023/05/15 17:28:14 rillig Exp $        */
+/*     $NetBSD: lexi.c,v 1.191 2023/05/15 18:22:40 rillig Exp $        */
 
 /*-
  * SPDX-License-Identifier: BSD-4-Clause
@@ -38,7 +38,7 @@
  */
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: lexi.c,v 1.190 2023/05/15 17:28:14 rillig Exp $");
+__RCSID("$NetBSD: lexi.c,v 1.191 2023/05/15 18:22:40 rillig Exp $");
 
 #include <stdlib.h>
 #include <string.h>
@@ -47,6 +47,7 @@
 
 /* In lexi_alnum, this constant marks a type, independent of parentheses. */
 #define lsym_type lsym_type_outside_parentheses
+#define lsym_type_modifier lsym_storage_class
 
 /* must be sorted alphabetically, is used in binary search */
 static const struct keyword {
@@ -62,7 +63,7 @@ static const struct keyword {
     {"case", lsym_case_label},
     {"char", lsym_type},
     {"complex", lsym_type},
-    {"const", lsym_type},
+    {"const", lsym_type_modifier},
     {"continue", lsym_word},
     {"default", lsym_case_label},
     {"do", lsym_do},
@@ -92,7 +93,7 @@ static const struct keyword {
     {"union", lsym_tag},
     {"unsigned", lsym_type},
     {"void", lsym_type},
-    {"volatile", lsym_type},
+    {"volatile", lsym_type_modifier},
     {"while", lsym_while}
 };
 
@@ -371,7 +372,8 @@ lexi_alnum(void)
     while (ch_isblank(inp_peek()))
        inp_skip();
 
-    ps.next_unary = ps.prev_token == lsym_tag; /* for 'struct s *' */
+    ps.next_unary = ps.prev_token == lsym_tag
+       || ps.prev_token == lsym_typedef;
 
     if (ps.prev_token == lsym_tag && ps.nparen == 0)
        return lsym_type_outside_parentheses;



Home | Main Index | Thread Index | Old Index