1 /* $NetBSD: opt_ci.c,v 1.11 2023/06/10 08:17:04 rillig Exp $ */ 2 3 /* 4 * Tests for the option '-ci', which controls the indentation of continuation 5 * lines in statements and declarations, but only inside a function. 6 */ 7 8 /* 9 * Top level expressions with and without parentheses. 10 */ 11 //indent input 12 int top_level = 1 + 13 2; 14 int top_level = (1 + 15 2 + ( 16 3)); 17 //indent end 18 19 //indent run -ci0 20 int top_level = 1 + 21 2; 22 int top_level = (1 + 23 2 + ( 24 3)); 25 //indent end 26 27 //indent run-equals-prev-output -ci2 28 29 //indent run-equals-prev-output -ci4 30 31 //indent run-equals-prev-output -ci8 32 33 //indent run -ci0 -nlp 34 int top_level = 1 + 35 2; 36 int top_level = (1 + 37 2 + ( 38 3)); 39 //indent end 40 41 //indent run -ci2 -nlp 42 int top_level = 1 + 43 2; 44 int top_level = (1 + 45 2 + ( 46 3)); 47 //indent end 48 49 /* 50 * Between 2019-04-04 and 2023-06-09, there was a special rule that prevented 51 * indentation based on the number of open parentheses, in the case that the 52 * continuation indentation is half an indentation level, maybe to prevent that 53 * the continuation line has the same indentation as a follow-up statement, 54 * such as in 'if' statements. To prevent such ambiguities, see '-eei'. 55 */ 56 //indent run -ci4 -nlp 57 int top_level = 1 + 58 2; 59 int top_level = (1 + 60 2 + ( 61 3)); 62 //indent end 63 64 65 /* 66 * Declarations in functions without parentheses. 67 */ 68 //indent input 69 int 70 sum(int a, int b) 71 { 72 return a + 73 b; 74 return first + 75 second; 76 } 77 //indent end 78 79 //indent run -ci0 80 int 81 sum(int a, int b) 82 { 83 return a + 84 b; 85 return first + 86 second; 87 } 88 //indent end 89 90 //indent run -ci2 91 int 92 sum(int a, int b) 93 { 94 return a + 95 b; 96 return first + 97 second; 98 } 99 //indent end 100 101 //indent run -ci4 102 int 103 sum(int a, int b) 104 { 105 return a + 106 b; 107 return first + 108 second; 109 } 110 //indent end 111 112 //indent run -ci8 113 int 114 sum(int a, int b) 115 { 116 return a + 117 b; 118 return first + 119 second; 120 } 121 //indent end 122 123 124 /* 125 * Continued statements with expressions in parentheses. 126 */ 127 //indent input 128 int 129 sum(int a, int b) 130 { 131 return (a + 132 b); 133 return (first + 134 second + ( 135 third)); 136 } 137 //indent end 138 139 //indent run -ci0 140 int 141 sum(int a, int b) 142 { 143 return (a + 144 b); 145 return (first + 146 second + ( 147 third)); 148 } 149 //indent end 150 151 //indent run-equals-prev-output -ci2 152 153 //indent run-equals-prev-output -ci4 154 155 //indent run-equals-prev-output -ci8 156 157 //indent run -ci2 -nlp 158 int 159 sum(int a, int b) 160 { 161 return (a + 162 b); 163 return (first + 164 second + ( 165 third)); 166 } 167 //indent end 168 169 //indent run -ci4 -nlp 170 int 171 sum(int a, int b) 172 { 173 return (a + 174 b); 175 return (first + 176 second + ( 177 third)); 178 } 179 //indent end 180 181 //indent run -ci8 -nlp 182 int 183 sum(int a, int b) 184 { 185 return (a + 186 b); 187 return (first + 188 second + ( 189 third)); 190 } 191 //indent end 192 193 194 /* 195 * In the default configuration, the indentation level from '-i' is the same 196 * as the continuation indentation from '-ci'. The difference between these 197 * becomes visible for structural macros like 'forever' or 'foreach'. 198 */ 199 //indent input 200 #define forever for (;;) 201 void 202 function(void) 203 { 204 forever 205 stmt(); 206 207 forever { 208 stmt(); 209 } 210 } 211 //indent end 212 213 //indent run-equals-input 214 215 /* 216 * The difference between the block indentation and the continuation 217 * indentation only becomes visible when these two differ. 218 */ 219 //indent run -i8 -ci4 220 #define forever for (;;) 221 void 222 function(void) 223 { 224 forever 225 stmt(); 226 227 forever { 228 stmt(); 229 } 230 } 231 //indent end 232 233 234 //indent input 235 { 236 size_t last_word_len = com.len 237 - (size_t)(last_blank + 1); 238 } 239 //indent end 240 241 //indent run-equals-input -ldi0 -ci4 242