opt_badp.c revision 1.15 1 1.15 rillig /* $NetBSD: opt_badp.c,v 1.15 2023/06/27 04:28:16 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.15 rillig //indent run -di0
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.15 rillig // $ FIXME: Add blank line here.
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.15 rillig * followed by a declaration or a statement.
247 1.15 rillig */
248 1.15 rillig //indent input
249 1.15 rillig void f(void) {
250 1.15 rillig int decl1;
251 1.15 rillig /* comment */
252 1.15 rillig int decl2;
253 1.15 rillig stmt;
254 1.15 rillig }
255 1.15 rillig //indent end
256 1.15 rillig
257 1.15 rillig //indent run -badp
258 1.15 rillig void
259 1.15 rillig f(void)
260 1.15 rillig {
261 1.15 rillig int decl1;
262 1.15 rillig // $ FIXME: No blank line here.
263 1.15 rillig
264 1.15 rillig /* comment */
265 1.15 rillig int decl2;
266 1.15 rillig // $ FIXME: Add blank line here.
267 1.15 rillig stmt;
268 1.15 rillig }
269 1.15 rillig //indent end
270 1.15 rillig
271 1.15 rillig
272 1.15 rillig /* Combining -bad and -badp only adds a single blank line. */
273 1.15 rillig //indent input
274 1.15 rillig void f(void) { int decl; stmt1; stmt2; }
275 1.15 rillig //indent end
276 1.15 rillig
277 1.15 rillig //indent run -bad -badp
278 1.15 rillig void
279 1.15 rillig f(void)
280 1.15 rillig {
281 1.15 rillig int decl;
282 1.15 rillig
283 1.15 rillig stmt1;
284 1.15 rillig // $ FIXME: Remove this blank line.
285 1.15 rillig
286 1.15 rillig stmt2;
287 1.15 rillig }
288 1.15 rillig //indent end
289