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