1 1.16 rillig /* $NetBSD: opt_badp.c,v 1.16 2023/06/27 04:41:23 rillig Exp $ */ 2 1.1 rillig 3 1.2 rillig /* 4 1.2 rillig * Tests for the options '-badp' and '-nbadp'. 5 1.2 rillig * 6 1.12 rillig * The option '-badp' forces a blank line between the first set of declarations 7 1.12 rillig * in a function and the next comment or statement. It produces a blank line 8 1.12 rillig * even if there are no declarations. 9 1.2 rillig */ 10 1.2 rillig 11 1.13 rillig 12 1.13 rillig /* An empty function body does not need a blank line. */ 13 1.9 rillig //indent input 14 1.5 rillig void 15 1.6 rillig empty(void) 16 1.1 rillig { 17 1.1 rillig } 18 1.9 rillig //indent end 19 1.5 rillig 20 1.9 rillig //indent run-equals-input -badp 21 1.8 rillig 22 1.9 rillig //indent run-equals-input -nbadp 23 1.1 rillig 24 1.5 rillig 25 1.13 rillig /* If an empty function body already has a blank line, it is kept. */ 26 1.9 rillig //indent input 27 1.5 rillig void 28 1.6 rillig blank(void) 29 1.1 rillig { 30 1.5 rillig 31 1.1 rillig } 32 1.9 rillig //indent end 33 1.1 rillig 34 1.9 rillig //indent run-equals-input -badp 35 1.8 rillig 36 1.9 rillig //indent run-equals-input -nbadp 37 1.1 rillig 38 1.1 rillig 39 1.13 rillig /* 40 1.13 rillig * If a function body has only declarations (doesn't occur in practice), it 41 1.13 rillig * does not need an empty line. 42 1.13 rillig */ 43 1.9 rillig //indent input 44 1.5 rillig void 45 1.6 rillig declaration(void) 46 1.1 rillig { 47 1.5 rillig int decl; 48 1.5 rillig } 49 1.9 rillig //indent end 50 1.1 rillig 51 1.9 rillig //indent run-equals-input -badp 52 1.8 rillig 53 1.9 rillig //indent run-equals-input -nbadp 54 1.1 rillig 55 1.1 rillig 56 1.13 rillig /* 57 1.13 rillig * A function body without declarations gets an empty line above the first 58 1.13 rillig * statement. 59 1.13 rillig */ 60 1.9 rillig //indent input 61 1.5 rillig void 62 1.6 rillig statement(void) 63 1.5 rillig { 64 1.5 rillig stmt(); 65 1.1 rillig } 66 1.9 rillig //indent end 67 1.1 rillig 68 1.14 rillig //indent run -badp 69 1.14 rillig void 70 1.14 rillig statement(void) 71 1.14 rillig { 72 1.14 rillig 73 1.14 rillig stmt(); 74 1.14 rillig } 75 1.14 rillig //indent end 76 1.8 rillig 77 1.9 rillig //indent run-equals-input -nbadp 78 1.5 rillig 79 1.1 rillig 80 1.13 rillig /* 81 1.13 rillig * A function body with a declaration and a statement gets a blank line between 82 1.13 rillig * those. 83 1.13 rillig */ 84 1.9 rillig //indent input 85 1.5 rillig void 86 1.6 rillig declaration_statement(void) 87 1.5 rillig { 88 1.5 rillig int decl; 89 1.5 rillig stmt(); 90 1.5 rillig } 91 1.9 rillig //indent end 92 1.5 rillig 93 1.9 rillig //indent run -badp 94 1.5 rillig void 95 1.6 rillig declaration_statement(void) 96 1.1 rillig { 97 1.5 rillig int decl; 98 1.14 rillig 99 1.5 rillig stmt(); 100 1.1 rillig } 101 1.9 rillig //indent end 102 1.8 rillig 103 1.9 rillig //indent run-equals-input -nbadp 104 1.1 rillig 105 1.5 rillig 106 1.13 rillig /* If there already is a blank line in the right place, it is kept. */ 107 1.9 rillig //indent input 108 1.1 rillig static void 109 1.5 rillig declaration_blank_statement(void) 110 1.1 rillig { 111 1.5 rillig int decl; 112 1.1 rillig 113 1.5 rillig stmt(); 114 1.1 rillig } 115 1.9 rillig //indent end 116 1.5 rillig 117 1.9 rillig //indent run-equals-input -badp 118 1.8 rillig 119 1.9 rillig //indent run-equals-input -nbadp 120 1.1 rillig 121 1.5 rillig 122 1.13 rillig /* Additional blank lines are kept. To remove them, see the '-sob' option. */ 123 1.9 rillig //indent input 124 1.1 rillig static void 125 1.5 rillig declaration_blank_blank_statement(void) 126 1.1 rillig { 127 1.5 rillig int decl; 128 1.1 rillig 129 1.1 rillig 130 1.1 rillig 131 1.5 rillig stmt(); 132 1.1 rillig } 133 1.9 rillig //indent end 134 1.1 rillig 135 1.9 rillig //indent run-equals-input -badp 136 1.8 rillig 137 1.9 rillig //indent run-equals-input -nbadp 138 1.11 rillig 139 1.11 rillig 140 1.11 rillig /* 141 1.13 rillig * The blank line is only inserted at the top of a function body, not in nested 142 1.13 rillig * block statements. 143 1.13 rillig */ 144 1.13 rillig //indent input 145 1.13 rillig static void 146 1.13 rillig nested(void) 147 1.13 rillig { 148 1.13 rillig { 149 1.13 rillig int decl; 150 1.13 rillig stmt(); 151 1.13 rillig } 152 1.13 rillig } 153 1.13 rillig //indent end 154 1.13 rillig 155 1.14 rillig //indent run -badp 156 1.14 rillig static void 157 1.14 rillig nested(void) 158 1.14 rillig { 159 1.14 rillig 160 1.14 rillig { 161 1.14 rillig int decl; 162 1.14 rillig stmt(); 163 1.14 rillig } 164 1.14 rillig } 165 1.14 rillig //indent end 166 1.13 rillig 167 1.13 rillig //indent run-equals-input -nbadp 168 1.13 rillig 169 1.13 rillig 170 1.13 rillig /* 171 1.11 rillig * A struct declaration or an initializer are not function bodies, so don't 172 1.11 rillig * add a blank line after them. 173 1.11 rillig */ 174 1.11 rillig //indent input 175 1.11 rillig struct { 176 1.11 rillig int member[2]; 177 1.11 rillig } s = { 178 1.11 rillig { 179 1.11 rillig 0, 180 1.11 rillig 0, 181 1.11 rillig } 182 1.11 rillig }; 183 1.11 rillig //indent end 184 1.11 rillig 185 1.11 rillig //indent run-equals-input -di0 -badp 186 1.11 rillig 187 1.11 rillig //indent run-equals-input -di0 -nbadp 188 1.14 rillig 189 1.14 rillig 190 1.14 rillig /* Single-line function definitions must be handled correctly as well. */ 191 1.14 rillig //indent input 192 1.14 rillig void f(void) { int decl; stmt; } 193 1.14 rillig //indent end 194 1.14 rillig 195 1.14 rillig //indent run -badp 196 1.14 rillig void 197 1.14 rillig f(void) 198 1.14 rillig { 199 1.14 rillig int decl; 200 1.14 rillig 201 1.14 rillig stmt; 202 1.14 rillig } 203 1.14 rillig //indent end 204 1.14 rillig 205 1.14 rillig //indent run -nfbs -badp 206 1.14 rillig void 207 1.14 rillig f(void) { 208 1.14 rillig int decl; 209 1.14 rillig 210 1.14 rillig stmt; 211 1.14 rillig } 212 1.14 rillig //indent end 213 1.15 rillig 214 1.15 rillig 215 1.15 rillig /* The '}' of an initializer does not end a block. */ 216 1.15 rillig //indent input 217 1.15 rillig void 218 1.15 rillig f(void) 219 1.15 rillig { 220 1.15 rillig int decl1[2][2] = { 221 1.15 rillig {1, 2}, 222 1.15 rillig {3, 4}, 223 1.15 rillig }; 224 1.15 rillig int decl2 = 5; 225 1.15 rillig stmt; 226 1.15 rillig } 227 1.15 rillig //indent end 228 1.15 rillig 229 1.16 rillig //indent run -di0 -badp 230 1.15 rillig void 231 1.15 rillig f(void) 232 1.15 rillig { 233 1.15 rillig int decl1[2][2] = { 234 1.15 rillig {1, 2}, 235 1.15 rillig {3, 4}, 236 1.15 rillig }; 237 1.15 rillig int decl2 = 5; 238 1.16 rillig 239 1.15 rillig stmt; 240 1.15 rillig } 241 1.15 rillig //indent end 242 1.15 rillig 243 1.15 rillig 244 1.15 rillig /* 245 1.15 rillig * Due to its limited lookahead, indent cannot know whether the comment is 246 1.16 rillig * followed by a declaration or a statement, so it assumes that the comment is 247 1.16 rillig * part of the declaration block. 248 1.15 rillig */ 249 1.15 rillig //indent input 250 1.15 rillig void f(void) { 251 1.15 rillig int decl1; 252 1.15 rillig /* comment */ 253 1.15 rillig int decl2; 254 1.15 rillig stmt; 255 1.15 rillig } 256 1.15 rillig //indent end 257 1.15 rillig 258 1.15 rillig //indent run -badp 259 1.15 rillig void 260 1.15 rillig f(void) 261 1.15 rillig { 262 1.15 rillig int decl1; 263 1.15 rillig /* comment */ 264 1.15 rillig int decl2; 265 1.16 rillig 266 1.15 rillig stmt; 267 1.15 rillig } 268 1.15 rillig //indent end 269 1.15 rillig 270 1.15 rillig 271 1.15 rillig /* Combining -bad and -badp only adds a single blank line. */ 272 1.15 rillig //indent input 273 1.15 rillig void f(void) { int decl; stmt1; stmt2; } 274 1.15 rillig //indent end 275 1.15 rillig 276 1.15 rillig //indent run -bad -badp 277 1.15 rillig void 278 1.15 rillig f(void) 279 1.15 rillig { 280 1.15 rillig int decl; 281 1.15 rillig 282 1.15 rillig stmt1; 283 1.15 rillig stmt2; 284 1.15 rillig } 285 1.15 rillig //indent end 286