xref: /netbsd-src/tests/usr.bin/indent/ps_ind_level.c (revision 0982fd88d1a4358af669ce182835c8c00eae5dae)
1*0982fd88Srillig /* $NetBSD: ps_ind_level.c,v 1.9 2023/06/15 09:19:07 rillig Exp $ */
2d543264cSrillig 
3d543264cSrillig /*
4d543264cSrillig  * The indentation of the very first line of a file determines the
5940b8500Srillig  * indentation of the remaining code. This mode is meant for code snippets from
6940b8500Srillig  * function bodies. At this level, function definitions are not recognized
7940b8500Srillig  * properly.
8940b8500Srillig  *
9940b8500Srillig  * Even if later code has a smaller indentation, it is nevertheless indented to
10940b8500Srillig  * the level given by the first line of code.
11d543264cSrillig  *
12d543264cSrillig  * In this particular test, the indentation is set to 5 and the tabulator
13d543264cSrillig  * width is set to 8, to demonstrate an off-by-one error in
14d543264cSrillig  * main_prepare_parsing that has been fixed in indent.c 1.107 from 2021-10-05.
15d543264cSrillig  *
16d543264cSrillig  * The declaration in the first line is indented by 3 tabs, amounting to 24
17d543264cSrillig  * spaces. The initial indentation of the code is intended to be rounded down,
18d543264cSrillig  * to 4 levels of indentation, amounting to 20 spaces.
19d543264cSrillig  */
2047306038Srillig //indent input
2195e11159Srillig 			int indented_by_24;
22d543264cSrillig 
function_in_column_1(void)23d543264cSrillig void function_in_column_1(void){}
24940b8500Srillig 
25940b8500Srillig 			#if indented
26940b8500Srillig #endif
2747306038Srillig //indent end
28d543264cSrillig 
29d543264cSrillig /* 5 spaces indentation, 8 spaces per tabulator */
3047306038Srillig //indent run -i5 -ts8
3195e11159Srillig 		    int		    indented_by_24;
32d543264cSrillig 
function_in_column_1(void)33d543264cSrillig 		    void	    function_in_column_1(void) {
34d543264cSrillig 		    }
35940b8500Srillig 
36940b8500Srillig #if indented
37940b8500Srillig #endif
3847306038Srillig //indent end
39d543264cSrillig 
40d543264cSrillig 
41d543264cSrillig /*
42d543264cSrillig  * Labels are always indented 2 levels left of the code. The first line starts
43d543264cSrillig  * at indentation level 3, the code in the function is therefore at level 4,
44d543264cSrillig  * and the label is at level 2, sticking out of the code.
45d543264cSrillig  */
4647306038Srillig //indent input
47d543264cSrillig 			int indent_by_24;
48d543264cSrillig 
function(void)49d543264cSrillig void function(void) {
50d543264cSrillig label:;
51d543264cSrillig }
5247306038Srillig //indent end
53d543264cSrillig 
5447306038Srillig //indent run -i8 -ts8 -di0
55d543264cSrillig 			int indent_by_24;
56d543264cSrillig 
function(void)57d543264cSrillig 			void function(void) {
58d543264cSrillig 		label:		;
59d543264cSrillig 			}
6047306038Srillig //indent end
61455df3c8Srillig 
62455df3c8Srillig 
63455df3c8Srillig /* Test the indentation computation in code_add_decl_indent. */
6447306038Srillig //indent input
65455df3c8Srillig int level_0;
66455df3c8Srillig {
67455df3c8Srillig int level_1;
68455df3c8Srillig {
69455df3c8Srillig int level_2;
70455df3c8Srillig {
71455df3c8Srillig int level_3;
72455df3c8Srillig {
73455df3c8Srillig int level_4;
74455df3c8Srillig }
75455df3c8Srillig }
76455df3c8Srillig }
77455df3c8Srillig }
7847306038Srillig //indent end
79455df3c8Srillig 
80455df3c8Srillig /*
81455df3c8Srillig  * The variables are indented by 16, 21, 26, 31, 36.
82455df3c8Srillig  * The variables end up in columns 17, 22, 27, 32, 37.
83455df3c8Srillig  */
8447306038Srillig //indent run -i5 -ts8 -di16 -ldi16
85455df3c8Srillig int		level_0;
86455df3c8Srillig {
87455df3c8Srillig      int	     level_1;
88455df3c8Srillig      {
89455df3c8Srillig 	  int		  level_2;
90455df3c8Srillig 	  {
91455df3c8Srillig 	       int	       level_3;
92455df3c8Srillig 	       {
93455df3c8Srillig 		    int		    level_4;
94455df3c8Srillig 	       }
95455df3c8Srillig 	  }
96455df3c8Srillig      }
97455df3c8Srillig }
9847306038Srillig //indent end
99455df3c8Srillig 
100455df3c8Srillig /*
101455df3c8Srillig  * The variables are indented by 7, 12, 17, 22, 27.
102455df3c8Srillig  * The variables end up in columns 8, 13, 18, 23, 28.
103455df3c8Srillig  */
10447306038Srillig //indent run -i5 -ts8 -di7 -ldi7
105455df3c8Srillig int    level_0;
106455df3c8Srillig {
107455df3c8Srillig      int    level_1;
108455df3c8Srillig      {
109455df3c8Srillig 	  int	 level_2;
110455df3c8Srillig 	  {
111455df3c8Srillig 	       int    level_3;
112455df3c8Srillig 	       {
113455df3c8Srillig 		    int	   level_4;
114455df3c8Srillig 	       }
115455df3c8Srillig 	  }
116455df3c8Srillig      }
117455df3c8Srillig }
11847306038Srillig //indent end
119*0982fd88Srillig 
120*0982fd88Srillig 
121*0982fd88Srillig /*
122*0982fd88Srillig  * Having function definitions indented to the right is not supported. In that
123*0982fd88Srillig  * case, indent does not recognize it as a function definition, and it doesn't
124*0982fd88Srillig  * indent the old-style parameter declarations one level further to the right.
125*0982fd88Srillig  */
126*0982fd88Srillig //indent input
old_style(a)127*0982fd88Srillig 			int		old_style(a)
128*0982fd88Srillig 			int		a;
129*0982fd88Srillig 			{
130*0982fd88Srillig 			}
131*0982fd88Srillig //indent end
132*0982fd88Srillig 
133*0982fd88Srillig //indent run-equals-input
134