[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 7/7] output.c: Fix indentation of statements within if/for/while
From: |
Tim Hentenaar |
Subject: |
[PATCH 7/7] output.c: Fix indentation of statements within if/for/while statements |
Date: |
Sun, 5 Jul 2015 15:10:54 +0200 |
For -as, if we're in an if/for/while statement, and we're breaking the
line somewhere within the parenthesized expression, use the same indent
level as the parent statement.
---
ChangeLog | 6 ++++--
regression/input/align-with-spaces.c | 16 ++++++++++++++++
regression/standard/align-with-spaces.c | 16 ++++++++++++++++
src/output.c | 28 +++++++++++++++++++++++++---
4 files changed, 61 insertions(+), 5 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 00bd32a..8b8a9d6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,7 +1,9 @@
2015-07-04 Tim Hentenaar <address@hidden>
* handletoken.c: Detect C99 compound literals.
* Makefile.am: Add -Wextra to AM_CFLAGS.
-
+ * output.c: For -as, if we're in an if/for/while statement, and
+ we're breaking the line somewhere within the parenthesized
+ expression, use the same indent level as the parent statement.
2015-06-30 Tim Hentenaar <address@hidden>
* Tighten-up the CFLAGS with additional warning flags.
* Ensure indent builds with clang.
@@ -51,7 +53,7 @@
* Fix indentation of block comments following braces.
2015-06-13 Tim Hentenaar <address@hidden>
- * Fix regression introduced in hg revision 25c27d429590
+ * Fix regression introduced in hg revision 25c27d429590
* Add an option (-slc/--single-line-conditionals) to allow
conditionals and their inner statement to be on the same line if
they're not braced. This should fix GNU bug #42357.
diff --git a/regression/input/align-with-spaces.c
b/regression/input/align-with-spaces.c
index 5ab9ffc..53eab5a 100644
--- a/regression/input/align-with-spaces.c
+++ b/regression/input/align-with-spaces.c
@@ -4,4 +4,20 @@ static void really_long_function_decl(const char *string_here,
int integer_here,
ERROR("unable to allocate memory for a new xxx "
"because %s", strerror(errno));
}
+
+ if (sbuf_add_str(delete_state, SBUF_TSPACE, 0) ||
+ sbuf_add_snum(states[states_allocated - 1].timestamp,
+ SBUF_SCOLON)) {
+ i++;
+ }
+
+ switch (x) {
+ case XXX:
+ if (1) {
+ if (modify_mlist(delta->old_file.path,
+ delta->new_file.path))
+ goto err;
+ }
+ break;
+ }
}
diff --git a/regression/standard/align-with-spaces.c
b/regression/standard/align-with-spaces.c
index 65b8753..cb7e655 100644
--- a/regression/standard/align-with-spaces.c
+++ b/regression/standard/align-with-spaces.c
@@ -6,4 +6,20 @@ really_long_function_decl (const char *string_here, int
integer_here,
ERROR ("unable to allocate memory for a new xxx "
"because %s", strerror (errno));
}
+
+ if (sbuf_add_str (delete_state, SBUF_TSPACE, 0) ||
+ sbuf_add_snum (states[states_allocated - 1].timestamp,
+ SBUF_SCOLON)) {
+ i++;
+ }
+
+ switch (x) {
+ case XXX:
+ if (1) {
+ if (modify_mlist (delta->old_file.path,
+ delta->new_file.path))
+ goto err;
+ }
+ break;
+ }
}
diff --git a/src/output.c b/src/output.c
index 71049ce..ee01bcc 100644
--- a/src/output.c
+++ b/src/output.c
@@ -592,6 +592,7 @@ static int pad_output(int cur_col, int target_column)
{
int offset = 0;
int align_target = target_column;
+ int tos = parser_state_tos->tos;
if (cur_col < target_column)
{
@@ -600,9 +601,30 @@ static int pad_output(int cur_col, int target_column)
if (settings.align_with_spaces)
{
if (align_target >= parser_state_tos->ind_level)
- align_target = parser_state_tos->ind_level;
- offset = (align_target - cur_col + 1) / settings.tabsize;
- align_target = cur_col + (offset * settings.tabsize);
+ align_target = parser_state_tos->ind_level;
+
+ /* If we're within an if/for/while, only use tabs
+ * to indent to the same level as the parent
+ * statement.
+ */
+ if (parser_state_tos->last_rw == rw_sp_paren &&
+ parser_state_tos->p_stack[tos] == stmt &&
+ *s_code && tos > 0)
+ {
+ do {
+ if (parser_state_tos->p_stack[tos] == ifstmt ||
+ parser_state_tos->p_stack[tos] == forstmt ||
+ parser_state_tos->p_stack[tos] == whilestmt)
+ break;
+ } while (--tos);
+ if (tos) align_target = parser_state_tos->il[tos];
+ } else if (parser_state_tos->p_stack[tos] == ifstmt ||
+ parser_state_tos->p_stack[tos] == forstmt ||
+ parser_state_tos->p_stack[tos] == whilestmt)
+ align_target = parser_state_tos->il[tos];
+
+ offset = (align_target - cur_col + 1) / settings.tabsize;
+ align_target = cur_col + (offset * settings.tabsize);
}
offset = settings.tabsize - (cur_col - 1) % settings.tabsize;
--
2.3.6