/* $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