opt_eei.c revision 1.13 1 1.13 rillig /* $NetBSD: opt_eei.c,v 1.13 2023/06/09 07:54:05 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.9 rillig /* $ XXX: No extra indentation necessary. */
66 1.1 rillig b)
67 1.9 rillig stmt();
68 1.1 rillig if (a
69 1.9 rillig /* $ XXX: No extra indentation necessary. */
70 1.1 rillig <
71 1.9 rillig /* $ XXX: No extra indentation necessary. */
72 1.1 rillig b)
73 1.9 rillig stmt();
74 1.9 rillig while (a
75 1.9 rillig /* $ XXX: No extra indentation necessary. */
76 1.9 rillig < b)
77 1.9 rillig stmt();
78 1.9 rillig switch (
79 1.9 rillig a)
80 1.9 rillig stmt();
81 1.1 rillig }
82 1.8 rillig //indent end
83 1.1 rillig
84 1.9 rillig /* For indentation 4, the expressions from the 'if' are ambiguous. */
85 1.8 rillig //indent run -neei -i4
86 1.3 rillig {
87 1.3 rillig if (a <
88 1.3 rillig b)
89 1.9 rillig stmt();
90 1.3 rillig if (a
91 1.3 rillig <
92 1.3 rillig b)
93 1.9 rillig stmt();
94 1.9 rillig while (a
95 1.9 rillig < b)
96 1.9 rillig stmt();
97 1.9 rillig switch (
98 1.9 rillig a)
99 1.9 rillig stmt();
100 1.3 rillig }
101 1.8 rillig //indent end
102 1.3 rillig
103 1.8 rillig //indent run -eei -i4
104 1.3 rillig {
105 1.3 rillig if (a <
106 1.3 rillig b)
107 1.9 rillig stmt();
108 1.3 rillig if (a
109 1.3 rillig <
110 1.3 rillig b)
111 1.9 rillig stmt();
112 1.9 rillig while (a
113 1.9 rillig /* $ XXX: No extra indentation necessary. */
114 1.9 rillig < b)
115 1.9 rillig stmt();
116 1.9 rillig switch (
117 1.9 rillig /* $ XXX: No extra indentation necessary. */
118 1.9 rillig a)
119 1.9 rillig stmt();
120 1.3 rillig }
121 1.8 rillig //indent end
122 1.5 rillig
123 1.5 rillig /*
124 1.9 rillig * The -nlp option uses a fixed indentation for continuation lines. The if
125 1.9 rillig * statements are disambiguated.
126 1.5 rillig */
127 1.8 rillig //indent run -eei -i4 -nlp
128 1.5 rillig {
129 1.5 rillig if (a <
130 1.10 rillig b)
131 1.9 rillig stmt();
132 1.5 rillig if (a
133 1.10 rillig <
134 1.10 rillig b)
135 1.9 rillig stmt();
136 1.9 rillig while (a
137 1.10 rillig < b)
138 1.9 rillig stmt();
139 1.9 rillig switch (
140 1.10 rillig a)
141 1.9 rillig stmt();
142 1.5 rillig }
143 1.8 rillig //indent end
144 1.5 rillig
145 1.9 rillig /* With a continuation indentation of 2, there is no ambiguity at all. */
146 1.9 rillig //indent run -eei -i6 -ci2 -nlp
147 1.5 rillig {
148 1.9 rillig if (a <
149 1.9 rillig b)
150 1.9 rillig stmt();
151 1.9 rillig if (a
152 1.9 rillig <
153 1.9 rillig b)
154 1.9 rillig stmt();
155 1.9 rillig while (a
156 1.9 rillig < b)
157 1.9 rillig stmt();
158 1.9 rillig switch (
159 1.9 rillig a)
160 1.5 rillig stmt();
161 1.5 rillig }
162 1.8 rillig //indent end
163 1.11 rillig
164 1.11 rillig
165 1.11 rillig /*
166 1.11 rillig * Ensure that after a condition with extra indentation, the following
167 1.11 rillig * statements are not affected.
168 1.11 rillig */
169 1.11 rillig //indent input
170 1.11 rillig {
171 1.11 rillig if (
172 1.11 rillig cond
173 1.11 rillig )
174 1.11 rillig stmt(
175 1.11 rillig arg
176 1.11 rillig );
177 1.11 rillig }
178 1.11 rillig //indent end
179 1.11 rillig
180 1.11 rillig //indent run -eei -nlp -i4
181 1.11 rillig {
182 1.11 rillig if (
183 1.11 rillig cond
184 1.11 rillig )
185 1.11 rillig stmt(
186 1.12 rillig arg
187 1.11 rillig );
188 1.11 rillig }
189 1.11 rillig //indent end
190 1.13 rillig
191 1.13 rillig
192 1.13 rillig /*
193 1.13 rillig * When multi-line expressions are aligned on the parentheses, they may have an
194 1.13 rillig * ambiguous indentation as well.
195 1.13 rillig */
196 1.13 rillig //indent input
197 1.13 rillig {
198 1.13 rillig if (fun(
199 1.13 rillig 1,
200 1.13 rillig 2,
201 1.13 rillig 3))
202 1.13 rillig stmt;
203 1.13 rillig }
204 1.13 rillig //indent end
205 1.13 rillig
206 1.13 rillig //indent run-equals-input
207 1.13 rillig
208 1.13 rillig //indent run -eei
209 1.13 rillig {
210 1.13 rillig if (fun(
211 1.13 rillig // $ TODO: Indent one level further.
212 1.13 rillig 1,
213 1.13 rillig 2,
214 1.13 rillig 3))
215 1.13 rillig stmt;
216 1.13 rillig }
217 1.13 rillig //indent end
218 1.13 rillig
219 1.13 rillig
220 1.13 rillig /*
221 1.13 rillig *
222 1.13 rillig */
223 1.13 rillig //indent input
224 1.13 rillig {
225 1.13 rillig if (((
226 1.13 rillig 3
227 1.13 rillig )))
228 1.13 rillig stmt;
229 1.13 rillig if ((((
230 1.13 rillig 4
231 1.13 rillig ))))
232 1.13 rillig stmt;
233 1.13 rillig }
234 1.13 rillig //indent end
235 1.13 rillig
236 1.13 rillig //indent run -ci2 -nlp -eei
237 1.13 rillig {
238 1.13 rillig if (((
239 1.13 rillig 3
240 1.13 rillig )))
241 1.13 rillig stmt;
242 1.13 rillig // $ XXX: The indentation of '4' may be considered ambiguous.
243 1.13 rillig if ((((
244 1.13 rillig 4
245 1.13 rillig ))))
246 1.13 rillig stmt;
247 1.13 rillig }
248 1.13 rillig //indent end
249