Home | History | Annotate | Line # | Download | only in indent
opt_badp.c revision 1.15
      1 /* $NetBSD: opt_badp.c,v 1.15 2023/06/27 04:28:16 rillig Exp $ */
      2 
      3 /*
      4  * Tests for the options '-badp' and '-nbadp'.
      5  *
      6  * The option '-badp' forces a blank line between the first set of declarations
      7  * in a function and the next comment or statement. It produces a blank line
      8  * even if there are no declarations.
      9  */
     10 
     11 
     12 /* An empty function body does not need a blank line. */
     13 //indent input
     14 void
     15 empty(void)
     16 {
     17 }
     18 //indent end
     19 
     20 //indent run-equals-input -badp
     21 
     22 //indent run-equals-input -nbadp
     23 
     24 
     25 /* If an empty function body already has a blank line, it is kept. */
     26 //indent input
     27 void
     28 blank(void)
     29 {
     30 
     31 }
     32 //indent end
     33 
     34 //indent run-equals-input -badp
     35 
     36 //indent run-equals-input -nbadp
     37 
     38 
     39 /*
     40  * If a function body has only declarations (doesn't occur in practice), it
     41  * does not need an empty line.
     42  */
     43 //indent input
     44 void
     45 declaration(void)
     46 {
     47 	int		decl;
     48 }
     49 //indent end
     50 
     51 //indent run-equals-input -badp
     52 
     53 //indent run-equals-input -nbadp
     54 
     55 
     56 /*
     57  * A function body without declarations gets an empty line above the first
     58  * statement.
     59  */
     60 //indent input
     61 void
     62 statement(void)
     63 {
     64 	stmt();
     65 }
     66 //indent end
     67 
     68 //indent run -badp
     69 void
     70 statement(void)
     71 {
     72 
     73 	stmt();
     74 }
     75 //indent end
     76 
     77 //indent run-equals-input -nbadp
     78 
     79 
     80 /*
     81  * A function body with a declaration and a statement gets a blank line between
     82  * those.
     83  */
     84 //indent input
     85 void
     86 declaration_statement(void)
     87 {
     88 	int		decl;
     89 	stmt();
     90 }
     91 //indent end
     92 
     93 //indent run -badp
     94 void
     95 declaration_statement(void)
     96 {
     97 	int		decl;
     98 
     99 	stmt();
    100 }
    101 //indent end
    102 
    103 //indent run-equals-input -nbadp
    104 
    105 
    106 /* If there already is a blank line in the right place, it is kept. */
    107 //indent input
    108 static void
    109 declaration_blank_statement(void)
    110 {
    111 	int		decl;
    112 
    113 	stmt();
    114 }
    115 //indent end
    116 
    117 //indent run-equals-input -badp
    118 
    119 //indent run-equals-input -nbadp
    120 
    121 
    122 /* Additional blank lines are kept. To remove them, see the '-sob' option. */
    123 //indent input
    124 static void
    125 declaration_blank_blank_statement(void)
    126 {
    127 	int		decl;
    128 
    129 
    130 
    131 	stmt();
    132 }
    133 //indent end
    134 
    135 //indent run-equals-input -badp
    136 
    137 //indent run-equals-input -nbadp
    138 
    139 
    140 /*
    141  * The blank line is only inserted at the top of a function body, not in nested
    142  * block statements.
    143  */
    144 //indent input
    145 static void
    146 nested(void)
    147 {
    148 	{
    149 		int		decl;
    150 		stmt();
    151 	}
    152 }
    153 //indent end
    154 
    155 //indent run -badp
    156 static void
    157 nested(void)
    158 {
    159 
    160 	{
    161 		int		decl;
    162 		stmt();
    163 	}
    164 }
    165 //indent end
    166 
    167 //indent run-equals-input -nbadp
    168 
    169 
    170 /*
    171  * A struct declaration or an initializer are not function bodies, so don't
    172  * add a blank line after them.
    173  */
    174 //indent input
    175 struct {
    176 	int member[2];
    177 } s = {
    178 	{
    179 		0,
    180 		0,
    181 	}
    182 };
    183 //indent end
    184 
    185 //indent run-equals-input -di0 -badp
    186 
    187 //indent run-equals-input -di0 -nbadp
    188 
    189 
    190 /* Single-line function definitions must be handled correctly as well. */
    191 //indent input
    192 void f(void) { int decl; stmt; }
    193 //indent end
    194 
    195 //indent run -badp
    196 void
    197 f(void)
    198 {
    199 	int		decl;
    200 
    201 	stmt;
    202 }
    203 //indent end
    204 
    205 //indent run -nfbs -badp
    206 void
    207 f(void) {
    208 	int		decl;
    209 
    210 	stmt;
    211 }
    212 //indent end
    213 
    214 
    215 /* The '}' of an initializer does not end a block. */
    216 //indent input
    217 void
    218 f(void)
    219 {
    220 	int decl1[2][2] = {
    221 		{1, 2},
    222 		{3, 4},
    223 	};
    224 	int decl2 = 5;
    225 	stmt;
    226 }
    227 //indent end
    228 
    229 //indent run -di0
    230 void
    231 f(void)
    232 {
    233 	int decl1[2][2] = {
    234 		{1, 2},
    235 		{3, 4},
    236 	};
    237 	int decl2 = 5;
    238 // $ FIXME: Add blank line here.
    239 	stmt;
    240 }
    241 //indent end
    242 
    243 
    244 /*
    245  * Due to its limited lookahead, indent cannot know whether the comment is
    246  * followed by a declaration or a statement.
    247  */
    248 //indent input
    249 void f(void) {
    250 	int		decl1;
    251 	/* comment */
    252 	int		decl2;
    253 	stmt;
    254 }
    255 //indent end
    256 
    257 //indent run -badp
    258 void
    259 f(void)
    260 {
    261 	int		decl1;
    262 // $ FIXME: No blank line here.
    263 
    264 	/* comment */
    265 	int		decl2;
    266 // $ FIXME: Add blank line here.
    267 	stmt;
    268 }
    269 //indent end
    270 
    271 
    272 /* Combining -bad and -badp only adds a single blank line. */
    273 //indent input
    274 void f(void) { int decl; stmt1; stmt2; }
    275 //indent end
    276 
    277 //indent run -bad -badp
    278 void
    279 f(void)
    280 {
    281 	int		decl;
    282 
    283 	stmt1;
    284 // $ FIXME: Remove this blank line.
    285 
    286 	stmt2;
    287 }
    288 //indent end
    289