1 /* $NetBSD: ps_ind_level.c,v 1.9 2023/06/15 09:19:07 rillig Exp $ */
2
3 /*
4 * The indentation of the very first line of a file determines the
5 * indentation of the remaining code. This mode is meant for code snippets from
6 * function bodies. At this level, function definitions are not recognized
7 * properly.
8 *
9 * Even if later code has a smaller indentation, it is nevertheless indented to
10 * the level given by the first line of code.
11 *
12 * In this particular test, the indentation is set to 5 and the tabulator
13 * width is set to 8, to demonstrate an off-by-one error in
14 * main_prepare_parsing that has been fixed in indent.c 1.107 from 2021-10-05.
15 *
16 * The declaration in the first line is indented by 3 tabs, amounting to 24
17 * spaces. The initial indentation of the code is intended to be rounded down,
18 * to 4 levels of indentation, amounting to 20 spaces.
19 */
20 //indent input
21 int indented_by_24;
22
function_in_column_1(void)23 void function_in_column_1(void){}
24
25 #if indented
26 #endif
27 //indent end
28
29 /* 5 spaces indentation, 8 spaces per tabulator */
30 //indent run -i5 -ts8
31 int indented_by_24;
32
function_in_column_1(void)33 void function_in_column_1(void) {
34 }
35
36 #if indented
37 #endif
38 //indent end
39
40
41 /*
42 * Labels are always indented 2 levels left of the code. The first line starts
43 * at indentation level 3, the code in the function is therefore at level 4,
44 * and the label is at level 2, sticking out of the code.
45 */
46 //indent input
47 int indent_by_24;
48
function(void)49 void function(void) {
50 label:;
51 }
52 //indent end
53
54 //indent run -i8 -ts8 -di0
55 int indent_by_24;
56
function(void)57 void function(void) {
58 label: ;
59 }
60 //indent end
61
62
63 /* Test the indentation computation in code_add_decl_indent. */
64 //indent input
65 int level_0;
66 {
67 int level_1;
68 {
69 int level_2;
70 {
71 int level_3;
72 {
73 int level_4;
74 }
75 }
76 }
77 }
78 //indent end
79
80 /*
81 * The variables are indented by 16, 21, 26, 31, 36.
82 * The variables end up in columns 17, 22, 27, 32, 37.
83 */
84 //indent run -i5 -ts8 -di16 -ldi16
85 int level_0;
86 {
87 int level_1;
88 {
89 int level_2;
90 {
91 int level_3;
92 {
93 int level_4;
94 }
95 }
96 }
97 }
98 //indent end
99
100 /*
101 * The variables are indented by 7, 12, 17, 22, 27.
102 * The variables end up in columns 8, 13, 18, 23, 28.
103 */
104 //indent run -i5 -ts8 -di7 -ldi7
105 int level_0;
106 {
107 int level_1;
108 {
109 int level_2;
110 {
111 int level_3;
112 {
113 int level_4;
114 }
115 }
116 }
117 }
118 //indent end
119
120
121 /*
122 * Having function definitions indented to the right is not supported. In that
123 * case, indent does not recognize it as a function definition, and it doesn't
124 * indent the old-style parameter declarations one level further to the right.
125 */
126 //indent input
old_style(a)127 int old_style(a)
128 int a;
129 {
130 }
131 //indent end
132
133 //indent run-equals-input
134