root/tests/usr.bin/indent/opt_ci.c
/* $NetBSD: opt_ci.c,v 1.11 2023/06/10 08:17:04 rillig Exp $ */

/*
 * Tests for the option '-ci', which controls the indentation of continuation
 * lines in statements and declarations, but only inside a function.
 */

/*
 * Top level expressions with and without parentheses.
 */
//indent input
int top_level = 1 +
 2;
int top_level = (1 +
 2 + (
  3));
//indent end

//indent run -ci0
int             top_level = 1 +
2;
int             top_level = (1 +
                             2 + (
                                  3));
//indent end

//indent run-equals-prev-output -ci2

//indent run-equals-prev-output -ci4

//indent run-equals-prev-output -ci8

//indent run -ci0 -nlp
int             top_level = 1 +
2;
int             top_level = (1 +
        2 + (
                3));
//indent end

//indent run -ci2 -nlp
int             top_level = 1 +
2;
int             top_level = (1 +
  2 + (
    3));
//indent end

/*
 * Between 2019-04-04 and 2023-06-09, there was a special rule that prevented
 * indentation based on the number of open parentheses, in the case that the
 * continuation indentation is half an indentation level, maybe to prevent that
 * the continuation line has the same indentation as a follow-up statement,
 * such as in 'if' statements. To prevent such ambiguities, see '-eei'.
 */
//indent run -ci4 -nlp
int             top_level = 1 +
2;
int             top_level = (1 +
    2 + (
        3));
//indent end


/*
 * Declarations in functions without parentheses.
 */
//indent input
int
sum(int a, int b)
{
        return a +
         b;
        return first +
         second;
}
//indent end

//indent run -ci0
int
sum(int a, int b)
{
        return a +
                b;
        return first +
                second;
}
//indent end

//indent run -ci2
int
sum(int a, int b)
{
        return a +
          b;
        return first +
          second;
}
//indent end

//indent run -ci4
int
sum(int a, int b)
{
        return a +
            b;
        return first +
            second;
}
//indent end

//indent run -ci8
int
sum(int a, int b)
{
        return a +
                b;
        return first +
                second;
}
//indent end


/*
 * Continued statements with expressions in parentheses.
 */
//indent input
int
sum(int a, int b)
{
        return (a +
        b);
        return (first +
        second + (
        third));
}
//indent end

//indent run -ci0
int
sum(int a, int b)
{
        return (a +
                b);
        return (first +
                second + (
                          third));
}
//indent end

//indent run-equals-prev-output -ci2

//indent run-equals-prev-output -ci4

//indent run-equals-prev-output -ci8

//indent run -ci2 -nlp
int
sum(int a, int b)
{
        return (a +
          b);
        return (first +
          second + (
            third));
}
//indent end

//indent run -ci4 -nlp
int
sum(int a, int b)
{
        return (a +
            b);
        return (first +
            second + (
                third));
}
//indent end

//indent run -ci8 -nlp
int
sum(int a, int b)
{
        return (a +
                b);
        return (first +
                second + (
                        third));
}
//indent end


/*
 * In the default configuration, the indentation level from '-i' is the same
 * as the continuation indentation from '-ci'.  The difference between these
 * becomes visible for structural macros like 'forever' or 'foreach'.
 */
//indent input
#define forever for (;;)
void
function(void)
{
        forever
                stmt();

        forever {
                stmt();
        }
}
//indent end

//indent run-equals-input

/*
 * The difference between the block indentation and the continuation
 * indentation only becomes visible when these two differ.
 */
//indent run -i8 -ci4
#define forever for (;;)
void
function(void)
{
        forever
            stmt();

        forever {
                stmt();
        }
}
//indent end


//indent input
{
        size_t last_word_len = com.len
            - (size_t)(last_blank + 1);
}
//indent end

//indent run-equals-input -ldi0 -ci4