xref: /netbsd-src/tests/usr.bin/indent/opt_bc.c (revision 65e3242c1e7ce8e4fda93bdaae8c93d7270ffe07)
1 /* $NetBSD: opt_bc.c,v 1.13 2023/06/17 22:09:24 rillig Exp $ */
2 
3 /*
4  * Tests for the options '-bc' and '-nbc'.
5  *
6  * The option '-bc' forces a newline after each comma in a declaration.
7  *
8  * The option '-nbc' removes line breaks between declarators.  In most other
9  * places, indent preserves line breaks.
10  */
11 
12 //indent input
13 int a,b,c;
14 void function_declaration(int a,int b,int c);
15 int m1,
16 m2,
17 m3;
18 char plain, *pointer;
19 //indent end
20 
21 //indent run -bc
22 int		a,
23 		b,
24 		c;
25 void		function_declaration(int a, int b, int c);
26 int		m1,
27 		m2,
28 		m3;
29 char		plain,
30 	       *pointer;
31 //indent end
32 
33 //indent run -nbc
34 int		a, b, c;
35 void		function_declaration(int a, int b, int c);
36 int		m1, m2, m3;
37 char		plain, *pointer;
38 //indent end
39 
40 
41 //indent input
old_style_definition(a,b,c)42 old_style_definition(a, b, c)
43 double a,b,c;
44 {
45     return a+b+c;
46 }
47 //indent end
48 
49 //indent run -bc
old_style_definition(a,b,c)50 old_style_definition(a, b, c)
51 double		a,
52 		b,
53 		c;
54 {
55 	return a + b + c;
56 }
57 //indent end
58 
59 //indent run -nbc
old_style_definition(a,b,c)60 old_style_definition(a, b, c)
61 double		a, b, c;
62 {
63 	return a + b + c;
64 }
65 //indent end
66 
67 
68 /*
69  * Before indent.c 1.311 from 2023-06-02, indent formatted the two '#if'
70  * branches differently and merged the 'b, c' with the preceding preprocessing
71  * line.
72  */
73 //indent input
74 int a,
75 #if 0
76 b, c; int d;
77 #else
78 b, c; int d;
79 #endif
80 //indent end
81 
82 //indent run -bc
83 int		a,
84 #if 0
85 		b,
86 		c;
87 int		d;
88 #else
89 		b,
90 		c;
91 int		d;
92 #endif
93 //indent end
94 
95 //indent run -nbc
96 int		a,
97 #if 0
98 		b, c;
99 int		d;
100 #else
101 		b, c;
102 int		d;
103 #endif
104 //indent end
105 
106 
107 /*
108  * Before 2023-06-10, a '(' at the top level started a function definition,
109  * leaving variable declaration mode.
110  */
111 //indent input
112 int a = 1, b = 2;
113 int a = (1), b = 2;
114 //indent end
115 
116 //indent run -bc
117 int		a = 1,
118 		b = 2;
119 int		a = (1),
120 		b = 2;
121 //indent end
122 
123 
124 //indent input
125 int a,
126 b,
127 c;
128 //indent end
129 
130 //indent run -nbc -di0
131 int a, b, c;
132 //indent end
133 
134 
135 /*
136  * When declarations are too long to fit in a single line, they should not be
137  * joined.
138  */
139 //indent input
140 {
141 	const struct paren_level *prev = state.prev_ps.paren.item,
142 	    *curr = ps.paren.item;
143 }
144 //indent end
145 
146 //indent run
147 // $ FIXME: The line becomes too long.
148 {
149 	const struct paren_level *prev = state.prev_ps.paren.item, *curr = ps.paren.item;
150 }
151 //indent end
152 
153 
154 /*
155  * In struct or union declarations, the declarators are split onto separate
156  * lines, just like in ordinary declarations.
157  *
158  * In enum declarations and in initializers, no line breaks are added or
159  * removed.
160  */
161 //indent input
162 struct triple_struct {
163 	int a, b, c;
164 };
165 union triple_union {
166 	int a, b, c;
167 };
168 enum triple_enum {
169 	triple_a, triple_b,
170 
171 	triple_c,
172 };
173 //indent end
174 
175 //indent run -bc
176 struct triple_struct {
177 	int		a,
178 			b,
179 			c;
180 };
181 union triple_union {
182 	int		a,
183 			b,
184 			c;
185 };
186 enum triple_enum {
187 	triple_a, triple_b,
188 
189 	triple_c,
190 };
191 //indent end
192 
193 //indent run -nbc
194 struct triple_struct {
195 	int		a, b, c;
196 };
197 union triple_union {
198 	int		a, b, c;
199 };
200 enum triple_enum {
201 	triple_a, triple_b,
202 
203 	triple_c,
204 };
205 //indent end
206