root/tests/usr.bin/indent/opt_eei.c
/* $NetBSD: opt_eei.c,v 1.15 2023/06/15 09:19:07 rillig Exp $ */

/*
 * Tests for the options '-eei' and '-neei'.
 *
 * The option '-eei' enables extra indentation on continuation lines of the
 * expression part of 'if' and 'while' statements. These continuation lines
 * are indented one extra level to avoid being confused for the first
 * statement of the body, even if the condition line starts with an operator
 * such as '&&' or '<' that could not start a statement.
 *
 * The option '-neei' indents these conditions in the same way as all other
 * continued statements.
 */

//indent input
{
        if (a <
b)
                stmt();
        if (a
<
b)
                stmt();
        while (a
< b)
                stmt();
        switch (
                a)
                stmt();
}
//indent end

/*
 * By default, continuation lines are aligned on parentheses, and only a
 * multi-line switch statement would have ambiguous indentation.
 */
//indent run
{
        if (a <
            b)
                stmt();
        if (a
            <
            b)
                stmt();
        while (a
               < b)
                stmt();
        switch (
                a)
                stmt();
}
//indent end

//indent run-equals-prev-output -neei

/*
 * For indentation 8, the only expression that needs to be disambiguated is
 * the one from the switch statement.
 */
//indent run -eei
{
        if (a <
            b)
                stmt();
        if (a
            <
            b)
                stmt();
        while (a
               < b)
                stmt();
        switch (
                        a)
                stmt();
}
//indent end

/* For indentation 4, the expressions from the 'if' are ambiguous. */
//indent run -neei -i4
{
    if (a <
        b)
        stmt();
    if (a
        <
        b)
        stmt();
    while (a
           < b)
        stmt();
    switch (
            a)
        stmt();
}
//indent end

//indent run -eei -i4
{
    if (a <
            b)
        stmt();
    if (a
            <
            b)
        stmt();
    while (a
           < b)
        stmt();
    switch (
/* $ XXX: No extra indentation necessary. */
            a)
        stmt();
}
//indent end

/*
 * The -nlp option uses a fixed indentation for continuation lines. The if
 * statements are disambiguated.
 */
//indent run -eei -i4 -nlp
{
    if (a <
            b)
        stmt();
    if (a
            <
            b)
        stmt();
    while (a
            < b)
        stmt();
    switch (
            a)
        stmt();
}
//indent end

/* With a continuation indentation of 2, there is no ambiguity at all. */
//indent run -eei -i6 -ci2 -nlp
{
      if (a <
        b)
            stmt();
      if (a
        <
        b)
            stmt();
      while (a
        < b)
            stmt();
      switch (
        a)
            stmt();
}
//indent end


/*
 * Ensure that after a condition with extra indentation, the following
 * statements are not affected.
 */
//indent input
{
        if (
                cond
        )
                stmt(
                        arg
                );
}
//indent end

//indent run -eei -nlp -i4
{
    if (
            cond
        )
        stmt(
            arg
            );
}
//indent end


/*
 * When multi-line expressions are aligned on the parentheses, they may have an
 * ambiguous indentation as well.
 */
//indent input
{
        if (fun(
                1,
                2,
                3))
                stmt;
}
//indent end

//indent run-equals-input

//indent run -eei
{
        if (fun(
                        1,
                        2,
                        3))
                stmt;
}
//indent end


//indent input
{
        if (((
                3
        )))
                stmt;
        if ((((
                4
        ))))
                stmt;
}
//indent end

//indent run -ci2 -nlp -eei
{
        if (((
              3
            )))
                stmt;
        if ((((
                  4
              ))))
                stmt;
}
//indent end