ps_ind_level.c revision 1.6
1/* $NetBSD: ps_ind_level.c,v 1.6 2022/04/24 09:04:12 rillig Exp $ */
2
3/*
4 * The indentation of the very first line of a file determines the
5 * indentation of the remaining code. Even if later code has a smaller
6 * indentation, it is nevertheless indented to the level given by the first
7 * line of code.
8 *
9 * In this particular test, the indentation is set to 5 and the tabulator
10 * width is set to 8, to demonstrate an off-by-one error in
11 * main_prepare_parsing that has been fixed in indent.c 1.107 from 2021-10-05.
12 *
13 * The declaration in the first line is indented by 3 tabs, amounting to 24
14 * spaces. The initial indentation of the code is intended to be rounded down,
15 * to 4 levels of indentation, amounting to 20 spaces.
16 */
17//indent input
18			int indented_by_24;
19
20void function_in_column_1(void){}
21//indent end
22
23/* 5 spaces indentation, 8 spaces per tabulator */
24//indent run -i5 -ts8
25		    int		    indented_by_24;
26
27		    void	    function_in_column_1(void){
28		    }
29//indent end
30/*
31 * In the above function declaration, the space between '){' is missing. This
32 * is because the tokenizer only recognizes function definitions if they start
33 * at indentation level 0, but this declaration starts at indentation level 4,
34 * due to the indentation in line 1. It's an edge case that is probably not
35 * worth fixing.
36 *
37 * See 'in_func_def_params = true'.
38 */
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
49void function(void) {
50label:;
51}
52//indent end
53
54//indent run -i8 -ts8 -di0
55			int indent_by_24;
56
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
65int level_0;
66{
67int level_1;
68{
69int level_2;
70{
71int level_3;
72{
73int 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
85int		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
105int    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