1 1.15 rillig /* $NetBSD: opt_eei.c,v 1.15 2023/06/15 09:19:07 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.14 rillig b) 66 1.9 rillig stmt(); 67 1.1 rillig if (a 68 1.14 rillig < 69 1.14 rillig b) 70 1.9 rillig stmt(); 71 1.9 rillig while (a 72 1.14 rillig < b) 73 1.9 rillig stmt(); 74 1.9 rillig switch ( 75 1.9 rillig a) 76 1.9 rillig stmt(); 77 1.1 rillig } 78 1.8 rillig //indent end 79 1.1 rillig 80 1.9 rillig /* For indentation 4, the expressions from the 'if' are ambiguous. */ 81 1.8 rillig //indent run -neei -i4 82 1.3 rillig { 83 1.3 rillig if (a < 84 1.3 rillig b) 85 1.9 rillig stmt(); 86 1.3 rillig if (a 87 1.3 rillig < 88 1.3 rillig b) 89 1.9 rillig stmt(); 90 1.9 rillig while (a 91 1.9 rillig < b) 92 1.9 rillig stmt(); 93 1.9 rillig switch ( 94 1.9 rillig a) 95 1.9 rillig stmt(); 96 1.3 rillig } 97 1.8 rillig //indent end 98 1.3 rillig 99 1.8 rillig //indent run -eei -i4 100 1.3 rillig { 101 1.3 rillig if (a < 102 1.3 rillig b) 103 1.9 rillig stmt(); 104 1.3 rillig if (a 105 1.3 rillig < 106 1.3 rillig b) 107 1.9 rillig stmt(); 108 1.9 rillig while (a 109 1.14 rillig < b) 110 1.9 rillig stmt(); 111 1.9 rillig switch ( 112 1.9 rillig /* $ XXX: No extra indentation necessary. */ 113 1.9 rillig a) 114 1.9 rillig stmt(); 115 1.3 rillig } 116 1.8 rillig //indent end 117 1.5 rillig 118 1.5 rillig /* 119 1.9 rillig * The -nlp option uses a fixed indentation for continuation lines. The if 120 1.9 rillig * statements are disambiguated. 121 1.5 rillig */ 122 1.8 rillig //indent run -eei -i4 -nlp 123 1.5 rillig { 124 1.5 rillig if (a < 125 1.10 rillig b) 126 1.9 rillig stmt(); 127 1.5 rillig if (a 128 1.10 rillig < 129 1.10 rillig b) 130 1.9 rillig stmt(); 131 1.9 rillig while (a 132 1.10 rillig < b) 133 1.9 rillig stmt(); 134 1.9 rillig switch ( 135 1.10 rillig a) 136 1.9 rillig stmt(); 137 1.5 rillig } 138 1.8 rillig //indent end 139 1.5 rillig 140 1.9 rillig /* With a continuation indentation of 2, there is no ambiguity at all. */ 141 1.9 rillig //indent run -eei -i6 -ci2 -nlp 142 1.5 rillig { 143 1.9 rillig if (a < 144 1.9 rillig b) 145 1.9 rillig stmt(); 146 1.9 rillig if (a 147 1.9 rillig < 148 1.9 rillig b) 149 1.9 rillig stmt(); 150 1.9 rillig while (a 151 1.9 rillig < b) 152 1.9 rillig stmt(); 153 1.9 rillig switch ( 154 1.9 rillig a) 155 1.5 rillig stmt(); 156 1.5 rillig } 157 1.8 rillig //indent end 158 1.11 rillig 159 1.11 rillig 160 1.11 rillig /* 161 1.11 rillig * Ensure that after a condition with extra indentation, the following 162 1.11 rillig * statements are not affected. 163 1.11 rillig */ 164 1.11 rillig //indent input 165 1.11 rillig { 166 1.11 rillig if ( 167 1.11 rillig cond 168 1.11 rillig ) 169 1.11 rillig stmt( 170 1.11 rillig arg 171 1.11 rillig ); 172 1.11 rillig } 173 1.11 rillig //indent end 174 1.11 rillig 175 1.11 rillig //indent run -eei -nlp -i4 176 1.11 rillig { 177 1.11 rillig if ( 178 1.11 rillig cond 179 1.11 rillig ) 180 1.11 rillig stmt( 181 1.12 rillig arg 182 1.11 rillig ); 183 1.11 rillig } 184 1.11 rillig //indent end 185 1.13 rillig 186 1.13 rillig 187 1.13 rillig /* 188 1.13 rillig * When multi-line expressions are aligned on the parentheses, they may have an 189 1.13 rillig * ambiguous indentation as well. 190 1.13 rillig */ 191 1.13 rillig //indent input 192 1.13 rillig { 193 1.13 rillig if (fun( 194 1.13 rillig 1, 195 1.13 rillig 2, 196 1.13 rillig 3)) 197 1.13 rillig stmt; 198 1.13 rillig } 199 1.13 rillig //indent end 200 1.13 rillig 201 1.13 rillig //indent run-equals-input 202 1.13 rillig 203 1.13 rillig //indent run -eei 204 1.13 rillig { 205 1.13 rillig if (fun( 206 1.14 rillig 1, 207 1.14 rillig 2, 208 1.14 rillig 3)) 209 1.13 rillig stmt; 210 1.13 rillig } 211 1.13 rillig //indent end 212 1.13 rillig 213 1.13 rillig 214 1.13 rillig //indent input 215 1.13 rillig { 216 1.13 rillig if ((( 217 1.13 rillig 3 218 1.13 rillig ))) 219 1.13 rillig stmt; 220 1.13 rillig if (((( 221 1.13 rillig 4 222 1.13 rillig )))) 223 1.13 rillig stmt; 224 1.13 rillig } 225 1.13 rillig //indent end 226 1.13 rillig 227 1.13 rillig //indent run -ci2 -nlp -eei 228 1.13 rillig { 229 1.13 rillig if ((( 230 1.13 rillig 3 231 1.13 rillig ))) 232 1.13 rillig stmt; 233 1.13 rillig if (((( 234 1.14 rillig 4 235 1.13 rillig )))) 236 1.13 rillig stmt; 237 1.13 rillig } 238 1.13 rillig //indent end 239