root/tests/usr.bin/indent/opt_bc.c
/* $NetBSD: opt_bc.c,v 1.13 2023/06/17 22:09:24 rillig Exp $ */

/*
 * Tests for the options '-bc' and '-nbc'.
 *
 * The option '-bc' forces a newline after each comma in a declaration.
 *
 * The option '-nbc' removes line breaks between declarators.  In most other
 * places, indent preserves line breaks.
 */

//indent input
int a,b,c;
void function_declaration(int a,int b,int c);
int m1,
m2,
m3;
char plain, *pointer;
//indent end

//indent run -bc
int             a,
                b,
                c;
void            function_declaration(int a, int b, int c);
int             m1,
                m2,
                m3;
char            plain,
               *pointer;
//indent end

//indent run -nbc
int             a, b, c;
void            function_declaration(int a, int b, int c);
int             m1, m2, m3;
char            plain, *pointer;
//indent end


//indent input
old_style_definition(a, b, c)
double a,b,c;
{
    return a+b+c;
}
//indent end

//indent run -bc
old_style_definition(a, b, c)
double          a,
                b,
                c;
{
        return a + b + c;
}
//indent end

//indent run -nbc
old_style_definition(a, b, c)
double          a, b, c;
{
        return a + b + c;
}
//indent end


/*
 * Before indent.c 1.311 from 2023-06-02, indent formatted the two '#if'
 * branches differently and merged the 'b, c' with the preceding preprocessing
 * line.
 */
//indent input
int a,
#if 0
b, c; int d;
#else
b, c; int d;
#endif
//indent end

//indent run -bc
int             a,
#if 0
                b,
                c;
int             d;
#else
                b,
                c;
int             d;
#endif
//indent end

//indent run -nbc
int             a,
#if 0
                b, c;
int             d;
#else
                b, c;
int             d;
#endif
//indent end


/*
 * Before 2023-06-10, a '(' at the top level started a function definition,
 * leaving variable declaration mode.
 */
//indent input
int a = 1, b = 2;
int a = (1), b = 2;
//indent end

//indent run -bc
int             a = 1,
                b = 2;
int             a = (1),
                b = 2;
//indent end


//indent input
int a,
b,
c;
//indent end

//indent run -nbc -di0
int a, b, c;
//indent end


/*
 * When declarations are too long to fit in a single line, they should not be
 * joined.
 */
//indent input
{
        const struct paren_level *prev = state.prev_ps.paren.item,
            *curr = ps.paren.item;
}
//indent end

//indent run
// $ FIXME: The line becomes too long.
{
        const struct paren_level *prev = state.prev_ps.paren.item, *curr = ps.paren.item;
}
//indent end


/*
 * In struct or union declarations, the declarators are split onto separate
 * lines, just like in ordinary declarations.
 *
 * In enum declarations and in initializers, no line breaks are added or
 * removed.
 */
//indent input
struct triple_struct {
        int a, b, c;
};
union triple_union {
        int a, b, c;
};
enum triple_enum {
        triple_a, triple_b,

        triple_c,
};
//indent end

//indent run -bc
struct triple_struct {
        int             a,
                        b,
                        c;
};
union triple_union {
        int             a,
                        b,
                        c;
};
enum triple_enum {
        triple_a, triple_b,

        triple_c,
};
//indent end

//indent run -nbc
struct triple_struct {
        int             a, b, c;
};
union triple_union {
        int             a, b, c;
};
enum triple_enum {
        triple_a, triple_b,

        triple_c,
};
//indent end