/* $NetBSD: opt_ci.c,v 1.11 2023/06/10 08:17:04 rillig Exp $ */
/*
* Tests for the option '-ci', which controls the indentation of continuation
* lines in statements and declarations, but only inside a function.
*/
/*
* Top level expressions with and without parentheses.
*/
//indent input
int top_level = 1 +
2;
int top_level = (1 +
2 + (
3));
//indent end
//indent run -ci0
int top_level = 1 +
2;
int top_level = (1 +
2 + (
3));
//indent end
//indent run-equals-prev-output -ci2
//indent run-equals-prev-output -ci4
//indent run-equals-prev-output -ci8
//indent run -ci0 -nlp
int top_level = 1 +
2;
int top_level = (1 +
2 + (
3));
//indent end
//indent run -ci2 -nlp
int top_level = 1 +
2;
int top_level = (1 +
2 + (
3));
//indent end
/*
* Between 2019-04-04 and 2023-06-09, there was a special rule that prevented
* indentation based on the number of open parentheses, in the case that the
* continuation indentation is half an indentation level, maybe to prevent that
* the continuation line has the same indentation as a follow-up statement,
* such as in 'if' statements. To prevent such ambiguities, see '-eei'.
*/
//indent run -ci4 -nlp
int top_level = 1 +
2;
int top_level = (1 +
2 + (
3));
//indent end
/*
* Declarations in functions without parentheses.
*/
//indent input
int
sum(int a, int b)
{
return a +
b;
return first +
second;
}
//indent end
//indent run -ci0
int
sum(int a, int b)
{
return a +
b;
return first +
second;
}
//indent end
//indent run -ci2
int
sum(int a, int b)
{
return a +
b;
return first +
second;
}
//indent end
//indent run -ci4
int
sum(int a, int b)
{
return a +
b;
return first +
second;
}
//indent end
//indent run -ci8
int
sum(int a, int b)
{
return a +
b;
return first +
second;
}
//indent end
/*
* Continued statements with expressions in parentheses.
*/
//indent input
int
sum(int a, int b)
{
return (a +
b);
return (first +
second + (
third));
}
//indent end
//indent run -ci0
int
sum(int a, int b)
{
return (a +
b);
return (first +
second + (
third));
}
//indent end
//indent run-equals-prev-output -ci2
//indent run-equals-prev-output -ci4
//indent run-equals-prev-output -ci8
//indent run -ci2 -nlp
int
sum(int a, int b)
{
return (a +
b);
return (first +
second + (
third));
}
//indent end
//indent run -ci4 -nlp
int
sum(int a, int b)
{
return (a +
b);
return (first +
second + (
third));
}
//indent end
//indent run -ci8 -nlp
int
sum(int a, int b)
{
return (a +
b);
return (first +
second + (
third));
}
//indent end
/*
* In the default configuration, the indentation level from '-i' is the same
* as the continuation indentation from '-ci'. The difference between these
* becomes visible for structural macros like 'forever' or 'foreach'.
*/
//indent input
#define forever for (;;)
void
function(void)
{
forever
stmt();
forever {
stmt();
}
}
//indent end
//indent run-equals-input
/*
* The difference between the block indentation and the continuation
* indentation only becomes visible when these two differ.
*/
//indent run -i8 -ci4
#define forever for (;;)
void
function(void)
{
forever
stmt();
forever {
stmt();
}
}
//indent end
//indent input
{
size_t last_word_len = com.len
- (size_t)(last_blank + 1);
}
//indent end
//indent run-equals-input -ldi0 -ci4