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