Home | History | Annotate | Line # | Download | only in indent
opt_eei.c revision 1.13
      1  1.13  rillig /* $NetBSD: opt_eei.c,v 1.13 2023/06/09 07:54:05 rillig Exp $ */
      2   1.1  rillig 
      3   1.3  rillig /*
      4   1.3  rillig  * Tests for the options '-eei' and '-neei'.
      5   1.3  rillig  *
      6   1.3  rillig  * The option '-eei' enables extra indentation on continuation lines of the
      7   1.3  rillig  * expression part of 'if' and 'while' statements. These continuation lines
      8   1.9  rillig  * are indented one extra level to avoid being confused for the first
      9   1.9  rillig  * statement of the body, even if the condition line starts with an operator
     10   1.9  rillig  * such as '&&' or '<' that could not start a statement.
     11   1.3  rillig  *
     12   1.3  rillig  * The option '-neei' indents these conditions in the same way as all other
     13   1.3  rillig  * continued statements.
     14   1.3  rillig  */
     15   1.3  rillig 
     16   1.8  rillig //indent input
     17   1.9  rillig {
     18   1.9  rillig 	if (a <
     19   1.9  rillig b)
     20   1.9  rillig 		stmt();
     21   1.9  rillig 	if (a
     22   1.9  rillig <
     23   1.9  rillig b)
     24   1.9  rillig 		stmt();
     25   1.9  rillig 	while (a
     26   1.9  rillig < b)
     27   1.9  rillig 		stmt();
     28   1.9  rillig 	switch (
     29   1.9  rillig 		a)
     30   1.9  rillig 		stmt();
     31   1.9  rillig }
     32   1.9  rillig //indent end
     33   1.9  rillig 
     34   1.9  rillig /*
     35   1.9  rillig  * By default, continuation lines are aligned on parentheses, and only a
     36   1.9  rillig  * multi-line switch statement would have ambiguous indentation.
     37   1.9  rillig  */
     38   1.9  rillig //indent run
     39   1.1  rillig {
     40   1.1  rillig 	if (a <
     41   1.1  rillig 	    b)
     42   1.9  rillig 		stmt();
     43   1.1  rillig 	if (a
     44   1.1  rillig 	    <
     45   1.1  rillig 	    b)
     46   1.9  rillig 		stmt();
     47   1.9  rillig 	while (a
     48   1.9  rillig 	       < b)
     49   1.9  rillig 		stmt();
     50   1.9  rillig 	switch (
     51   1.9  rillig 		a)
     52   1.9  rillig 		stmt();
     53   1.1  rillig }
     54   1.8  rillig //indent end
     55   1.1  rillig 
     56   1.9  rillig //indent run-equals-prev-output -neei
     57   1.9  rillig 
     58   1.9  rillig /*
     59   1.9  rillig  * For indentation 8, the only expression that needs to be disambiguated is
     60   1.9  rillig  * the one from the switch statement.
     61   1.9  rillig  */
     62   1.8  rillig //indent run -eei
     63   1.1  rillig {
     64   1.1  rillig 	if (a <
     65   1.9  rillig /* $ XXX: No extra indentation necessary. */
     66   1.1  rillig 			b)
     67   1.9  rillig 		stmt();
     68   1.1  rillig 	if (a
     69   1.9  rillig /* $ XXX: No extra indentation necessary. */
     70   1.1  rillig 			<
     71   1.9  rillig /* $ XXX: No extra indentation necessary. */
     72   1.1  rillig 			b)
     73   1.9  rillig 		stmt();
     74   1.9  rillig 	while (a
     75   1.9  rillig /* $ XXX: No extra indentation necessary. */
     76   1.9  rillig 			< b)
     77   1.9  rillig 		stmt();
     78   1.9  rillig 	switch (
     79   1.9  rillig 			a)
     80   1.9  rillig 		stmt();
     81   1.1  rillig }
     82   1.8  rillig //indent end
     83   1.1  rillig 
     84   1.9  rillig /* For indentation 4, the expressions from the 'if' are ambiguous. */
     85   1.8  rillig //indent run -neei -i4
     86   1.3  rillig {
     87   1.3  rillig     if (a <
     88   1.3  rillig 	b)
     89   1.9  rillig 	stmt();
     90   1.3  rillig     if (a
     91   1.3  rillig 	<
     92   1.3  rillig 	b)
     93   1.9  rillig 	stmt();
     94   1.9  rillig     while (a
     95   1.9  rillig 	   < b)
     96   1.9  rillig 	stmt();
     97   1.9  rillig     switch (
     98   1.9  rillig 	    a)
     99   1.9  rillig 	stmt();
    100   1.3  rillig }
    101   1.8  rillig //indent end
    102   1.3  rillig 
    103   1.8  rillig //indent run -eei -i4
    104   1.3  rillig {
    105   1.3  rillig     if (a <
    106   1.3  rillig 	    b)
    107   1.9  rillig 	stmt();
    108   1.3  rillig     if (a
    109   1.3  rillig 	    <
    110   1.3  rillig 	    b)
    111   1.9  rillig 	stmt();
    112   1.9  rillig     while (a
    113   1.9  rillig /* $ XXX: No extra indentation necessary. */
    114   1.9  rillig 	    < b)
    115   1.9  rillig 	stmt();
    116   1.9  rillig     switch (
    117   1.9  rillig /* $ XXX: No extra indentation necessary. */
    118   1.9  rillig 	    a)
    119   1.9  rillig 	stmt();
    120   1.3  rillig }
    121   1.8  rillig //indent end
    122   1.5  rillig 
    123   1.5  rillig /*
    124   1.9  rillig  * The -nlp option uses a fixed indentation for continuation lines. The if
    125   1.9  rillig  * statements are disambiguated.
    126   1.5  rillig  */
    127   1.8  rillig //indent run -eei -i4 -nlp
    128   1.5  rillig {
    129   1.5  rillig     if (a <
    130  1.10  rillig 	    b)
    131   1.9  rillig 	stmt();
    132   1.5  rillig     if (a
    133  1.10  rillig 	    <
    134  1.10  rillig 	    b)
    135   1.9  rillig 	stmt();
    136   1.9  rillig     while (a
    137  1.10  rillig 	    < b)
    138   1.9  rillig 	stmt();
    139   1.9  rillig     switch (
    140  1.10  rillig 	    a)
    141   1.9  rillig 	stmt();
    142   1.5  rillig }
    143   1.8  rillig //indent end
    144   1.5  rillig 
    145   1.9  rillig /* With a continuation indentation of 2, there is no ambiguity at all. */
    146   1.9  rillig //indent run -eei -i6 -ci2 -nlp
    147   1.5  rillig {
    148   1.9  rillig       if (a <
    149   1.9  rillig 	b)
    150   1.9  rillig 	    stmt();
    151   1.9  rillig       if (a
    152   1.9  rillig 	<
    153   1.9  rillig 	b)
    154   1.9  rillig 	    stmt();
    155   1.9  rillig       while (a
    156   1.9  rillig 	< b)
    157   1.9  rillig 	    stmt();
    158   1.9  rillig       switch (
    159   1.9  rillig 	a)
    160   1.5  rillig 	    stmt();
    161   1.5  rillig }
    162   1.8  rillig //indent end
    163  1.11  rillig 
    164  1.11  rillig 
    165  1.11  rillig /*
    166  1.11  rillig  * Ensure that after a condition with extra indentation, the following
    167  1.11  rillig  * statements are not affected.
    168  1.11  rillig  */
    169  1.11  rillig //indent input
    170  1.11  rillig {
    171  1.11  rillig 	if (
    172  1.11  rillig 		cond
    173  1.11  rillig 	)
    174  1.11  rillig 		stmt(
    175  1.11  rillig 			arg
    176  1.11  rillig 		);
    177  1.11  rillig }
    178  1.11  rillig //indent end
    179  1.11  rillig 
    180  1.11  rillig //indent run -eei -nlp -i4
    181  1.11  rillig {
    182  1.11  rillig     if (
    183  1.11  rillig 	    cond
    184  1.11  rillig 	)
    185  1.11  rillig 	stmt(
    186  1.12  rillig 	    arg
    187  1.11  rillig 	    );
    188  1.11  rillig }
    189  1.11  rillig //indent end
    190  1.13  rillig 
    191  1.13  rillig 
    192  1.13  rillig /*
    193  1.13  rillig  * When multi-line expressions are aligned on the parentheses, they may have an
    194  1.13  rillig  * ambiguous indentation as well.
    195  1.13  rillig  */
    196  1.13  rillig //indent input
    197  1.13  rillig {
    198  1.13  rillig 	if (fun(
    199  1.13  rillig 		1,
    200  1.13  rillig 		2,
    201  1.13  rillig 		3))
    202  1.13  rillig 		stmt;
    203  1.13  rillig }
    204  1.13  rillig //indent end
    205  1.13  rillig 
    206  1.13  rillig //indent run-equals-input
    207  1.13  rillig 
    208  1.13  rillig //indent run -eei
    209  1.13  rillig {
    210  1.13  rillig 	if (fun(
    211  1.13  rillig // $ TODO: Indent one level further.
    212  1.13  rillig 		1,
    213  1.13  rillig 		2,
    214  1.13  rillig 		3))
    215  1.13  rillig 		stmt;
    216  1.13  rillig }
    217  1.13  rillig //indent end
    218  1.13  rillig 
    219  1.13  rillig 
    220  1.13  rillig /*
    221  1.13  rillig  *
    222  1.13  rillig  */
    223  1.13  rillig //indent input
    224  1.13  rillig {
    225  1.13  rillig 	if (((
    226  1.13  rillig 		3
    227  1.13  rillig 	)))
    228  1.13  rillig 		stmt;
    229  1.13  rillig 	if ((((
    230  1.13  rillig 		4
    231  1.13  rillig 	))))
    232  1.13  rillig 		stmt;
    233  1.13  rillig }
    234  1.13  rillig //indent end
    235  1.13  rillig 
    236  1.13  rillig //indent run -ci2 -nlp -eei
    237  1.13  rillig {
    238  1.13  rillig 	if (((
    239  1.13  rillig 	      3
    240  1.13  rillig 	    )))
    241  1.13  rillig 		stmt;
    242  1.13  rillig // $ XXX: The indentation of '4' may be considered ambiguous.
    243  1.13  rillig 	if ((((
    244  1.13  rillig 		4
    245  1.13  rillig 	      ))))
    246  1.13  rillig 		stmt;
    247  1.13  rillig }
    248  1.13  rillig //indent end
    249