git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 4/6] whitespace: fix initial-indent checking

From
JFJ. Bruce Fields <bfields@citi.umich.edu>
Date
Dec 16, 2007, 16:31 UTC
Message-ID
<1197822702-5262-5-git-send-email-bfields@citi.umich.edu>
In-Reply-To
<1197822702-5262-4-git-send-email-bfields@citi.umich.edu>

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>
---
 t/t4015-diff-whitespace.sh |   15 +++++++++++++++
 ws.c                       |   10 ++++------
 2 files changed, 19 insertions(+), 6 deletions(-)
diff --git a/t/t4015-diff-whitespace.sh b/t/t4015-diff-whitespace.sh
index 0f16bca..d30169f 100755
--- a/t/t4015-diff-whitespace.sh
+++ b/t/t4015-diff-whitespace.sh
@@ -125,6 +125,14 @@ test_expect_success 'check mixed spaces and tabs in indent' '
 
 '
 
+test_expect_success 'check mixed tabs and spaces in indent' '
+
+	# This is indented with HT SP HT.
+	echo "	 	foo();" > x &&
+	git diff --check | grep "space before tab in indent"
+
+'
+
 test_expect_success 'check with no whitespace errors' '
 
 	git commit -m "snapshot" &&
@@ -311,4 +319,11 @@ test_expect_success 'check spaces as indentation (indent-with-non-tab: on)' '
 
 '
 
+test_expect_success 'check tabs and spaces as indentation (indent-with-non-tab: on)' '
+
+	git config core.whitespace "indent-with-non-tab" &&
+	echo "	                foo ();" > x &&
+	! git diff --check
+
+'
 test_done
diff --git a/ws.c b/ws.c
index 1b32e45..aabd509 100644
--- a/ws.c
+++ b/ws.c
@@ -146,19 +146,17 @@ unsigned check_and_emit_line(const char *line, int len, unsigned ws_rule,
 
 	/* Check for space before tab in initial indent. */
 	for (i = 0; i < len; i++) {
-		if (line[i] == ' ') {
-			written = i + 1;
+		if (line[i] == ' ')
 			continue;
-		}
 		if (line[i] != '\t')
 			break;
-		if ((ws_rule & WS_SPACE_BEFORE_TAB) && (written != 0))
+		if ((ws_rule & WS_SPACE_BEFORE_TAB) && written < i)
 			result |= WS_SPACE_BEFORE_TAB;
-		break;
+		written = i + 1;
 	}
 
 	/* Check for indent using non-tab. */
-	if ((ws_rule & WS_INDENT_WITH_NON_TAB) && written >= 8)
+	if ((ws_rule & WS_INDENT_WITH_NON_TAB) && i - written >= 8)
 		result |= WS_INDENT_WITH_NON_TAB;
 
 	if (stream) {
-- 
1.5.4.rc0.41.gf723
Previous: J. Bruce FieldsNext: J. Bruce Fields
Message 33 of 43 in “builtin-apply: rename "whitespace" variables and fix styles”
  1. 1/2 builtin-apply: rename "whitespace" variables and fix stylesJunio C Hamano, Nov 24, 2007
  2. 2/2 builtin-apply: teach whitespace_rulesJunio C Hamano, Nov 24, 2007
  3. 3/2 core.whitespace: documentation updates.Junio C Hamano, Nov 24, 2007
  4. J. Bruce FieldsNov 24, 2007
  5. Junio C HamanoNov 24, 2007
  6. J. Bruce FieldsNov 25, 2007
  7. Junio C HamanoDec 6, 2007
  8. J. Bruce FieldsDec 6, 2007
  9. J. Bruce FieldsDec 16, 2007
  10. whitespace: fix off-by-one error in non-space-in-indent checkingJ. Bruce Fields, Dec 16, 2007
  11. whitespace: reorganize initial-indent checkJ. Bruce Fields, Dec 16, 2007
  12. whitespace: minor cleanupJ. Bruce Fields, Dec 16, 2007
  13. whitespace: fix initial-indent checkingJ. Bruce Fields, Dec 16, 2007
  14. whitespace: more accurate initial-indent highlightingJ. Bruce Fields, Dec 16, 2007
  15. whitespace: fix config.txt description of indent-with-non-tabJ. Bruce Fields, Dec 16, 2007
  16. J. Bruce FieldsDec 16, 2007
  17. Junio C HamanoDec 16, 2007
  18. J. Bruce FieldsDec 16, 2007
  19. Jakub NarebskiDec 16, 2007
  20. Wincent ColaiutaDec 16, 2007
  21. J. Bruce FieldsDec 16, 2007
  22. Jakub NarebskiDec 16, 2007
  23. Jakub NarebskiDec 16, 2007
  24. J. Bruce FieldsDec 16, 2007
  25. Jakub NarebskiDec 16, 2007
  26. Junio C HamanoDec 16, 2007
  27. Junio C HamanoDec 16, 2007
  28. Wincent ColaiutaDec 16, 2007
  29. J. Bruce FieldsDec 16, 2007
  30. 1/6 whitespace: fix off-by-one error in non-space-in-indent checkingJ. Bruce Fields, Dec 16, 2007
  31. 2/6 whitespace: reorganize initial-indent checkJ. Bruce Fields, Dec 16, 2007
  32. 3/6 whitespace: minor cleanupJ. Bruce Fields, Dec 16, 2007
  33. 4/6 whitespace: fix initial-indent checkingJ. Bruce Fields, Dec 16, 2007
  34. 5/6 whitespace: more accurate initial-indent highlightingJ. Bruce Fields, Dec 16, 2007
  35. 6/6 whitespace: fix config.txt description of indent-with-non-tabJ. Bruce Fields, Dec 16, 2007
  36. builtin-apply whitespaceJ. Bruce Fields, Dec 16, 2007
  37. 1/2 builtin-apply: minor cleanup of whitespace detectionJ. Bruce Fields, Dec 16, 2007
  38. 2/2 builtin-apply: stronger indent-with-on-tab fixingJ. Bruce Fields, Dec 16, 2007
  39. Wincent ColaiutaDec 17, 2007
  40. Junio C HamanoDec 17, 2007
  41. Jakub NarebskiDec 18, 2007
  42. Junio C HamanoDec 18, 2007
  43. Junio C HamanoDec 16, 2007

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.