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