@matheusbsbs / matheus-bagliano / commits / 9afa2d4aa9
Fork 0

whitespace: fix initial-indent checking

After this patch, "written" counts the number of bytes up to and including the most recently seen tab. This allows us to detect (and count) spaces by comparing to "i". This allows catching initial indents like '\t ' (a tab followed by 8 spaces), while previously indent-with-non-tab caught only indents that consisted entirely of spaces. This also allows fixing an indent-with-non-tab regression, so we can again detect indents like '\t \t'. Also update tests to catch these cases. Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu> Signed-off-by: Junio C Hamano <gitster@pobox.com>

J. Bruce Fields committed Dec 16, 2007 at 11:31 UTC 9afa2d4aa9423ab594c7281cc2360df55498a407
2 files changed +19 -6
t/t4015-diff-whitespace.sh
+15
@@ -125,6 +125,14 @@ test_expect_success 'check mixed spaces and tabs in indent' '
125
126 '
127
128 +test_expect_success 'check mixed tabs and spaces in indent' '
129 +
130 + # This is indented with HT SP HT.
131 + echo " foo();" > x &&
132 + git diff --check | grep "space before tab in indent"
133 +
134 +'
135 +
136 test_expect_success 'check with no whitespace errors' '
137
138 git commit -m "snapshot" &&
@@ -311,4 +319,11 @@ test_expect_success 'check spaces as indentation (indent-with-non-tab: on)' '
319
320 '
321
322 +test_expect_success 'check tabs and spaces as indentation (indent-with-non-tab: on)' '
323 +
324 + git config core.whitespace "indent-with-non-tab" &&
325 + echo " foo ();" > x &&
326 + ! git diff --check
327 +
328 +'
329 test_done
ws.c
+4 -6
@@ -146,19 +146,17 @@ unsigned check_and_emit_line(const char *line, int len, unsigned ws_rule,
146
147 /* Check for space before tab in initial indent. */
148 for (i = 0; i < len; i++) {
149 - if (line[i] == ' ') {
150 - written = i + 1;
149 + if (line[i] == ' ')
150 continue;
152 - }
151 if (line[i] != '\t')
152 break;
155 - if ((ws_rule & WS_SPACE_BEFORE_TAB) && (written != 0))
153 + if ((ws_rule & WS_SPACE_BEFORE_TAB) && written < i)
154 result |= WS_SPACE_BEFORE_TAB;
157 - break;
155 + written = i + 1;
156 }
157
158 /* Check for indent using non-tab. */
161 - if ((ws_rule & WS_INDENT_WITH_NON_TAB) && written >= 8)
159 + if ((ws_rule & WS_INDENT_WITH_NON_TAB) && i - written >= 8)
160 result |= WS_INDENT_WITH_NON_TAB;
161
162 if (stream) {