From: "J. Bruce Fields" <bfields@citi.umich.edu>
To: Wincent Colaiuta <win@wincent.com>
Cc: git@vger.kernel.org, "J. Bruce Fields" <bfields@citi.umich.edu>
Subject: [PATCH 4/6] whitespace: fix initial-indent checking
Date: Sun, 16 Dec 2007 11:31:40 -0500 [thread overview]
Message-ID: <1197822702-5262-5-git-send-email-bfields@citi.umich.edu> (raw)
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
next prev parent reply other threads:[~2007-12-16 16:32 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-11-24 4:24 [PATCH 1/2] builtin-apply: rename "whitespace" variables and fix styles Junio C Hamano
2007-11-24 4:25 ` [PATCH 2/2] builtin-apply: teach whitespace_rules Junio C Hamano
2007-11-24 20:09 ` [PATCH 3/2] core.whitespace: documentation updates Junio C Hamano
2007-11-24 20:22 ` J. Bruce Fields
2007-11-24 21:42 ` Junio C Hamano
2007-11-25 21:58 ` J. Bruce Fields
2007-12-06 9:04 ` Junio C Hamano
2007-12-06 19:18 ` J. Bruce Fields
2007-12-16 3:48 ` J. Bruce Fields
2007-12-16 3:48 ` [PATCH] whitespace: fix off-by-one error in non-space-in-indent checking J. Bruce Fields
2007-12-16 3:48 ` [PATCH] whitespace: reorganize initial-indent check J. Bruce Fields
2007-12-16 3:48 ` [PATCH] whitespace: minor cleanup J. Bruce Fields
2007-12-16 3:48 ` [PATCH] whitespace: fix initial-indent checking J. Bruce Fields
2007-12-16 3:48 ` [PATCH] whitespace: more accurate initial-indent highlighting J. Bruce Fields
2007-12-16 3:48 ` [PATCH] whitespace: fix config.txt description of indent-with-non-tab J. Bruce Fields
2007-12-16 3:54 ` [PATCH] whitespace: fix initial-indent checking J. Bruce Fields
2007-12-16 20:40 ` Junio C Hamano
2007-12-16 21:19 ` J. Bruce Fields
2007-12-16 9:08 ` Jakub Narebski
2007-12-16 10:00 ` Wincent Colaiuta
2007-12-16 16:26 ` J. Bruce Fields
2007-12-16 18:16 ` Jakub Narebski
2007-12-16 18:24 ` Jakub Narebski
2007-12-16 19:59 ` J. Bruce Fields
2007-12-16 20:31 ` Jakub Narebski
2007-12-16 21:00 ` Junio C Hamano
2007-12-16 19:43 ` Junio C Hamano
2007-12-16 10:02 ` [PATCH] whitespace: reorganize initial-indent check Wincent Colaiuta
2007-12-16 16:31 ` J. Bruce Fields
2007-12-16 16:31 ` [PATCH 1/6] whitespace: fix off-by-one error in non-space-in-indent checking J. Bruce Fields
2007-12-16 16:31 ` [PATCH 2/6] whitespace: reorganize initial-indent check J. Bruce Fields
2007-12-16 16:31 ` [PATCH 3/6] whitespace: minor cleanup J. Bruce Fields
2007-12-16 16:31 ` J. Bruce Fields [this message]
2007-12-16 16:31 ` [PATCH 5/6] whitespace: more accurate initial-indent highlighting J. Bruce Fields
2007-12-16 16:31 ` [PATCH 6/6] whitespace: fix config.txt description of indent-with-non-tab J. Bruce Fields
2007-12-16 17:58 ` builtin-apply whitespace J. Bruce Fields
2007-12-16 17:58 ` [PATCH 1/2] builtin-apply: minor cleanup of whitespace detection J. Bruce Fields
2007-12-16 17:58 ` [PATCH 2/2] builtin-apply: stronger indent-with-on-tab fixing J. Bruce Fields
2007-12-17 8:00 ` [PATCH 5/6] whitespace: more accurate initial-indent highlighting Wincent Colaiuta
2007-12-17 8:04 ` Junio C Hamano
2007-12-18 0:32 ` Jakub Narebski
2007-12-18 0:51 ` Junio C Hamano
2007-12-16 21:06 ` [PATCH] whitespace: reorganize initial-indent check Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1197822702-5262-5-git-send-email-bfields@citi.umich.edu \
--to=bfields@citi.umich.edu \
--cc=git@vger.kernel.org \
--cc=win@wincent.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).