whitespace: more accurate initial-indent highlighting
Instead of highlighting the entire initial indent, highlight only the problematic spaces. In the case of an indent like ' \t \t' there may be multiple problematic ranges, so it's easiest to emit the highlighting as we go instead of trying rember disjoint ranges and do it all at the end. Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
9afa2d4aa9
commit
ffe568859b
22
ws.c
22
ws.c
@ -150,24 +150,32 @@ unsigned check_and_emit_line(const char *line, int len, unsigned ws_rule,
|
||||
continue;
|
||||
if (line[i] != '\t')
|
||||
break;
|
||||
if ((ws_rule & WS_SPACE_BEFORE_TAB) && written < i)
|
||||
if ((ws_rule & WS_SPACE_BEFORE_TAB) && written < i) {
|
||||
result |= WS_SPACE_BEFORE_TAB;
|
||||
if (stream) {
|
||||
fputs(ws, stream);
|
||||
fwrite(line + written, i - written, 1, stream);
|
||||
fputs(reset, stream);
|
||||
}
|
||||
} else if (stream)
|
||||
fwrite(line + written, i - written, 1, stream);
|
||||
if (stream)
|
||||
fwrite(line + i, 1, 1, stream);
|
||||
written = i + 1;
|
||||
}
|
||||
|
||||
/* Check for indent using non-tab. */
|
||||
if ((ws_rule & WS_INDENT_WITH_NON_TAB) && i - written >= 8)
|
||||
if ((ws_rule & WS_INDENT_WITH_NON_TAB) && i - written >= 8) {
|
||||
result |= WS_INDENT_WITH_NON_TAB;
|
||||
|
||||
if (stream) {
|
||||
/* Highlight errors in leading whitespace. */
|
||||
if ((result & WS_SPACE_BEFORE_TAB) ||
|
||||
(result & WS_INDENT_WITH_NON_TAB)) {
|
||||
fputs(ws, stream);
|
||||
fwrite(line, written, 1, stream);
|
||||
fwrite(line + written, i - written, 1, stream);
|
||||
fputs(reset, stream);
|
||||
}
|
||||
written = i;
|
||||
}
|
||||
|
||||
if (stream) {
|
||||
/* Now the rest of the line starts at written.
|
||||
* The non-highlighted part ends at trailing_whitespace. */
|
||||
if (trailing_whitespace == -1)
|
||||
|
Loading…
Reference in New Issue
Block a user