Module Name: src
Committed By: rillig
Date: Sun May 14 11:29:23 UTC 2023
Modified Files:
src/tests/usr.bin/indent: t_errors.sh
src/usr.bin/indent: args.c indent.c indent.h io.c lexi.c
Log Message:
indent: miscellaneous cleanups
To generate a diff of this commit:
cvs rdiff -u -r1.27 -r1.28 src/tests/usr.bin/indent/t_errors.sh
cvs rdiff -u -r1.75 -r1.76 src/usr.bin/indent/args.c
cvs rdiff -u -r1.264 -r1.265 src/usr.bin/indent/indent.c
cvs rdiff -u -r1.128 -r1.129 src/usr.bin/indent/indent.h
cvs rdiff -u -r1.161 -r1.162 src/usr.bin/indent/io.c
cvs rdiff -u -r1.180 -r1.181 src/usr.bin/indent/lexi.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/t_errors.sh
diff -u src/tests/usr.bin/indent/t_errors.sh:1.27 src/tests/usr.bin/indent/t_errors.sh:1.28
--- src/tests/usr.bin/indent/t_errors.sh:1.27 Sat May 13 16:40:18 2023
+++ src/tests/usr.bin/indent/t_errors.sh Sun May 14 11:29:23 2023
@@ -1,5 +1,5 @@
#! /bin/sh
-# $NetBSD: t_errors.sh,v 1.27 2023/05/13 16:40:18 rillig Exp $
+# $NetBSD: t_errors.sh,v 1.28 2023/05/14 11:29:23 rillig Exp $
#
# Copyright (c) 2021 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -181,15 +181,15 @@ atf_test_case 'option_special_missing_pa
option_special_missing_param_body()
{
expect_error \
- 'indent: Command line: ``-cli'\'\'' requires an argument' \
+ 'indent: Command line: option "-cli" requires an argument' \
-cli
expect_error \
- 'indent: Command line: ``-T'\'\'' requires an argument' \
+ 'indent: Command line: option "-T" requires an argument' \
-T
expect_error \
- 'indent: Command line: ``-U'\'\'' requires an argument' \
+ 'indent: Command line: option "-U" requires an argument' \
-U
}
Index: src/usr.bin/indent/args.c
diff -u src/usr.bin/indent/args.c:1.75 src/usr.bin/indent/args.c:1.76
--- src/usr.bin/indent/args.c:1.75 Sat May 13 13:48:54 2023
+++ src/usr.bin/indent/args.c Sun May 14 11:29:23 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: args.c,v 1.75 2023/05/13 13:48:54 rillig Exp $ */
+/* $NetBSD: args.c,v 1.76 2023/05/14 11:29:23 rillig Exp $ */
/*-
* SPDX-License-Identifier: BSD-4-Clause
@@ -43,7 +43,7 @@ static char sccsid[] = "@(#)args.c 8.1 (
#include <sys/cdefs.h>
#if defined(__NetBSD__)
-__RCSID("$NetBSD: args.c,v 1.75 2023/05/13 13:48:54 rillig Exp $");
+__RCSID("$NetBSD: args.c,v 1.76 2023/05/14 11:29:23 rillig Exp $");
#elif defined(__FreeBSD__)
__FBSDID("$FreeBSD: head/usr.bin/indent/args.c 336318 2018-07-15 21:04:21Z pstef $");
#endif
@@ -125,6 +125,7 @@ static const struct pro {
/* "U" is special */
bool_options("ut", use_tabs),
bool_options("v", verbose),
+ /* "-version" is special */
};
@@ -138,7 +139,7 @@ add_typedefs_from_file(const char *fname
fprintf(stderr, "indent: cannot open file %s\n", fname);
exit(1);
}
- while ((fgets(line, BUFSIZ, file)) != NULL) {
+ while ((fgets(line, sizeof(line), file)) != NULL) {
/* Only keep the first word of the line. */
line[strcspn(line, " \t\n\r")] = '\0';
register_typename(line);
@@ -157,7 +158,7 @@ set_special_option(const char *arg, cons
}
if (arg[0] == 'P' || strcmp(arg, "npro") == 0)
- return true;
+ return true; /* see main_load_profiles */
if (strncmp(arg, "cli", 3) == 0) {
arg_end = arg + 3;
@@ -198,7 +199,7 @@ set_special_option(const char *arg, cons
return false;
need_arg:
- errx(1, "%s: ``-%.*s'' requires an argument",
+ errx(1, "%s: option \"-%.*s\" requires an argument",
option_source, (int)(arg_end - arg), arg);
/* NOTREACHED */
}
@@ -277,7 +278,7 @@ load_profile(const char *fname, bool mus
comment_ch = ch == '/' && comment_ch == '*' ? -1 : ch;
} else if (ch_isspace((char)ch)) {
break;
- } else if (n >= array_length(buf) - 5) {
+ } else if (n >= array_length(buf) - 2) {
errx(1, "buffer overflow in %s, starting with '%.10s'",
fname, buf);
} else
Index: src/usr.bin/indent/indent.c
diff -u src/usr.bin/indent/indent.c:1.264 src/usr.bin/indent/indent.c:1.265
--- src/usr.bin/indent/indent.c:1.264 Sat May 13 17:54:34 2023
+++ src/usr.bin/indent/indent.c Sun May 14 11:29:23 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: indent.c,v 1.264 2023/05/13 17:54:34 rillig Exp $ */
+/* $NetBSD: indent.c,v 1.265 2023/05/14 11:29:23 rillig Exp $ */
/*-
* SPDX-License-Identifier: BSD-4-Clause
@@ -43,7 +43,7 @@ static char sccsid[] = "@(#)indent.c 5.1
#include <sys/cdefs.h>
#if defined(__NetBSD__)
-__RCSID("$NetBSD: indent.c,v 1.264 2023/05/13 17:54:34 rillig Exp $");
+__RCSID("$NetBSD: indent.c,v 1.265 2023/05/14 11:29:23 rillig Exp $");
#elif defined(__FreeBSD__)
__FBSDID("$FreeBSD: head/usr.bin/indent/indent.c 340138 2018-11-04 19:24:49Z oshogbo $");
#endif
@@ -330,9 +330,9 @@ main_parse_command_line(int argc, char *
opt.comment_column = 2; /* don't put normal comments before column 2 */
if (opt.block_comment_max_line_length <= 0)
opt.block_comment_max_line_length = opt.max_line_length;
- if (opt.local_decl_indent < 0) /* if not specified by user, set this */
+ if (opt.local_decl_indent < 0)
opt.local_decl_indent = opt.decl_indent;
- if (opt.decl_comment_column <= 0) /* if not specified by user, set this */
+ if (opt.decl_comment_column <= 0)
opt.decl_comment_column = opt.ljust_decl
? (opt.comment_column <= 10 ? 2 : opt.comment_column - 8)
: opt.comment_column;
@@ -355,8 +355,7 @@ main_prepare_parsing(void)
break;
}
- if (ind >= opt.indent_size)
- ps.ind_level = ps.ind_level_follow = ind / opt.indent_size;
+ ps.ind_level = ps.ind_level_follow = ind / opt.indent_size;
}
static void
@@ -443,6 +442,17 @@ stay_in_line:
}
static bool
+is_function_pointer_declaration(void)
+{
+ return token.s[0] == '('
+ && ps.in_decl
+ && !ps.block_init
+ && !ps.decl_indent_done
+ && !ps.is_function_definition
+ && ps.line_start_nparen == 0;
+}
+
+static bool
want_blank_before_lparen(void)
{
if (!ps.want_blank)
@@ -469,10 +479,7 @@ process_lparen_or_lbracket(void)
ps.nparen--;
}
- if (token.s[0] == '(' && ps.in_decl
- && !ps.block_init && !ps.decl_indent_done &&
- !ps.is_function_definition && ps.line_start_nparen == 0) {
- /* function pointer declarations */
+ 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())
@@ -499,7 +506,6 @@ process_lparen_or_lbracket(void)
ps.init_or_struct = false;
}
- /* parenthesized type following sizeof or offsetof is not a cast */
if (ps.prev_token == lsym_offsetof || ps.prev_token == lsym_sizeof)
ps.paren[ps.nparen - 1].no_cast = true;
}
@@ -854,14 +860,6 @@ process_ident(lexer_symbol lsym)
}
static void
-copy_token(void)
-{
- if (ps.want_blank)
- buf_add_char(&code, ' ');
- buf_add_buf(&code, &token);
-}
-
-static void
process_period(void)
{
if (code.e > code.s && code.e[-1] == ',')
@@ -888,11 +886,10 @@ process_comma(void)
if (ps.nparen == 0) {
if (ps.block_init_level <= 0)
ps.block_init = false;
- int varname_len = 8; /* rough estimate for the length of a typical
- * variable name */
+ int typical_varname_length = 8;
if (break_comma && (opt.break_after_comma ||
ind_add(compute_code_indent(), code.s, code.e)
- >= opt.max_line_length - varname_len))
+ >= opt.max_line_length - typical_varname_length))
ps.force_nl = true;
}
}
@@ -903,12 +900,10 @@ read_preprocessing_line(void)
{
enum {
PLAIN, STR, CHR, COMM
- } state;
+ } state = PLAIN;
buf_add_char(&lab, '#');
- state = PLAIN;
-
while (ch_isblank(inp_peek()))
buf_add_char(&lab, inp_next());
@@ -1036,12 +1031,12 @@ main_loop(void)
for (;;) { /* loop until we reach eof */
lexer_symbol lsym = lexi();
- if (lsym == lsym_if && ps.prev_token == lsym_else && opt.else_if)
- ps.force_nl = false;
-
if (lsym == lsym_eof)
return process_eof();
+ if (lsym == lsym_if && ps.prev_token == lsym_else && opt.else_if)
+ ps.force_nl = false;
+
if (lsym == lsym_newline || lsym == lsym_form_feed ||
lsym == lsym_preprocessing)
ps.force_nl = false;
@@ -1153,7 +1148,9 @@ main_loop(void)
case lsym_return:
process_ident(lsym);
copy_token:
- copy_token();
+ if (ps.want_blank)
+ buf_add_char(&code, ' ');
+ buf_add_buf(&code, &token);
if (lsym != lsym_funcname)
ps.want_blank = true;
break;
Index: src/usr.bin/indent/indent.h
diff -u src/usr.bin/indent/indent.h:1.128 src/usr.bin/indent/indent.h:1.129
--- src/usr.bin/indent/indent.h:1.128 Sat May 13 15:34:22 2023
+++ src/usr.bin/indent/indent.h Sun May 14 11:29:23 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: indent.h,v 1.128 2023/05/13 15:34:22 rillig Exp $ */
+/* $NetBSD: indent.h,v 1.129 2023/05/14 11:29:23 rillig Exp $ */
/*-
* SPDX-License-Identifier: BSD-2-Clause-FreeBSD
@@ -188,13 +188,12 @@ extern struct options {
* "for (e; e; e)" should be indented an extra
* tab stop so that they don't conflict with
* the code that follows */
- bool else_if; /* whether else-if pairs should be handled
- * specially */
+ bool else_if; /* whether else-if pairs use the same line */
bool function_brace_split; /* split function declaration and brace onto
* separate lines */
bool format_col1_comments; /* If comments which start in column 1 are to
- * be magically reformatted (just like
- * comments that begin in later columns) */
+ * be reformatted (just like comments that
+ * begin in later columns) */
bool format_block_comments; /* whether comments beginning with '/ * \n'
* are to be reformatted */
bool indent_parameters;
@@ -247,11 +246,26 @@ typedef struct paren_level_props {
* form a type cast */
} paren_level_props;
+/*
+ * The parser state determines the layout of the formatted text.
+ *
+ * In a function body, the number of block braces determines the indentation
+ * of statements and declarations.
+ *
+ * In a statement, the number of parentheses or brackets determines the
+ * indentation of follow-up lines.
+ *
+ * In an expression, the token type determine whether to put spaces around.
+ *
+ * In a source file, the types of line determine the vertical spacing, such as
+ * around preprocessing directives or function bodies, or above block
+ * comments.
+ */
extern struct parser_state {
lexer_symbol prev_token; /* the previous token, but never comment,
* newline or preprocessing line */
bool curr_col_1; /* whether the current token started in column
- * 1 of the unformatted input */
+ * 1 of the original input */
bool next_col_1;
bool next_unary; /* whether the following operator should be
* unary; is used in declarations for '*', as
@@ -263,9 +277,8 @@ extern struct parser_state {
* prefixed by a blank. (Said prefixing is
* ignored in some cases.) */
- bool force_nl; /* when true, the following token goes to the
- * next line, unless it is a '{' and
- * opt.brace_same_line is set. */
+ bool force_nl; /* whether the next token goes to a new
+ * line */
int line_start_nparen; /* the number of parentheses or brackets that
* were already open at the beginning of the
@@ -286,13 +299,12 @@ extern struct parser_state {
int com_ind; /* indentation of the current comment */
bool block_init; /* whether inside a block initialization */
- int block_init_level; /* The level of brace nesting in an
+ int block_init_level; /* the level of brace nesting in an
* initialization */
- bool init_or_struct; /* whether there has been a declarator (e.g.
- * int or char) and no left parenthesis since
- * the last semicolon. When true, a '{' is
- * starting a structure definition or an
- * initialization list */
+ bool init_or_struct; /* whether there has been a type name and no
+ * left parenthesis since the last semicolon.
+ * When true, a '{' starts a structure
+ * definition or an initialization list */
int ind_level; /* the indentation level for the line that is
* currently prepared for output */
@@ -332,10 +344,10 @@ extern struct parser_state {
bool in_stmt_cont; /* whether the next line should have an extra
* indentation level because we are in the
* middle of a statement */
- bool is_case_label; /* 'case' and 'default' labels are indented
- * differently from regular labels */
bool seen_case; /* set to true when we see a 'case', so we
* know what to do with the following colon */
+ bool is_case_label; /* 'case' and 'default' labels are indented
+ * differently from regular labels */
int tos; /* pointer to top of stack */
parser_symbol s_sym[STACKSIZE];
@@ -390,7 +402,7 @@ void inp_skip(void);
char inp_next(void);
lexer_symbol lexi(void);
-void diag(int, const char *, ...)__printflike(2, 3);
+void diag(int, const char *, ...) __printflike(2, 3);
void output_line(void);
void output_line_ff(void);
void inp_read_line(void);
Index: src/usr.bin/indent/io.c
diff -u src/usr.bin/indent/io.c:1.161 src/usr.bin/indent/io.c:1.162
--- src/usr.bin/indent/io.c:1.161 Sat May 13 17:20:41 2023
+++ src/usr.bin/indent/io.c Sun May 14 11:29:23 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: io.c,v 1.161 2023/05/13 17:20:41 rillig Exp $ */
+/* $NetBSD: io.c,v 1.162 2023/05/14 11:29:23 rillig Exp $ */
/*-
* SPDX-License-Identifier: BSD-4-Clause
@@ -43,14 +43,13 @@ static char sccsid[] = "@(#)io.c 8.1 (Be
#include <sys/cdefs.h>
#if defined(__NetBSD__)
-__RCSID("$NetBSD: io.c,v 1.161 2023/05/13 17:20:41 rillig Exp $");
+__RCSID("$NetBSD: io.c,v 1.162 2023/05/14 11:29:23 rillig Exp $");
#elif defined(__FreeBSD__)
__FBSDID("$FreeBSD: head/usr.bin/indent/io.c 334927 2018-06-10 16:44:18Z pstef $");
#endif
#include <assert.h>
#include <stdio.h>
-#include <stdlib.h>
#include <string.h>
#include "indent.h"
@@ -350,19 +349,19 @@ output_line_ff(void)
static int
compute_code_indent_lineup(int base_ind)
{
- int ti = paren_indent;
- int overflow = ind_add(ti, code.s, code.e) - opt.max_line_length;
+ int ind = paren_indent;
+ int overflow = ind_add(ind, code.s, code.e) - opt.max_line_length;
if (overflow < 0)
- return ti;
+ return ind;
if (ind_add(base_ind, code.s, code.e) < opt.max_line_length) {
- ti -= overflow + 2;
- if (ti > base_ind)
- return ti;
+ ind -= overflow + 2;
+ if (ind > base_ind)
+ return ind;
return base_ind;
}
- return ti;
+ return ind;
}
int
Index: src/usr.bin/indent/lexi.c
diff -u src/usr.bin/indent/lexi.c:1.180 src/usr.bin/indent/lexi.c:1.181
--- src/usr.bin/indent/lexi.c:1.180 Sun May 14 11:02:53 2023
+++ src/usr.bin/indent/lexi.c Sun May 14 11:29:23 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: lexi.c,v 1.180 2023/05/14 11:02:53 rillig Exp $ */
+/* $NetBSD: lexi.c,v 1.181 2023/05/14 11:29:23 rillig Exp $ */
/*-
* SPDX-License-Identifier: BSD-4-Clause
@@ -43,7 +43,7 @@ static char sccsid[] = "@(#)lexi.c 8.1 (
#include <sys/cdefs.h>
#if defined(__NetBSD__)
-__RCSID("$NetBSD: lexi.c,v 1.180 2023/05/14 11:02:53 rillig Exp $");
+__RCSID("$NetBSD: lexi.c,v 1.181 2023/05/14 11:29:23 rillig Exp $");
#elif defined(__FreeBSD__)
__FBSDID("$FreeBSD: head/usr.bin/indent/lexi.c 337862 2018-08-15 18:19:45Z pstef $");
#endif
@@ -53,10 +53,7 @@ __FBSDID("$FreeBSD: head/usr.bin/indent/
#include "indent.h"
-/*
- * While inside lexi_alnum, this constant just marks a type, independently of
- * the parentheses level.
- */
+/* In lexi_alnum, this constant marks a type, independent of parentheses. */
#define lsym_type lsym_type_outside_parentheses
/* must be sorted alphabetically, is used in binary search */