xref: /netbsd-src/tests/usr.bin/indent/opt_eei.c (revision 0982fd88d1a4358af669ce182835c8c00eae5dae)
1 /* $NetBSD: opt_eei.c,v 1.15 2023/06/15 09:19:07 rillig Exp $ */
2 
3 /*
4  * Tests for the options '-eei' and '-neei'.
5  *
6  * The option '-eei' enables extra indentation on continuation lines of the
7  * expression part of 'if' and 'while' statements. These continuation lines
8  * are indented one extra level to avoid being confused for the first
9  * statement of the body, even if the condition line starts with an operator
10  * such as '&&' or '<' that could not start a statement.
11  *
12  * The option '-neei' indents these conditions in the same way as all other
13  * continued statements.
14  */
15 
16 //indent input
17 {
18 	if (a <
19 b)
20 		stmt();
21 	if (a
22 <
23 b)
24 		stmt();
25 	while (a
26 < b)
27 		stmt();
28 	switch (
29 		a)
30 		stmt();
31 }
32 //indent end
33 
34 /*
35  * By default, continuation lines are aligned on parentheses, and only a
36  * multi-line switch statement would have ambiguous indentation.
37  */
38 //indent run
39 {
40 	if (a <
41 	    b)
42 		stmt();
43 	if (a
44 	    <
45 	    b)
46 		stmt();
47 	while (a
48 	       < b)
49 		stmt();
50 	switch (
51 		a)
52 		stmt();
53 }
54 //indent end
55 
56 //indent run-equals-prev-output -neei
57 
58 /*
59  * For indentation 8, the only expression that needs to be disambiguated is
60  * the one from the switch statement.
61  */
62 //indent run -eei
63 {
64 	if (a <
65 	    b)
66 		stmt();
67 	if (a
68 	    <
69 	    b)
70 		stmt();
71 	while (a
72 	       < b)
73 		stmt();
74 	switch (
75 			a)
76 		stmt();
77 }
78 //indent end
79 
80 /* For indentation 4, the expressions from the 'if' are ambiguous. */
81 //indent run -neei -i4
82 {
83     if (a <
84 	b)
85 	stmt();
86     if (a
87 	<
88 	b)
89 	stmt();
90     while (a
91 	   < b)
92 	stmt();
93     switch (
94 	    a)
95 	stmt();
96 }
97 //indent end
98 
99 //indent run -eei -i4
100 {
101     if (a <
102 	    b)
103 	stmt();
104     if (a
105 	    <
106 	    b)
107 	stmt();
108     while (a
109 	   < b)
110 	stmt();
111     switch (
112 /* $ XXX: No extra indentation necessary. */
113 	    a)
114 	stmt();
115 }
116 //indent end
117 
118 /*
119  * The -nlp option uses a fixed indentation for continuation lines. The if
120  * statements are disambiguated.
121  */
122 //indent run -eei -i4 -nlp
123 {
124     if (a <
125 	    b)
126 	stmt();
127     if (a
128 	    <
129 	    b)
130 	stmt();
131     while (a
132 	    < b)
133 	stmt();
134     switch (
135 	    a)
136 	stmt();
137 }
138 //indent end
139 
140 /* With a continuation indentation of 2, there is no ambiguity at all. */
141 //indent run -eei -i6 -ci2 -nlp
142 {
143       if (a <
144 	b)
145 	    stmt();
146       if (a
147 	<
148 	b)
149 	    stmt();
150       while (a
151 	< b)
152 	    stmt();
153       switch (
154 	a)
155 	    stmt();
156 }
157 //indent end
158 
159 
160 /*
161  * Ensure that after a condition with extra indentation, the following
162  * statements are not affected.
163  */
164 //indent input
165 {
166 	if (
167 		cond
168 	)
169 		stmt(
170 			arg
171 		);
172 }
173 //indent end
174 
175 //indent run -eei -nlp -i4
176 {
177     if (
178 	    cond
179 	)
180 	stmt(
181 	    arg
182 	    );
183 }
184 //indent end
185 
186 
187 /*
188  * When multi-line expressions are aligned on the parentheses, they may have an
189  * ambiguous indentation as well.
190  */
191 //indent input
192 {
193 	if (fun(
194 		1,
195 		2,
196 		3))
197 		stmt;
198 }
199 //indent end
200 
201 //indent run-equals-input
202 
203 //indent run -eei
204 {
205 	if (fun(
206 			1,
207 			2,
208 			3))
209 		stmt;
210 }
211 //indent end
212 
213 
214 //indent input
215 {
216 	if (((
217 		3
218 	)))
219 		stmt;
220 	if ((((
221 		4
222 	))))
223 		stmt;
224 }
225 //indent end
226 
227 //indent run -ci2 -nlp -eei
228 {
229 	if (((
230 	      3
231 	    )))
232 		stmt;
233 	if ((((
234 		  4
235 	      ))))
236 		stmt;
237 }
238 //indent end
239